使用 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.
希望对您有所帮助
我必须将各种 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.
希望对您有所帮助