Azure Data Factory 中的差異格式

適用於: Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的單一分析解決方案。 Microsoft Fabric 涵蓋從數據移動到數據科學、即時分析、商業智慧和報告等所有專案。 瞭解如何 免費啟動新的試用版

本文強調如何使用差異格式將數據複製到 Azure Data Lake Store Gen2 或 Azure Blob 儲存體 儲存在 Delta Lake Store Gen2 中的 Delta Lake 或 Azure Blob 儲存體。 此連接器可作為內嵌數據集,以對應數據流作為來源和接收。

對應數據流屬性

此連接器可作為內嵌數據集,以對應數據流作為來源和接收。

來源屬性

下表列出差異來源所支持的屬性。 您可以在 [ 來源選項 ] 索引標籤編輯這些屬性。

名稱 描述 必要 允許的值 數據流腳本屬性
格式 格式必須是 delta delta format
檔案系統 Delta Lake 的容器/文件系統 String
Folder path Delta Lake 的目錄 String folderPath
壓縮類型 差異數據表的壓縮類型 bzip2
gzip
deflate
ZipDeflate
snappy
lz4
compressionType
Compression level 選擇壓縮是否要儘快完成,還是應該以最佳方式壓縮產生的檔案。 如果 compressedType 指定 ,則為必要。 OptimalFastest compressionLevel
時間移動 選擇是否要查詢差異數據表的較舊快照集 依時間戳查詢:時間戳
依版本查詢:整數
timestampAsOf
versionAsOf
允許找不到任何檔案 如果為 true,則找不到任何檔案時不會擲回錯誤 truefalse ignoreNoFilesFound

匯入結構描述

Delta 只能作為內嵌數據集使用,而且根據預設,沒有相關聯的架構。 若要取得數據行元數據,請按兩下 [投影] 索引標籤中的 [匯入架構] 按鈕。這可讓您參考主體所指定的數據行名稱和數據類型。 若要匯入架構, 數據流偵錯會話 必須是作用中,而且您必須具有要指向的現有CDM實體定義檔案。

差異來源腳本範例

source(output(movieId as integer,
            title as string,
            releaseDate as date,
            rated as boolean,
            screenedOn as timestamp,
            ticketPrice as decimal(10,2)
            ),
    store: 'local',
    format: 'delta',
    versionAsOf: 0,
    allowSchemaDrift: false,
    folderPath: $tempPath + '/delta'
  ) ~> movies

接收屬性

下表列出差異接收所支持的屬性。 您可以在 [設定] 索引標籤編輯這些屬性。

名稱 描述 必要 允許的值 數據流腳本屬性
格式 格式必須是 delta delta format
檔案系統 Delta Lake 的容器/文件系統 String
Folder path Delta Lake 的目錄 String folderPath
壓縮類型 差異數據表的壓縮類型 bzip2
gzip
deflate
ZipDeflate
snappy
lz4
TarGZip
tar
compressionType
Compression level 選擇壓縮是否要儘快完成,還是應該以最佳方式壓縮產生的檔案。 如果 compressedType 指定 ,則為必要。 OptimalFastest compressionLevel
真空 刪除與目前數據表版本不再相關的指定持續時間之前的檔案。 指定 0 或更少值時,不會執行真空作業。 整數 真空
資料表動作 告知ADF如何在接收中使用目標 Delta 資料表。 您可以依現狀保留它,並附加新的數據列、以新的元數據和數據覆寫現有的數據表定義和數據,或保留現有的數據表結構,但先截斷所有數據列,然後插入新的數據列。 無、截斷、覆寫 deltaTruncate, overwrite
更新方法 當您單獨選取 [允許插入] 或寫入新的差異數據表時,目標會接收所有傳入的數據列,而不論已設定數據列原則為何。 如果您的數據報含其他數據列原則的數據列,則必須使用先前的篩選轉換加以排除。

選取所有 Update 方法時,會執行合併,其中數據列會根據使用先前的 Alter Row 轉換所設定的數據列原則插入/刪除/upserted/updated。
truefalse insertable
deletable
upsertable
更新
優化寫入 透過優化 Spark 執行程式中的內部隨機顯示,達到寫入作業的更高輸送量。 因此,您可能會注意到大小較大的分割區和檔案較少 truefalse optimizedWrite: true
自動壓縮 在任何寫入作業完成之後,Spark 會自動執行 OPTIMIZE 命令來重新組織數據,並在必要時產生更多分割區,以提升未來讀取效能 truefalse autoCompact:true

差異接收腳本範例

相關聯的數據流腳本為:

moviesAltered sink(
          input(movieId as integer,
                title as string
            ),
           mapColumn(
                movieId,
                title
            ),
           insertable: true,
           updateable: true,
           deletable: true,
           upsertable: false,
           keys: ['movieId'],
            store: 'local',
           format: 'delta',
           vacuum: 180,
           folderPath: $tempPath + '/delta'
           ) ~> movieDB

使用分割區剪除的差異接收

使用上述 Update 方法下的此選項(也就是 update/upsert/delete),您可以限制檢查的數據分割數目。 只有滿足此條件的數據分割會從目標存放區擷取。 您可以指定分割區資料行可能採用的固定值集。

Screenshot of partition pruning options are available to limit the inspection.

使用分割區剪除的差異接收腳本範例

範例腳本如下所示。

DerivedColumn1 sink( 
      input(movieId as integer,
            title as string
           ), 
      allowSchemaDrift: true,
      validateSchema: false,
      format: 'delta',
      container: 'deltaContainer',
      folderPath: 'deltaPath',
      mergeSchema: false,
      autoCompact: false,
      optimizedWrite: false,
      vacuum: 0,
      deletable:false,
      insertable:true,
      updateable:true,
      upsertable:false,
      keys:['movieId'],
      pruneCondition:['part_col' -> ([5, 8])],
      skipDuplicateMapInputs: true,
      skipDuplicateMapOutputs: true) ~> sink2
 

Delta 只會從目標差異存放區讀取 2 個分割區,其中 part_col == 5 和 8 ,而不是所有分割區。 part_col是目標差異數據分割依據的數據行。 它不需要存在於源數據中。

差異接收優化選項

在 [設定] 索引標籤中,您可以找到三個選項來優化差異接收轉換。

  • 啟用 [合併架構] 選項時,它允許架構演進,也就是存在於目前傳入數據流中,但不在目標 Delta 數據表中的任何數據行都會自動新增至其架構。 所有更新方法都支援此選項。

  • 啟用 自動壓縮 時,在個別寫入之後,轉換會檢查是否可以進一步壓縮檔案,並執行快速 OPTIMIZE 作業(檔案大小為 128 MB,而不是 1GB),以進一步壓縮具有最多小型檔案數目之分割區的檔案。 自動壓縮有助於將大量小型檔案聯合成較小的大型檔案。 自動壓縮只會在至少有 50 個檔案時開始。 執行壓縮作業之後,它會建立新版本的數據表,並寫入新的檔案,其中包含壓縮格式中數個先前檔案的數據。

  • 啟用優化寫入,接收轉換會嘗試為每個數據表分割區寫出 128 MB 檔案,以根據實際數據動態優化分割區大小。 這是大約的大小,而且可能會根據數據集特性而有所不同。 優化寫入可改善寫入和後續讀取的整體效率。 它會組織分割區,讓後續讀取的效能有所改善。

提示

優化寫入程式會減緩整體 ETL 作業的速度,因為接收會在處理數據之後發出 Spark Delta Lake Optimize 命令。 建議謹慎使用優化寫入。 例如,如果您有每小時的數據管線,請使用 Optimized Write 每日執行數據流。

已知的限制

當您寫入差異接收時,已知有一項限制,其中寫入的數據列數目不會顯示在監視輸出中。