Azure Data Factory 和 Synapse Analytics 中支援的檔案格式和壓縮編解碼器(舊版)
適用于: Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用于企業的單一分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告等所有專案。 瞭解如何 免費啟動新的試用版 !
本文適用于下列連接器: Amazon S3 、Azure Blob 、 Azure Data Lake 儲存體 Gen1 、Azure Data Lake 儲存體 Gen2 、 Azure 檔案儲存體 、檔案系統 、 FTP 、Google Cloud 儲存體 、 HDFS 、 HTTP 和 SFTP 。
重要
服務引進了新的格式型資料集模型,請參閱具有詳細資料的對應格式文章:
- Avro 格式
- 二進位格式
- 分隔文字格式
- JSON 格式
- ORC 格式
- Parquet 格式
本文中所述的其餘組態仍受支援,因為回溯相容性。 建議您未來使用新的模型。
文字格式 (舊版)
注意
瞭解分隔 文字格式 文章中的新模型。 檔案型資料存放區資料集上的下列組態仍受支援,因為回溯相容性。 建議您未來使用新的模型。
如果您想要從文字檔讀取或寫入文字檔,請將資料集區段中的 屬性 format
設定 type
為 TextFormat 。 您也可以在 format
區段中指定下列 選擇性 屬性。 如需如何設定,請參閱 TextFormat 範例 一節。
屬性 | 說明 | 允許的值 | 必要 |
---|---|---|---|
columnDelimiter | 用來分隔檔案中資料行的字元。 您可以考慮使用可能不存在於資料中的罕見不可列印字元。 例如,指定 「\u0001」,代表標題的開頭 (SOH)。 | 只允許一個字元。 預設值 為 逗號 (',') 。 若要使用 Unicode 字元,請參閱 Unicode 字元 以取得對應的程式碼。 |
No |
rowDelimiter | 用來分隔檔案中資料列的字元。 | 只允許一個字元。 預設值 是讀取時下列任何一個值: [「\r\n」、「\r」、「\n」] 和 寫入上的 「\r\n」。 | No |
escapeChar | 用來逸出輸入檔內容中資料行分隔符號的特殊字元。 您無法為資料表同時指定 escapeChar 和 quoteChar。 |
只允許一個字元。 無預設值。 範例:如果您有逗號 (',',') 作為資料行分隔符號,但您想要在文字中有逗號字元(例如:「Hello,world」),您可以將 '$' 定義為逸出字元,並在來源中使用字串 「Hello$, world」。 |
No |
quoteChar | 用來為字串值加上引號的字元。 系統會將引號字元內資料行和資料列分隔符號視為字串值的一部分。 這個屬性同時適用於輸入和輸出資料集。 您無法為資料表同時指定 escapeChar 和 quoteChar。 |
只允許一個字元。 無預設值。 例如,如果您有逗號 (','') 作為資料行分隔符號,但您想要在文字中有逗號字元(例如: < Hello,world > ),則可以將 「(double quote) 定義為引號字元,並在來源中使用字串 」Hello, world」。 |
No |
nullValue | 用來表示 Null 值的一或多個字元。 | 一或多個字元。 讀取 時預設值 為 「\N」 和 「Null」 ,寫入 時為 「\N」。 | No |
encodingName | 指定編碼名稱。 | 有效的編碼名稱。 請參閱 Encoding.EncodingName 屬性 。 範例:windows-1250 或 shift_jis。 預設值 為 UTF-8 。 | No |
firstRowAsHeader | 指定是否要將第一個資料列視為標頭。 針對輸入資料集,服務會將第一個資料列讀取為標頭。 針對輸出資料集,服務會將第一個資料列寫入為標頭。 請參閱 使用 firstRowAsHeader 和 skipLineCount 範例案例的案例。 |
True False (預設值) |
No |
skipLineCount | 指出從輸入檔案讀取資料時要略過的非空白 資料列數目 。 如果同時指定 skipLineCount 和 firstRowAsHeader,則會先略過行,然後從輸入檔讀取標頭資訊。 請參閱 使用 firstRowAsHeader 和 skipLineCount 範例案例的案例。 |
整數 | No |
treatEmptyAsNull | 指定從輸入檔讀取資料時,是否要將 Null 或空字串視為 Null 值。 | True (預設值) False |
No |
TextFormat 範例
在資料集的下列 JSON 定義中,會指定一些選擇性屬性。
"typeProperties":
{
"folderPath": "mycontainer/myfolder",
"fileName": "myblobname",
"format":
{
"type": "TextFormat",
"columnDelimiter": ",",
"rowDelimiter": ";",
"quoteChar": "\"",
"NullValue": "NaN",
"firstRowAsHeader": true,
"skipLineCount": 0,
"treatEmptyAsNull": true
}
},
若要使用 escapeChar
而非 quoteChar
,請將 行 quoteChar
取代為下列 escapeChar:
"escapeChar": "$",
使用 firstRowAsHeader 和 skipLineCount 的案例
- 您正從非檔案來源複製到文字檔,並想要新增包含架構中繼資料的標頭行(例如:SQL 架構)。 在此案例的輸出資料集中指定
firstRowAsHeader
為 true。 - 您正從包含頭行的文本檔案複製到非檔案接收,並想要卸載該行。 在輸入資料集中指定
firstRowAsHeader
為 true。 - 您正從文本檔案複製,而且想要略過開頭不含任何資料或標頭資訊的幾行。 指定要
skipLineCount
略過的行數。 如果檔案的其餘部分包含標頭行,您也可以指定firstRowAsHeader
。 如果同時skipLineCount
指定 和firstRowAsHeader
,則會先略過行,然後從輸入檔讀取標頭資訊
JSON 格式 (舊版)
注意
瞭解 JSON 格式 的新模型一文。 檔案型資料存放區資料集上的下列組態仍受支援,因為回溯相容性。 建議您未來使用新的模型。
若要 依目前方式匯入/匯出 JSON 檔案至 Azure Cosmos DB ,請參閱將資料移至 Azure Cosmos DB 一文中的 匯入/匯出 JSON 檔一節。
如果您想要剖析 JSON 檔案或以 JSON 格式寫入資料,請將 區段中的 format
屬性設定 type
為 JsonFormat 。 您也可以在 format
區段中指定下列 選擇性 屬性。 如需如何設定,請參閱 JsonFormat 範例 一節。
屬性 | 描述 | 必要 |
---|---|---|
filePattern | 指出儲存在每個 JSON 檔案中的資料模式。 允許的值為: setOfObjects 和 arrayOfObjects 。 預設值 為 setOfObjects 。 如需這些模式的詳細資訊, 請參閱 JSON 檔案模式一節。 | No |
jsonNodeReference | 如果您想要以相同模式從陣列欄位中的物件反覆運算和擷取資料,請指定該陣列的 JSON 路徑。 只有在從 JSON 檔案複製資料 時,才支援此屬性。 | No |
jsonPathDefinition | 使用自訂資料行名稱指定每個資料行對應的 JSON 路徑運算式(以小寫開頭)。 只有當從 JSON 檔案複製資料,而且您可以從物件或陣列擷取資料 時,才支援此屬性。 若為根物件下的欄位,請從根 $開始;針對由 jsonNodeReference 屬性選擇之陣列內的欄位,請從陣列元素開始。 如需如何設定,請參閱 JsonFormat 範例 一節。 |
No |
encodingName | 指定編碼名稱。 如需有效編碼名稱的清單,請參閱: Encoding.EncodingName 屬性。 例如:windows-1250 或 shift_jis。 預設值 為: UTF-8 。 | No |
nestingSeparator | 用來分隔巢狀層級的字元。 預設值為 '.'(點)。 | No |
注意
針對陣列中交叉套用資料到多個資料列的情況(案例 1 - > JsonFormat 範例 中的 範例 2),您只能選擇使用 屬性 jsonNodeReference
展開單一陣列。
JSON 檔案模式
複製活動可以剖析下列 JSON 檔案模式:
類型 I:setOfObjects
每個檔案都包含單一物件,或以行分隔/串連多個物件。 在輸出資料集中選擇此選項時,複製活動會產生單一 JSON 檔案,每個行每個物件各有一個 JSON 檔案(以行分隔)。
單一物件 JSON 範例
{ "time": "2015-04-29T07:12:20.9100000Z", "callingimsi": "466920403025604", "callingnum1": "678948008", "callingnum2": "567834760", "switch1": "China", "switch2": "Germany" }
以行分隔的 JSON 範例
{"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"} {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"} {"time":"2015-04-29T07:13:21.4370000Z","callingimsi":"466923101048691","callingnum1":"678901578","callingnum2":"345626404","switch1":"Germany","switch2":"UK"}
串連 JSON 範例
{ "time": "2015-04-29T07:12:20.9100000Z", "callingimsi": "466920403025604", "callingnum1": "678948008", "callingnum2": "567834760", "switch1": "China", "switch2": "Germany" } { "time": "2015-04-29T07:13:21.0220000Z", "callingimsi": "466922202613463", "callingnum1": "123436380", "callingnum2": "789037573", "switch1": "US", "switch2": "UK" } { "time": "2015-04-29T07:13:21.4370000Z", "callingimsi": "466923101048691", "callingnum1": "678901578", "callingnum2": "345626404", "switch1": "Germany", "switch2": "UK" }
類型 II:arrayOfObjects
每個檔案都包含 物件的陣列。
[ { "time": "2015-04-29T07:12:20.9100000Z", "callingimsi": "466920403025604", "callingnum1": "678948008", "callingnum2": "567834760", "switch1": "China", "switch2": "Germany" }, { "time": "2015-04-29T07:13:21.0220000Z", "callingimsi": "466922202613463", "callingnum1": "123436380", "callingnum2": "789037573", "switch1": "US", "switch2": "UK" }, { "time": "2015-04-29T07:13:21.4370000Z", "callingimsi": "466923101048691", "callingnum1": "678901578", "callingnum2": "345626404", "switch1": "Germany", "switch2": "UK" } ]
JsonFormat 範例
案例 1:從 JSON 檔案複製資料
範例 1:從物件和陣列擷取資料
在此範例中,您會預期一個根 JSON 物件對應至表格式結果中的單一記錄。 如果您有包含下列內容的 JSON 檔案:
{
"id": "ed0e4960-d9c5-11e6-85dc-d7996816aad3",
"context": {
"device": {
"type": "PC"
},
"custom": {
"dimensions": [
{
"TargetResourceType": "Microsoft.Compute/virtualMachines"
},
{
"ResourceManagementProcessRunId": "827f8aaa-ab72-437c-ba48-d8917a7336a3"
},
{
"OccurrenceTime": "1/13/2017 11:24:37 AM"
}
]
}
}
}
而且您想要從物件和陣列擷取資料,以下列格式將它複製到 Azure SQL 資料表:
識別碼 | deviceType | targetResourceType | resourceManagementProcessRunId | occurrenceTime |
---|---|---|---|---|
ed0e4960-d9c5-11e6-85dc-d7996816aad3 | 電腦 | Microsoft.Compute/virtualMachines | 827f8aaa-ab72-437c-ba48-d8917a7336a3 | 2017/1/13 上午 11:24:37 |
JsonFormat 類型的輸入資料集定義如下:(只有相關部分的部分定義)。 更明確地說:
structure
區段會在轉換成表格式資料時,定義自訂的資料行名稱和對應的資料類型。 除非您需要進行資料行對應,否則此區段是 選擇性 的。 如需詳細資訊,請參閱 將源資料集資料行對應至目的地資料集資料行 。jsonPathDefinition
指定每個資料行的 JSON 路徑,指出要從何處擷取資料。 若要從陣列複製資料,您可以使用array[x].property
從xth
物件擷取指定屬性的值,或是用來array[*].property
從包含這類屬性的任何物件尋找值。
"properties": {
"structure": [
{
"name": "id",
"type": "String"
},
{
"name": "deviceType",
"type": "String"
},
{
"name": "targetResourceType",
"type": "String"
},
{
"name": "resourceManagementProcessRunId",
"type": "String"
},
{
"name": "occurrenceTime",
"type": "DateTime"
}
],
"typeProperties": {
"folderPath": "mycontainer/myfolder",
"format": {
"type": "JsonFormat",
"filePattern": "setOfObjects",
"jsonPathDefinition": {"id": "$.id", "deviceType": "$.context.device.type", "targetResourceType": "$.context.custom.dimensions[0].TargetResourceType", "resourceManagementProcessRunId": "$.context.custom.dimensions[1].ResourceManagementProcessRunId", "occurrenceTime": " $.context.custom.dimensions[2].OccurrenceTime"}
}
}
}
範例 2:交叉套用陣列中具有相同模式的多個物件
在此範例中,您預期會將一個根 JSON 物件轉換成表格式結果中的多個記錄。 如果您有包含下列內容的 JSON 檔案:
{
"ordernumber": "01",
"orderdate": "20170122",
"orderlines": [
{
"prod": "p1",
"price": 23
},
{
"prod": "p2",
"price": 13
},
{
"prod": "p3",
"price": 231
}
],
"city": [ { "sanmateo": "No 1" } ]
}
而且您想要以下列格式將它複製到 Azure SQL 資料表,方法是將陣列內的資料扁平化,並使用通用根資訊交叉聯結:
ordernumber |
orderdate |
order_pd |
order_price |
city |
---|---|---|---|---|
01 | 20170122 | P1 | 23 | [{"sanmateo":"No 1"}] |
01 | 20170122 | P2 | 13 | [{"sanmateo":"No 1"}] |
01 | 20170122 | P3 | 231 | [{"sanmateo":"No 1"}] |
JsonFormat 類型的輸入資料集定義如下:(只有相關部分的部分定義)。 更明確地說:
structure
區段會在轉換成表格式資料時,定義自訂的資料行名稱和對應的資料類型。 除非您需要進行資料行對應,否則此區段是 選擇性 的。 如需詳細資訊,請參閱 將源資料集資料行對應至目的地資料集資料行 。jsonNodeReference
表示在陣列orderlines
下 以相同模式從物件中反覆運算和擷取資料。jsonPathDefinition
指定每個資料行的 JSON 路徑,指出要從何處擷取資料。 在此範例中,ordernumber
、orderdate
和city
位於以 開頭$.
為 的 JSON 路徑的根物件下,而order_pd
和order_price
則以不含 的陣列專案$.
衍生的路徑定義。
"properties": {
"structure": [
{
"name": "ordernumber",
"type": "String"
},
{
"name": "orderdate",
"type": "String"
},
{
"name": "order_pd",
"type": "String"
},
{
"name": "order_price",
"type": "Int64"
},
{
"name": "city",
"type": "String"
}
],
"typeProperties": {
"folderPath": "mycontainer/myfolder",
"format": {
"type": "JsonFormat",
"filePattern": "setOfObjects",
"jsonNodeReference": "$.orderlines",
"jsonPathDefinition": {"ordernumber": "$.ordernumber", "orderdate": "$.orderdate", "order_pd": "prod", "order_price": "price", "city": " $.city"}
}
}
}
請注意下列幾點:
structure
如果未在資料集中定義 和jsonPathDefinition
,複製活動會從第一個物件偵測架構,並將整個物件扁平化。- 如果 JSON 輸入有陣列,則複製活動預設會將整個陣列值轉換成字串。 您可以選擇使用
jsonNodeReference
和/或jsonPathDefinition
從中擷取資料,或不要在 中jsonPathDefinition
指定資料來略過資料。 - 如果相同層級有重複的名稱,複製活動會挑選最後一個名稱。
- 屬性名稱會區分大小寫。 兩個具有相同名稱但不同大小寫的屬性會被視為兩個不同的屬性。
案例 2:將資料寫入 JSON 檔案
如果您在 SQL 資料庫中有下表:
識別碼 | order_date | order_price | order_by |
---|---|---|---|
1 | 20170119 | 2000 | David |
2 | 20170120 | 3500 | 派翠克 |
3 | 20170121 | 4000 | 傑森 |
針對每個記錄,您預期會以下列格式寫入 JSON 物件:
{
"id": "1",
"order": {
"date": "20170119",
"price": 2000,
"customer": "David"
}
}
JsonFormat 類型的輸出資料集定義如下:(只有相關部分的部分定義)。 更具體來說, structure
區段會定義目的地檔案中的自訂屬性名稱( nestingSeparator
預設值為 「.」),用來識別名稱中的巢狀層。 除非您想要變更與來源資料行名稱比較的屬性名稱,或巢狀某些屬性,否則這個區段是 選擇性 的。
"properties": {
"structure": [
{
"name": "id",
"type": "String"
},
{
"name": "order.date",
"type": "String"
},
{
"name": "order.price",
"type": "Int64"
},
{
"name": "order.customer",
"type": "String"
}
],
"typeProperties": {
"folderPath": "mycontainer/myfolder",
"format": {
"type": "JsonFormat"
}
}
}
Parquet 格式 (舊版)
注意
瞭解 Parquet 格式 的新模型一文。 檔案型資料存放區資料集上的下列組態仍受支援,因為回溯相容性。 建議您未來使用新的模型。
如果您想要剖析 Parquet 檔案或以 Parquet 格式寫入資料,請將 屬性設定 format
type
為 ParquetFormat 。 您不需要在 typeProperties 區段中的 Format 區段中指定任何屬性。 範例:
"format":
{
"type": "ParquetFormat"
}
請注意下列幾點:
- 不支援複雜資料類型(MAP、LIST)。
- 不支援資料行名稱中的空白字元。
- Parquet 檔案具有下列壓縮相關選項:NONE、SNAPPY、GZIP 和 LZO。 此服務支援從 Parquet 檔案讀取任何壓縮格式的資料,但 LZO 除外 - 它會使用中繼資料中的壓縮編解碼器來讀取資料。 不過,寫入 Parquet 檔案時,服務會選擇 SNAPPY,這是 Parquet 格式的預設值。 目前沒有選項可覆寫此行為。
重要
針對自我裝載整合執行時間所賦予的複製功能,例如在內部部署與雲端資料存放區之間,如果您不是依預設 複製 Parquet 檔案 ,則必須 在 IR 電腦上安裝 64 位 JRE 8 (JAVA Runtime Environment) 或 OpenJDK 。 如需詳細資料,請參閱下列段落。
針對使用 Parquet 檔案序列化/還原序列化在自我裝載 IR 上執行的複製,服務會先檢查 (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome)
登錄的 JRE,如果找不到,則會尋找 JAVA 執行時間,然後檢查 OpenJDK 的系統變數 JAVA_HOME
。
- 若要使用 JRE :64 位 IR 需要 64 位 JRE。 您可以從這裡 找到它。
- 若要使用 OpenJDK :自 IR 3.13 版以來,支援它。 將 jvm.dll 與 OpenJDK 所有其他必要元件封裝成自我裝載 IR 電腦,並據以設定系統內容變數JAVA_HOME。
提示
如果您使用自我裝載整合執行時間將資料複製到 Parquet 格式,並遇到錯誤,指出「叫用 java 時發生錯誤,訊息: java.lang.OutOfMemoryError:JAVA 堆積空間 」,您可以在裝載自我裝載 IR 的機器中新增環境變數 _JAVA_OPTIONS
,以調整 JVM 的最小/最大堆積大小,以賦予這類複製能力,然後重新執行管線。
範例:將變數 _JAVA_OPTIONS
的值設定為 -Xms256m -Xmx16g
。 旗標 Xms
會指定 JAVA 虛擬機器 (JVM) 的初始記憶體組態集區,同時 Xmx
指定記憶體組態集區上限。 這表示 JVM 啟動時有 Xms
數量的記憶體,且最多可以使用 Xmx
數量的記憶體。 根據預設,服務會使用最小 64MB 和最大 1G。
Parquet 檔案的資料類型對應
過渡期服務資料類型 | Parquet 基本類型 | Parquet 原始類型 (還原序列化) | Parquet 原始類型 (序列化) |
---|---|---|---|
Boolean | Boolean | N/A | N/A |
SByte | Int32 | Int8 | Int8 |
Byte | Int32 | UInt8 | Int16 |
Int16 | Int32 | Int16 | Int16 |
UInt16 | Int32 | UInt16 | Int32 |
Int32 | Int32 | Int32 | Int32 |
UInt32 | Int64 | UInt32 | Int64 |
Int64 | Int64 | Int64 | Int64 |
UInt64 | Int64/Binary | UInt64 | Decimal |
Single | Float | N/A | N/A |
Double | 雙重 | N/A | N/A |
Decimal | 二進位 | Decimal | Decimal |
String | 二進位 | Utf8 | Utf8 |
Datetime | Int96 | N/A | N/A |
TimeSpan | Int96 | N/A | N/A |
DateTimeOffset | Int96 | N/A | N/A |
ByteArray | 二進位 | N/A | N/A |
GUID | 二進位 | Utf8 | Utf8 |
Char | 二進位 | Utf8 | Utf8 |
CharArray | 不支援 | N/A | N/A |
ORC 格式 (舊版)
注意
從 ORC 格式 文章瞭解新的模型。 檔案型資料存放區資料集上的下列組態仍受支援,因為回溯相容性。 建議您未來使用新的模型。
如果您想要剖析 ORC 檔案或以 ORC 格式寫入資料,請將 屬性設定 format
type
為 OrcFormat 。 您不需要在 typeProperties 區段中的 Format 區段中指定任何屬性。 範例:
"format":
{
"type": "OrcFormat"
}
請注意下列幾點:
- 不支援複雜資料類型(STRUCT、MAP、LIST、UNION)。
- 不支援資料行名稱中的空白字元。
- ORC 檔案有三 個壓縮相關選項 :NONE、ZLIB、SNAPPY。 此服務支援以任何這些壓縮格式從 ORC 檔案讀取資料。 它會使用壓縮編解碼器在中繼資料中讀取資料。 不過,寫入 ORC 檔案時,服務會選擇 ZLIB,這是 ORC 的預設值。 目前沒有選項可覆寫此行為。
重要
針對自我裝載整合執行時間所賦予的複製功能,例如在內部部署與雲端資料存放區之間,如果您不是依預設 複製 ORC 檔案 ,則必須 在 IR 電腦上安裝 64 位 JRE 8 (JAVA Runtime Environment) 或 OpenJDK 。 如需詳細資料,請參閱下列段落。
針對使用 ORC 檔案序列化/還原序列化在自我裝載 IR 上執行的複製,服務會先檢查 (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome)
登錄的 JRE,如果找不到,則會尋找 JAVA 執行時間,第二次檢查 OpenJDK 的系統變數 JAVA_HOME
。
- 若要使用 JRE :64 位 IR 需要 64 位 JRE。 您可以從這裡 找到它。
- 若要使用 OpenJDK :自 IR 3.13 版以來,支援它。 將 jvm.dll 與 OpenJDK 所有其他必要元件封裝成自我裝載 IR 電腦,並據以設定系統內容變數JAVA_HOME。
ORC 檔案的資料類型對應
過渡期服務資料類型 | ORC 類型 |
---|---|
Boolean | Boolean |
SByte | Byte |
Byte | Short |
Int16 | Short |
UInt16 | int |
Int32 | int |
UInt32 | Long |
Int64 | Long |
UInt64 | String |
Single | Float |
Double | 雙重 |
Decimal | Decimal |
String | String |
Datetime | 時間戳記 |
DateTimeOffset | 時間戳記 |
TimeSpan | 時間戳記 |
ByteArray | 二進位 |
GUID | String |
Char | Char(1) |
AVRO 格式 (舊版)
注意
瞭解 Avro 格式 的新模型一文。 檔案型資料存放區資料集上的下列組態仍受支援,因為回溯相容性。 建議您未來使用新的模型。
如果您想要剖析 Avro 檔案或以 Avro 格式寫入資料,請將 屬性設定 format
type
為 AvroFormat 。 您不需要在 typeProperties 區段中的 Format 區段中指定任何屬性。 範例:
"format":
{
"type": "AvroFormat",
}
若要在 Hive 資料表中使用 Avro 格式,請參閱 Apache Hive 的教學課程 。
請注意下列幾點:
- 不支援複雜資料類型 (記錄、列舉、陣列、地圖、等位和固定)。
壓縮支援 (舊版)
服務支援在複製期間壓縮/解壓縮資料。 當您在輸入資料集中指定 compression
屬性時,複製活動會從來源讀取壓縮的資料並解壓縮;當您在輸出資料集中指定 屬性時,複製活動壓縮會接著將資料寫入接收。 以下是一些範例案例:
- 從 Azure Blob 讀取 GZIP 壓縮的資料、解壓縮資料,並將結果資料寫入 Azure SQL 資料庫。 您可以使用 屬性定義為 GZIP 來
compression
type
定義輸入 Azure Blob 資料集。 - 從內部部署檔案系統讀取純文字檔案中的資料、使用 GZip 格式壓縮資料,並將壓縮的資料寫入 Azure Blob。 您可以使用 屬性定義為 GZip 來
compression
type
定義輸出 Azure Blob 資料集。 - 從 FTP 伺服器讀取 .zip 檔案、解壓縮它以取得檔案,並將這些檔案登陸在 Azure Data Lake Store 中。 您可以使用 屬性定義為 ZipDeflate 來
compression
type
定義輸入 FTP 資料集。 - 從 Azure Blob 讀取 GZIP 壓縮的資料、解壓縮、使用 BZIP2 壓縮資料,以及將結果資料寫入 Azure Blob。 您可以定義輸入 Azure Blob 資料集,並將
compression
type
設定為 GZIP,以及設定為 BZIP2 的compression
type
輸出資料集。
若要指定資料集的壓縮,請使用 資料集 JSON 中的 compression 屬性,如下列範例所示:
{
"name": "AzureBlobDataSet",
"properties": {
"type": "AzureBlob",
"linkedServiceName": {
"referenceName": "StorageLinkedService",
"type": "LinkedServiceReference"
},
"typeProperties": {
"fileName": "pagecounts.csv.gz",
"folderPath": "compression/file/",
"format": {
"type": "TextFormat"
},
"compression": {
"type": "GZip",
"level": "Optimal"
}
}
}
}
壓縮 區段有兩個屬性:
類型: 壓縮編解碼器,可以是 GZIP 、Deflate 、 BZIP2 或 ZipDeflate 。 請注意,使用複製活動來解壓縮 ZipDeflate 檔案並寫入檔案型接收資料存放區時,檔案將會解壓縮到資料夾:
<path specified in dataset>/<folder named as source zip file>/
。層級: 壓縮比例,可以是 最佳 或 最快 。
最快: 即使產生的檔案未以最佳方式壓縮,壓縮作業也應該儘快完成。
最佳 :即使作業需要較長的時間才能完成,壓縮作業也應該以最佳方式壓縮。
如需詳細資訊,請參閱 壓縮層級 主題。
注意
AvroFormat、 OrcFormat 或 ParquetFormat 中的資料 不支援壓縮設定。 讀取這些格式的檔案時,服務會偵測並使用中繼資料中的壓縮編解碼器。 寫入這些格式的檔案時,服務會針對該格式選擇預設壓縮編解碼器。 例如,適用于 OrcFormat 的 ZLIB 和 ParquetFormat 的 SNAPPY。
不支援的檔案類型和壓縮格式
您可以使用擴充性功能來轉換不支援的檔案。 兩個選項包括使用 Azure Batch 的 Azure Functions 和自訂工作。
您可以看到使用 Azure 函式來 擷取 tar 檔案 內容的範例。 如需詳細資訊,請參閱 Azure Functions 活動 。
您也可以使用自訂 dotnet 活動來建置此功能。 這裡提供 進一步資訊