我使用的是duckdb版本0.8.0
我有一个CSV文件位于谷歌存储gs://some_bucket/some_file.csv
,并希望使用duckdb加载此。
在pandas中,我可以执行pd.read_csv("gs://some_bucket/some_file.csv")
,但在duckdb中似乎不行。我看到这里有一些文档:https://duckdb.org/docs/guides/import/s3_import.html,但我发现这令人困惑,因为它主要针对s3
的使用。
我想我得跑了:
duckdb.sql("INSTALL httpfs;")
duckdb.sql("LOAD httpfs;")
从文档中,我不确定参数是什么:
SET s3_access_key_id='key_id';
SET s3_secret_access_key='access_key';
会的。
如何从duckdb中的google存储加载csv?
编辑-未成功的方法
我已经添加了hmac
键,并下载他们以下指南在这里:https://cloud.google.com/storage/docs/authentication/managing-hmackeys#gsutil_1
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}';")
################################################################################
# approach 1
# Doesn't work - fails with:
#
# Traceback (most recent call last):
# File "duck_test.py", line 18, in <module>
# duckdb.sql("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.sql(f"SELECT * FROM '{gcp_path_1}'").show()
################################################################################
# approach 2
# Fails with:
# Traceback (most recent call last):
# File "duck_test.py", line 32, in <module>
# 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.sql(f"SELECT * from read_csv('{gcp_path_1}', AUTO_DETECT=TRUE);")
编辑(工作中)
在上面的代码中,我忘记设置
duckdb.sql("SET s3_endpoint='storage.googleapis.com'")
在设置此之后,两种方法都从存储器读取。
1条答案
按热度按时间of1yzvn41#
要访问您的文件,您需要使用s3作为URL前缀。
1.如果您的GCS存储桶向公众开放
1.如果您的GCS存储桶不是公共的。首先,您需要设置一个HMAC密钥。转到google cloud console并按照说明操作。然后,执行以下命令