ADLS Gen2多路径文件详情导出CSV仅保留最后路径数据问题
解决ADLS Gen2多路径文件详情导出CSV覆盖问题
你的脚本每次循环调用Export-Csv时,默认会覆盖目标CSV文件,导致前几个路径的数据被后续循环的内容清空,最终只保留最后一个路径的结果。下面提供两种可行的解决方法:
方法一:先收集所有数据再一次性导出(推荐)
先将所有路径的文件详情统一收集到数组中,最后一次性导出,减少IO操作次数,代码更简洁:
$Context = New-AzureStorageContext -StorageAccountName "cordus6abfsuat001" -UseConnectedAccount $paths = "path1", "path2", "path3", "path4", "path5" # 初始化空数组存储所有文件数据 $allFiles = @() foreach($element in $paths){ # 将当前路径的文件数据追加到数组 $allFiles += Get-AzDataLakeGen2ChildItem -Context $Context -FileSystem "root" -Path $element } # 统一导出所有数据至CSV $allFiles | Export-Csv "filename.csv" -NoTypeInformation
方法二:使用-Append参数循环追加内容
如果数据量极大,担心内存占用过高,可以用-Append参数逐次追加内容,同时避免重复写入表头:
$Context = New-AzureStorageContext -StorageAccountName "cordus6abfsuat001" -UseConnectedAccount $paths = "path1", "path2", "path3", "path4", "path5" # 先清理已存在的目标文件,避免残留旧数据 if(Test-Path "filename.csv"){ Remove-Item "filename.csv" } foreach($element in $paths){ # 第一次写入时直接创建文件,后续循环追加内容 if(-not (Test-Path "filename.csv")){ Get-AzDataLakeGen2ChildItem -Context $Context -FileSystem "root" -Path $element | Export-Csv "filename.csv" -NoTypeInformation } else{ Get-AzDataLakeGen2ChildItem -Context $Context -FileSystem "root" -Path $element | Export-Csv "filename.csv" -NoTypeInformation -Append } }
方法说明
- 方法一适合数据量不大的场景,逻辑简单,执行效率更高;
- 方法二适合超大规模数据导出,避免一次性加载所有数据占用过多内存。
内容的提问来源于stack exchange,提问作者Swarnava Sen
相关产品推荐
相关产品推荐

