Běžné vzory načítání dat pomocí funkce COPY INTO

Seznamte se s běžnými vzory pro načtení COPY INTO dat ze zdrojů souborů do Delta Lake.

Existuje mnoho možností pro použití COPY INTO. V kombinaci s těmito vzory můžete také použít dočasné přihlašovací údaje se službou COPY INTO .

Úplný odkaz na všechny možnosti najdete v tématu COPY INTO .

Vytvoření cílových tabulek pro COPY INTO

COPY INTO musí cílit na existující tabulku Delta. V Databricks Runtime 11.3 LTS a novějších je nastavení schématu pro tyto tabulky volitelné pro formáty, které podporují vývoj schématu:

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

Mějte na paměti, že chcete-li odvodit schéma pomocí COPY INTO, musíte předat další možnosti:

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

Následující příklad vytvoří tabulku Delta bez schématu a my_pipe_data načte csv s oddělovači s oddělovači se záhlavím:

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

Načtení dat JSON pomocí funkce COPY INTO

Následující příklad načte data JSON z pěti souborů v Azure Data Lake Storage Gen2 (ADLS Gen2) do tabulky Delta s názvem my_json_data. Tuto tabulku je nutné vytvořit před COPY INTO spuštěním. Pokud už některá data byla načtena z jednoho ze souborů, nebudou se data pro tento soubor znovu načítat.

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

Načtení dat Avro pomocí příkazu COPY INTO

Následující příklad načte data Avro v ADLS Gen2 pomocí dalších výrazů SQL jako součást SELECT příkazu.

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

Načtení souborů CSV pomocí příkazu COPY INTO

Následující příklad načte soubory CSV z Azure Data Lake Storage Gen2 do abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 tabulky Delta na adrese 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'

Ignorování poškozených souborů při načítání dat

Pokud data, která načítáte, nejde přečíst kvůli nějakému problému s poškozením, je možné tyto soubory přeskočit nastavením ignoreCorruptFiles v true souboru FORMAT_OPTIONS.

Výsledek příkazu vrátí počet přeskočených COPY INTO souborů kvůli poškození ve num_skipped_corrupt_files sloupci. Tato metrika se také zobrazuje ve operationMetrics sloupci pod numSkippedCorruptFiles spuštěním DESCRIBE HISTORY v tabulce Delta.

Poškozené soubory nejsou sledovány COPY INTO, takže je možné je znovu načíst v následném spuštění, pokud je poškození opraveno. Můžete zjistit, které soubory jsou poškozené spuštěním COPY INTO v VALIDATE režimu.

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

Poznámka:

ignoreCorruptFiles je k dispozici v Databricks Runtime 11.3 LTS a vyšší.