共用方式為


使用的常見數據載入模式 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

下列範例會將 Azure Data Lake Storage Gen2 中的 abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 CSV 檔案載入 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 建議在 (false) 中使用預設設定。mergeSchema FORMAT_OPTIONS

以下是 COPY_OPTIONS 使用 來發展目標架構 COPY INTO的可用專案:

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

    如果輸入架構和目標架構相同, mergeSchema 可以在 falseCOPY_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');

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

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

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

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

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

注意

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