在 Azure datalake 中附加 csv 文件

Appending csv files in Azure datalake

我在 azure datalake 存储中有几个 50GB 以上的 csv 文件保存在分区文件夹下,例如 -

source/table/partition1/file1.csv
source/table/partition2/file2.csv
...
source/table/partitionN/fileN.csv 

文件具有相同 structure.I 想要 merge/append 使用 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 多个这样的提要,所以理想情况下,我想 运行 此合并 activity 通过一个 powershell 脚本。

有谁知道解决此问题的有效且不同的解决方案,可以保持原始文件的完整性?

您可以使用在 Powershell 中定义的 U-SQL 脚本来完成此操作。只需确保你也有一个 Azure Data Lake Analytics 帐户。包含 U-SQL 脚本的示例 PowerShell 脚本:

#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"

文件集 source/table/{partition}/file{fileNumber}.csv 将提取路径与该模式匹配的每个文件,并将通配符 {partition} 和 {fileNumber} 保存为列,以便您整合数据时不必丢失该信息。并且您的原始文件将保持不变。如果您还有其他问题,请告诉我!