使用的常見數據載入模式 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
可以在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');
載入數據時忽略損毀的檔案
如果您載入的數據因為某些損毀問題而無法讀取,則可以在 中FORMAT_OPTIONS
將 設定ignoreCorruptFiles
為 true
來略過這些檔案。
命令的結果 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 和更新版本。