使用Azure Data Factory(不使用MapReduce)将存档导入和解压缩到Blob存储

时间:2017-03-27 14:01:34

标签: ftp zip compression azure-data-factory azure-blob-storage

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

" 1 |星期一| 2017年3月20日| 345671"

而第二个文本文件中的行的格式为,例如

" ABC | 345894 | XYZ || 2 | YYY |真| 3"

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

1 个答案:

答案 0 :(得分:1)

为我定义必要的链接服务,为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复制活动将每个文件导入相应的Azure SQL表。

希望这有帮助