You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DuckDB 0.8.0读取Google Storage中的CSV文件

在DuckDB 0.8.0中读取Google Storage CSV文件的解决方案

问题背景

  • 使用DuckDB 0.8.0版本,需读取Google Storage中路径为gs://some_bucket/some_file.csv的CSV文件
  • Pandas可通过pd.read_csv("gs://some_bucket/some_file.csv")直接读取,但相同逻辑在DuckDB中无效
  • 查阅DuckDB官方S3导入文档时,因文档侧重AWS S3场景,对Google Storage的配置产生困惑

初始尝试与错误分析

初始配置步骤

首先猜测需要安装并加载httpfs扩展(DuckDB用于处理远程文件的核心扩展):

INSTALL httpfs;
LOAD httpfs;

随后通过Google Cloud控制台生成HMAC密钥,从环境变量中获取密钥值并配置:

import duckdb
import os

duckdb.sql("LOAD httpfs;")

hmac_access = os.getenv('GOOGLE_HMAC_ACCESS_ID')
hmac_secret = os.getenv('GOOGLE_HMAC_SECRET')

duckdb.sql(f"SET s3_access_key_id='{hmac_access}';")
duckdb.sql(f"SET s3_secret_access_key='{hmac_secret}';")

两种失败方法及原因

方法1:直接查询路径

执行代码:

duckdb.sql(f"SELECT * FROM '{gcp_path_1}'").show()

报错:

duckdb.CatalogException: Catalog Error: Table with name {gcp_path_1} does not exist!
Did you mean "pg_am"?

原因:DuckDB默认将单引号包裹的路径识别为本地表名,而非远程文件路径,需先完成正确的端点配置,才能让扩展识别gs://格式的路径。

方法2:使用read_csv函数

执行代码:

duckdb.sql(f"SELECT * from read_csv('{gcp_path_1}', AUTO_DETECT=TRUE);")

报错:

duckdb.HTTPException: HTTP Error: HTTP GET error on 'https://some_bucket.s3.amazonaws.com/some_file.csv' (HTTP 400)

原因:DuckDB默认将gs://路径解析为AWS S3的请求格式,把请求发送到AWS S3端点而非Google Storage的专属端点,导致请求无效。

解决办法

添加Google Storage的端点配置即可解决所有问题:

SET s3_endpoint='storage.googleapis.com';

完整可用代码

import duckdb
import os

# 首次运行需执行INSTALL,后续重复运行可省略
duckdb.sql("INSTALL httpfs;")
duckdb.sql("LOAD httpfs;")

# 从环境变量读取Google HMAC密钥
hmac_access = os.getenv('GOOGLE_HMAC_ACCESS_ID')
hmac_secret = os.getenv('GOOGLE_HMAC_SECRET')

# 配置密钥与Google Storage专属端点
duckdb.sql(f"SET s3_access_key_id='{hmac_access}';")
duckdb.sql(f"SET s3_secret_access_key='{hmac_secret}';")
duckdb.sql("SET s3_endpoint='storage.googleapis.com';")

gcp_path_1 = "gs://some_bucket/some_file.csv"

# 方法1:直接查询远程CSV文件
duckdb.sql(f"SELECT * FROM '{gcp_path_1}'").show()

# 方法2:使用read_csv函数(支持更多自定义参数)
duckdb.sql(f"SELECT * from read_csv('{gcp_path_1}', AUTO_DETECT=TRUE);").show()

内容的提问来源于stack exchange,提问作者baxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:00:32