在Azure datalake中附加csv文件

时间:2018-02-22 14:35:18

标签: powershell azure csv azure-powershell azure-data-lake

我在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脚本运行这个合并活动。

是否有人知道这个问题的任何有效且不同的解决方案,以保持原始文件的完整性?

1 个答案:

答案 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}保存为列,以便您合并数据时,不必丢失该信息。并且您的原始文件将保持不变。如果您有其他问题,请告诉我们!