我在azure datalake商店中有几个50GB + csv文件保存在分区文件夹下,如 -
source/table/partition1/file1.csv
source/table/partition2/file2.csv
...
source/table/partitionN/fileN.csv
文件具有相同的结构。我想使用Azure Powershell命令将所有这些文件合并/附加在一起,并在新位置生成一个大文件,而不会损坏原始文件。
我尝试了以下命令 -
Join-AzureRmDataLakeStoreItem -AccountName "DatalakeStoreName"
-Paths "source/table/partition1/file1.csv",
"source/table/partition2/file2.csv"
-Destination "/Merged/table/final.csv"
但是这会破坏原始文件,只是创建了新的final.csv 我知道,有Azure数据工厂可用,但它需要部署多个代码对象,我正在处理7000多个这样的源,所以理想情况下我想通过一个PowerShell脚本运行这个合并活动。
是否有人知道这个问题的任何有效且不同的解决方案,以保持原始文件的完整性?
答案 0 :(得分:2)
您可以使用Powershell中定义的U-SQL脚本执行此操作。只需确保您还拥有Azure Data Lake Analytics帐户。一行示例PowerShell脚本,其中包含U-SQL脚本:
#You can also save the script locally on a file and use -ScriptPath instead of -Script
$usqlScript = @"
@extract =
SELECT
column1 string,
column2 int,
#... list all columns and data types
columnN string,
partition string,
fileNumber int
FROM source/table/{partition}/file{fileNumber}.csv
OUTPUT @extract
TO "combinedFiles.csv"
USING Outputters.Csv();
"@
$adla = "DataLakeAnalyticsAccountName"
Submit-AzureRmDataLakeAnalyticsJob -AccountName $adla -Script $usqlScript -Name "JobName"
文件集源/ table / {partition} / file {fileNumber} .csv将提取路径与该模式匹配的每个文件,并将通配符{partition}和{fileNumber}保存为列,以便您合并数据时,不必丢失该信息。并且您的原始文件将保持不变。如果您有其他问题,请告诉我们!