共用方式為


使用的常見數據載入模式 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 Gen2 (ADLS Gen2) 中的五個檔案載入至名為 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 運算式作為 語句的 SELECT 一部分,在 ADLS Gen2 中載入 Avro 數據。

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 Gen2 的 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 Gen2 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 建議使用 FORMAT_OPTIONSmergeSchema 的預設設定 (false)。

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

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

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

推斷和演化 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將 設定trueFORMAT_OPTIONS 來略過這些檔案。

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

損毀的檔案不會受到 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 和更新版本。