Pola pemuatan data umum menggunakan COPY INTO

Pelajari pola umum untuk menggunakan COPY INTO untuk memuat data dari sumber file ke Delta Lake.

Ada banyak opsi untuk menggunakan COPY INTO. Anda juga dapat menggunakan kredensial sementara dengan COPY INTO dalam kombinasi dengan pola ini.

Lihat COPY INTO untuk referensi lengkap semua opsi.

Membuat tabel target untuk COPY INTO

COPY INTO harus menargetkan tabel Delta yang ada. Dalam Databricks Runtime 11.3 LTS ke atas, mengatur skema untuk tabel ini bersifat opsional untuk format yang mendukung evolusi skema:

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

Perhatikan bahwa untuk menyimpulkan skema dengan COPY INTO, Anda harus meneruskan opsi tambahan:

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

Contoh berikut membuat tabel Delta tanpa skema yang disebut my_pipe_data dan memuat CSV yang dibatasi pipa dengan header:

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');

Memuat data JSON dengan COPY INTO

Contoh berikut memuat data JSON dari lima file di Azure Data Lake Storage Gen2 (ADLS Gen2) ke dalam tabel Delta yang disebut my_json_data. Tabel ini harus dibuat sebelum COPY INTO dapat dieksekusi. Jika ada data yang sudah dimuat dari salah satu file, data tidak akan dimuat ulang untuk file tersebut.

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')

Muat data Avro dengan COPY INTO

Contoh berikut memuat data Avro di ADLS Gen2 menggunakan ekspresi SQL tambahan sebagai bagian SELECT dari pernyataan.

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

Muat file CSV dengan COPY INTO

Contoh berikut memuat file CSV dari Azure Data Lake Storage Gen2 di bawah abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 ke dalam tabel Delta di abfss://container@storageAccount.dfs.core.windows.net/deltaTables/target.

COPY INTO delta.`abfss://container@storageAccount.dfs.core.windows.net/deltaTables/target`
  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 delta.`abfss://container@storageAccount.dfs.core.windows.net/deltaTables/target`
  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'

Abaikan file yang rusak saat memuat data

Jika data yang Anda muat tidak dapat dibaca karena beberapa masalah kerusakan, file-file tersebut FORMAT_OPTIONSdapat dilewati dengan mengatur ignoreCorruptFiles ke true di .

Hasil perintah COPY INTO mengembalikan berapa banyak file yang dilewati karena kerusakan di num_skipped_corrupt_files kolom. Metrik ini juga muncul di kolom di operationMetrics bawah numSkippedCorruptFiles setelah berjalan DESCRIBE HISTORY pada tabel Delta.

File yang rusak tidak dilacak oleh COPY INTO, sehingga dapat dimuat ulang dalam proses berikutnya jika kerusakan diperbaiki. Anda dapat melihat file mana yang rusak dengan berjalan COPY INTO dalam VALIDATE mode.

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

Catatan

ignoreCorruptFiles tersedia di Databricks Runtime 11.3 LTS ke atas.