使用DuckDB向Azure存储写入Parquet文件时遇未实现错误求助
解决DuckDB写入Azure Blob Parquet文件的报错问题
报错Not implemented Error: Writing to HTTP files not implemented的核心原因是:DuckDB的httpfs扩展仅支持通过HTTPS协议读取对象存储文件,但写入操作需要使用Azure Blob存储的专用访问方式,而非普通HTTPS URL。
修正步骤
- 配置Azure存储账户的访问凭证(账户密钥或SAS令牌),确保DuckDB拥有写入Blob容器的权限
- 使用
azure://<容器名>.<存储账户名>.blob.core.windows.net/格式的专用路径,替代原HTTPS URL
修正后的代码示例
import duckdb # 替换为你的Azure存储账户信息 azure_account_name = "somename" azure_account_key = "你的存储账户访问密钥" container_name = "the-conatiner-name" # 用DuckDB支持的Azure专用路径格式 csv_path = f"azure://{container_name}.{azure_account_name}.blob.core.windows.net/the_csv.csv" parquet_output_path = f"azure://{container_name}.{azure_account_name}.blob.core.windows.net/ParquetFile.parquet" conn = duckdb.connect() conn.execute('install httpfs') conn.execute('load httpfs') # 配置Azure存储访问凭证 conn.execute(f"SET azure_storage_account='{azure_account_name}'") conn.execute(f"SET azure_storage_access_key='{azure_account_key}'") # 读取CSV到临时表 conn.execute(f""" CREATE OR REPLACE TABLE some_table AS SELECT * FROM '{csv_path}' LIMIT 10 """) # 写入Parquet到Azure Blob容器 conn.execute(f"COPY some_table TO '{parquet_output_path}' (FORMAT 'parquet')")
补充说明
- 若不想暴露账户密钥,可改用SAS令牌替代凭证配置:
sas_token = "你的SAS令牌(注意不要带开头的?)" conn.execute(f"SET azure_storage_sas_token='{sas_token}'") - 确保所用凭证拥有Blob容器的写入权限(如
Storage Blob Data Contributor角色)
内容的提问来源于stack exchange,提问作者Debottam
相关产品推荐
相关产品推荐

