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

如何用DuckDB从Azure Blob Storage容器加载CSV文件(Python方案)

使用Python将Azure Blob Storage中的CSV加载至DuckDB

前置准备

  • 安装依赖包:
    pip install duckdb azure-storage-blob
    
  • 获取Azure存储账户的连接字符串(或账户名+访问密钥),用于访问私有Blob容器;若容器为公开只读,可跳过凭证配置。

方案一:直接通过DuckDB扩展加载(推荐)

无需下载文件,直接通过DuckDB的azure和httpfs扩展读取Blob中的CSV,适合大文件场景。

import duckdb

# 建立DuckDB连接
conn = duckdb.connect()

# 加载必要扩展
conn.execute("INSTALL httpfs;")
conn.execute("LOAD httpfs;")
conn.execute("INSTALL azure;")
conn.execute("LOAD azure;")

# 配置Azure访问凭证(二选一)
# 方式1:使用存储账户连接字符串
conn.execute("SET azure_connection_string = '你的Azure存储账户连接字符串';")

# 方式2:使用账户名+访问密钥
# conn.execute("SET azure_account_name = '你的存储账户名';")
# conn.execute("SET azure_account_key = '你的存储账户访问密钥';")

# 读取单个或多个CSV文件(支持通配符*)
# 路径格式:azure://<容器名>/<文件路径>
df = conn.execute("""
SELECT * FROM read_csv('azure://你的容器名/*.csv', header=true)
""").fetch_df()

# 查看数据
print(df.head())

# 可选:将数据导入DuckDB本地表
conn.execute("""
CREATE TABLE IF NOT EXISTS my_blob_data AS
SELECT * FROM read_csv('azure://你的容器名/*.csv', header=true)
""")

# 关闭连接
conn.close()

方案二:先下载CSV到本地再加载

适合需要对本地文件做预处理的场景。

import duckdb
from azure.storage.blob import BlobServiceClient
import os
import shutil

# 初始化Azure Blob客户端
connection_string = "你的Azure存储账户连接字符串"
container_client = BlobServiceClient.from_connection_string(connection_string).get_container_client("你的容器名")

# 创建临时目录存储下载的CSV
temp_dir = "./temp_blob_csv"
os.makedirs(temp_dir, exist_ok=True)

# 下载容器中所有CSV文件
for blob in container_client.list_blobs():
    if blob.name.endswith(".csv"):
        local_path = os.path.join(temp_dir, blob.name)
        os.makedirs(os.path.dirname(local_path), exist_ok=True)
        with open(local_path, "wb") as f:
            f.write(container_client.get_blob_client(blob).download_blob().readall())

# 用DuckDB加载本地CSV
conn = duckdb.connect()
df = conn.execute("""
SELECT * FROM read_csv('./temp_blob_csv/*.csv', header=true)
""").fetch_df()

print(df.head())

# 可选:清理临时文件
shutil.rmtree(temp_dir)

conn.close()

注意事项

  • 若Blob容器为公开只读,可省略凭证配置,直接使用路径azure://<容器名>/<文件路径>读取
  • read_csv支持自定义参数,比如指定分隔符sep=';'、编码encoding='gbk'、列类型types={'id': 'INT'}等,可根据实际CSV格式调整
  • 大文件优先使用方案一,避免本地磁盘占用和下载耗时

内容的提问来源于stack exchange,提问作者Péter Szilvási

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:50