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 指定是否要將第一個資料列視為標頭。 針對輸入資料集,服務會將第一個資料列讀取為標頭。 針對輸出資料集,服務會將第一個資料列寫入為標頭。

請參閱 使用 firstRowAsHeaderskipLineCount 範例案例的案例。
True
False (預設值)
No
skipLineCount 指出從輸入檔案讀取資料時要略過的非空白 資料列數目 。 如果同時指定 skipLineCount 和 firstRowAsHeader,則會先略過行,然後從輸入檔讀取標頭資訊。

請參閱 使用 firstRowAsHeaderskipLineCount 範例案例的案例。
整數 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].propertyxth 物件擷取指定屬性的值,或是用來 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 路徑,指出要從何處擷取資料。 在此範例中, ordernumberorderdatecity 位於以 開頭 $. 為 的 JSON 路徑的根物件下,而 order_pdorder_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 格式寫入資料,請將 屬性設定 formattype 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 的最小/最大堆積大小,以賦予這類複製能力,然後重新執行管線。

Set JVM heap size on Self-hosted IR

範例:將變數 _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 格式寫入資料,請將 屬性設定 formattype 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 格式寫入資料,請將 屬性設定 formattype AvroFormat 。 您不需要在 typeProperties 區段中的 Format 區段中指定任何屬性。 範例:

"format":
{
    "type": "AvroFormat",
}

若要在 Hive 資料表中使用 Avro 格式,請參閱 Apache Hive 的教學課程

請注意下列幾點:

壓縮支援 (舊版)

服務支援在複製期間壓縮/解壓縮資料。 當您在輸入資料集中指定 compression 屬性時,複製活動會從來源讀取壓縮的資料並解壓縮;當您在輸出資料集中指定 屬性時,複製活動壓縮會接著將資料寫入接收。 以下是一些範例案例:

  • 從 Azure Blob 讀取 GZIP 壓縮的資料、解壓縮資料,並將結果資料寫入 Azure SQL 資料庫。 您可以使用 屬性定義為 GZIP 來 compressiontype 定義輸入 Azure Blob 資料集。
  • 從內部部署檔案系統讀取純文字檔案中的資料、使用 GZip 格式壓縮資料,並將壓縮的資料寫入 Azure Blob。 您可以使用 屬性定義為 GZip 來 compressiontype 定義輸出 Azure Blob 資料集。
  • 從 FTP 伺服器讀取 .zip 檔案、解壓縮它以取得檔案,並將這些檔案登陸在 Azure Data Lake Store 中。 您可以使用 屬性定義為 ZipDeflate 來 compressiontype 定義輸入 FTP 資料集。
  • 從 Azure Blob 讀取 GZIP 壓縮的資料、解壓縮、使用 BZIP2 壓縮資料,以及將結果資料寫入 Azure Blob。 您可以定義輸入 Azure Blob 資料集,並將 compressiontype 設定為 GZIP,以及設定為 BZIP2 的 compressiontype 輸出資料集。

若要指定資料集的壓縮,請使用 資料集 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 活動來建置此功能。 這裡提供 進一步資訊

瞭解支援檔案格式和壓縮的最新支援的檔案格式和壓縮