使用的常見數據載入模式 COPY INTO

瞭解用來 COPY INTO 將數據從檔案來源載入 Delta Lake 的常見模式。

使用 COPY INTO有許多選項。 您也可以使用暫存認證來搭配這些模式 COPY INTO 。

如需所有選項的完整參考,請參閱 COPY INTO。

為 COPY INTO 建立目標資料表

COPY INTO 必須以現有的 Delta 數據表為目標。

CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];

在 Databricks Runtime 11.3 LTS 和更新版本中,設定這些數據表的架構對於支援 架構演進的格式而言是選擇性的。 如需詳細資訊,請參閱 使用 COPY INTO 進行架構推斷和演進。

使用載入 JSON 數據 COPY INTO

下列範例會將 JSON 數據從 Azure Data Lake Storage (ADLS) 中的五個檔案載入至名為 my_json_data的 Delta 數據表。 必須先建立此數據表,才能執行 COPY INTO。 如果已從其中一個檔案載入任何數據,則不會針對該檔案重載數據。

COPY INTO my_json_data
  FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
  FILEFORMAT = JSON
  FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')

 -- The second execution will not copy any data since the first command already loaded the data
 COPY INTO my_json_data
   FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
   FILEFORMAT = JSON
   FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')

使用載入 Avro 數據 COPY INTO

下列範例會使用其他 SQL 運算式在 ADLS 中載入 Avro 數據,作為語句的 SELECT 一部分。

COPY INTO my_delta_table
  FROM (SELECT to_date(dt) dt, event as measurement, quantity::double
          FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
  FILEFORMAT = AVRO

使用載入 CSV 檔案 COPY INTO

下列範例會將 CSV 檔案從 Azure Data Lake Storage 載入 abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 至 Delta 數據表。

COPY INTO target_table
  FROM (SELECT key, index, textData, 'constant_value'
          FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
  FILEFORMAT = CSV
  PATTERN = 'folder1/file_[a-g].csv'
  FORMAT_OPTIONS('header' = 'true')

-- The example below loads CSV files without headers in ADLS using COPY INTO.
-- By casting the data and renaming the columns, you can put the data in the schema you want
COPY INTO target_table
  FROM (SELECT _c0::bigint key, _c1::int index, _c2 textData
        FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
  FILEFORMAT = CSV
  PATTERN = 'folder1/file_[a-g].csv'

使用 COPY INTO 的架構推斷和演進

本節提供使用 COPY INTO的常見架構推斷和演進組態範例。

語法

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');

下列 FORMAT_OPTIONS 可供利用 COPY INTO自動推測輸入架構:

  • inferSchema:是要推斷已剖析記錄的數據類型,還是假設所有資料行都是 StringType。

  • mergeSchema:是否要跨多個來源檔案推斷架構,以及合併每個來源檔案的架構。

    如果來源檔案具有相同的架構,Databricks 建議使用 mergeSchema 中 FORMAT_OPTIONS 的預設設定 (false)。

下列 COPY_OPTIONS 可用於搭配 COPY INTO以演進目標架構:

  • mergeSchema:是否根據輸入架構發展目標 Delta 數據表的架構。

    如果輸入架構和目標架構相同,mergeSchema 可以在 false中成為 COPY_OPTIONS。

推斷和演化 CSV 架構

下列範例會建立稱為 my_pipe_data 的無架構 Delta 數據表,並使用標頭載入管道分隔的 CSV。

mergeSchema 因為 true 輸入檔可能有標頭或分隔符差異,因此 位於 中 FORMAT_OPTIONS 。

CREATE TABLE IF NOT EXISTS my_pipe_data;

COPY INTO my_pipe_data
  FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
  FILEFORMAT = CSV
  FORMAT_OPTIONS ('mergeSchema' = 'true',
                  'delimiter' = '|',
                  'header' = 'true')
  COPY_OPTIONS ('mergeSchema' = 'true');

載入數據時忽略損毀的檔案

如果您載入的數據因某些損毀問題而無法讀取,則可通過在ignoreCorruptFiles中將true設為FORMAT_OPTIONS來略過這些檔案。

COPY INTO 命令的結果會傳回因為 num_skipped_corrupt_files 數據行中的損毀而略過多少個檔案。 在 Delta 數據表上執行 operationMetrics 之後,此計量也會顯示在 [numSkippedCorruptFiles] 底下的 [DESCRIBE HISTORY] 資料行中。

損毀的檔案不會受到 COPY INTO追蹤,因此在修正損毀時,可以在後續的執行中重載。 您可以在 模式中COPY INTO執行VALIDATE,以查看哪些檔案已損毀。

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')

注意

ignoreCorruptFiles 適用於 Databricks Runtime 11.3 LTS 和更新版本。