首页 > 解决方案 > Azure 数据工厂将复制管道中的文件从 S3 存储桶截断到 ADLS

问题描述

我设置了一个复制管道,用于使用数据工厂将 S3 存储桶中的日常文件夹中的少量文件复制到 Azure 中的数据湖中。我遇到了这个非常奇怪的问题。

假设 S3 存储桶中有三个文件。一个是 30MB,另一个是 50MB,最后一个是 70MB。如果我将 30M 文件“放在首位”(将其命名为 test0.tsv),则它声称已成功将所有三个文件复制到 ADLS。但是,第二个和第三个文件被截断为 30M。每个文件的数据都是正确的,但是被截断了。如果我先放70M的文件,那么它们都被正确复制了。因此,它使用第一个文件长度作为最大文件大小并截断所有后续较长的文件。这对我来说也非常令人担忧,因为 Azure 数据工厂声称它成功复制了它们。

这是我的管道:

{
"name": "[redacted]Pipeline",
"properties": {
    "description": "[redacted]",
    "activities": [
        {
            "type": "Copy",
            "typeProperties": {
                "source": {
                    "type": "FileSystemSource",
                    "recursive": true
                },
                "sink": {
                    "type": "AzureDataLakeStoreSink",
                    "copyBehavior": "PreserveHierarchy",
                    "writeBatchSize": 0,
                    "writeBatchTimeout": "00:00:00"
                }
            },
            "inputs": [
                {
                    "name": "InputDataset"
                }
            ],
            "outputs": [
                {
                    "name": "OutputDataset"
                }
            ],
            "policy": {
                "retry": 3
            },
            "scheduler": {
                "frequency": "Day",
                "interval": 1
            },
            "name": "[redacted]"
        }
    ],
    "start": "2018-07-06T04:00:00Z",
    "end": "2018-07-30T04:00:00Z",
    "isPaused": false,
    "hubName": "[redacted]",
    "pipelineMode": "Scheduled"
}

}

这是我的输入数据集:

{
"name": "InputDataset",
"properties": {
    "published": false,
    "type": "AmazonS3",
    "linkedServiceName": "[redacted]",
    "typeProperties": {
        "bucketName": "[redacted",
        "key": "$$Text.Format('{0:yyyy}/{0:MM}/{0:dd}/', SliceStart)"
    },
    "availability": {
        "frequency": "Day",
        "interval": 1
    },
    "external": true,
    "policy": {}
}

}

这是我的输出数据集:

{
"name": "OutputDataset",
"properties": {
    "published": false,
    "type": "AzureDataLakeStore",
    "linkedServiceName": "[redacted]",
    "typeProperties": {
        "folderPath": "[redacted]/{Year}/{Month}/{Day}",
        "partitionedBy": [
            {
                "name": "Year",
                "value": {
                    "type": "DateTime",
                    "date": "SliceStart",
                    "format": "yyyy"
                }
            },
            {
                "name": "Month",
                "value": {
                    "type": "DateTime",
                    "date": "SliceStart",
                    "format": "MM"
                }
            },
            {
                "name": "Day",
                "value": {
                    "type": "DateTime",
                    "date": "SliceStart",
                    "format": "dd"
                }
            }
        ]
    },
    "availability": {
        "frequency": "Day",
        "interval": 1
    }
}

}

我已经删除了输入和输出数据集中的格式字段,因为我认为将其作为二进制副本可能会修复它,但这不起作用。

标签: azureamazon-s3azure-data-factoryazure-data-lakeamazon-data-pipeline

解决方案


推荐阅读