如何使用Azure SDK for Python分块读取大Blob数据?
分块读取Azure Blob存储大文件的实现方案
要实现以300MB为分块迭代读取大Blob文件,核心是利用download_blob()返回的StorageStreamDownloader对象的chunks()方法,并通过参数指定自定义分块大小,替代readall()一次性加载全部内容。
关键调整说明
download_blob()方法支持通过max_chunk_get_size参数设置单次读取的分块大小(单位为字节),你需要将300MB转换为字节(30010241024 = 314572800)传入该参数,这样chunks()迭代器就会按指定大小返回数据块。
完整实现代码
from azure.storage.blob import BlobClient import uuid from azure.storage.blob import BlobBlock # 初始化BlobClient(沿用你现有代码的初始化逻辑) blob_client = BlobClient(blob_service_client.url, container_name, blob_name, credential) # 设置分块大小为300MB(单位:字节) chunk_size = 300 * 1024 * 1024 # 获取下载流,指定自定义分块大小 data_stream = blob_client.download_blob(max_chunk_get_size=chunk_size) # 迭代处理每个分块 block_list = [] for chunk in data_stream.chunks(): # 这里添加你的数据处理逻辑,比如解析、转换等 # 示例:如果需要将分块上传到另一个Blob(对应你提供的代码片段) block_id = str(uuid.uuid4()) destination_blob_client.stage_block(block_id=block_id, data=chunk) block_list.append(BlobBlock(block_id=block_id)) # 如果是分块上传场景,最后提交块列表完成Blob上传 # destination_blob_client.commit_block_list(block_list)
注意事项
chunks()方法返回的每个chunk是字节数组,可直接用于数据处理或分块上传- 如果你的处理逻辑需要更灵活的分块控制,也可以在循环中对
chunk进行二次拆分,但通常直接指定max_chunk_get_size更高效 - 确保你的处理流程内存占用在可控范围内,300MB分块对应内存中会加载单个块的数据,符合你日常500MB的处理规模
内容的提问来源于stack exchange,提问作者paone
相关产品推荐
相关产品推荐

