升级ADLS Gen2后,ADF数据流创建的Blob提交块数为0的问题求助
问题分析与解决方案
ADF数据流在ADLS Gen2下的写入机制差异
升级到ADLS Gen2启用分层命名空间后,ADF数据流写入文件时,并没有走标准块Blob的分块上传流程,而是直接以整文件写入的方式生成Blob。虽然存储管理界面标记它为「Block blob」,但实际不会保留块列表信息,所以调用GetBlockListAsync会返回0条已提交块。验证Blob的实际块信息
可以用Azure存储资源管理器查看该Blob的详细属性,确认是否存在块列表。如果没有,就说明是ADF数据流在ADLS Gen2环境下的写入逻辑导致的,并非Bug。无需依赖块列表的替代读取方式
如果业务不需要操作单个块,直接读取完整Blob内容即可,修改后的代码如下:
string connectionString = ""; string containerName = "test"; string blobName = "test.json"; BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString); BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName); BlobClient blobClient = containerClient.GetBlobClient(blobName); // 直接读取Blob完整内容 using (var stream = new MemoryStream()) { await blobClient.DownloadToAsync(stream); stream.Position = 0; using (var reader = new StreamReader(stream)) { string content = await reader.ReadToEndAsync(); Console.WriteLine(content); } }
- 必须操作块的解决办法
- 替换ADF数据流为复制活动写入Blob,复制活动在ADLS Gen2中会保留块列表信息。
- 数据流写入完成后,通过Azure函数或自定义代码重新分块上传该Blob,生成块记录。
内容的提问来源于stack exchange,提问作者DxG
相关产品推荐
相关产品推荐

