使用 Azure 数据工厂(无 MapReduce)将存档导入和解压缩到 Blob 存储

Use Azure Data Factory (without MapReduce) to import and unzip archives to a Blob Storage

我必须将各种 zip 文件从 ftp 服务器导入某些 Azure SQL 表。每个 zip 文件最多包含 10 个具有不同结构的文本 (csv) 文件,即第一个文本文件中的行的格式为

“1|星期一|2017-03-20|345671”

而第二个文本文件中的行的形式是

"abc|345894|xyz||2|yyy|true|3".

我不想使用 MapReduce(或自定义活动),因为它既昂贵又缓慢(Microsoft Azure 支持建议使用 HDInsight(按需)MapReduce activity 先解压缩文件)。

定义必要的链接服务,对我来说是 FTP 链接服务,然后使用 FileShare 类型的数据集从源(FTP 服务器)获取文件。在此数据集中,断言文件已压缩:

{
    "name": "myFTPFileInput",
    "properties": {
    "published": false,
    "type": "FileShare",
    "linkedServiceName": "myFTPLinkedService",
    "typeProperties": {
        "fileName": "xyz20170316.zip",
        "useBinaryTransfer": "true",
        "folderPath": "/Products/xyzProducts",
        "compression": {
            "type": "ZipDeflate",
            "level": "Optimal"
        }
    },
    "availability": {
        "frequency": "Day",
        "interval": 15
    },
    "external": true,
    "policy": {}
    }
}

使用 Blobsink 将文件写入 blob 存储:

{
    "name": "myAzureBlobOutput",
    "properties": {
    "published": false,
    "type": "AzureBlob",
    "linkedServiceName": "myAzureStorageLinkedService",
    "typeProperties": {
        "folderPath": "mytest/ftp/xyz/{Year}/{Month}",
        "format": {
            "type": "TextFormat",
            "rowDelimiter": "\n",
            "columnDelimiter": "|"
        },
        "partitionedBy": [
            {
                "name": "Year",
                "value": {
                    "type": "DateTime",
                    "date": "SliceStart",
                    "format": "yyyy"
                }
            },
            {
                "name": "Month",
                "value": {
                    "type": "DateTime",
                    "date": "SliceStart",
                    "format": "MM"
                }
            }
        ]
    },
    "availability": {
        "frequency": "Day",
        "interval": 15
    }
  }
}

数据将被解压缩并以文本形式写入指定文件夹。从那里我可以使用标准的 ADF Copy Activity 将每个文件导入相应的 Azure SQL table.

希望对您有所帮助