Sdílet prostřednictvím


Běžné vzory načítání dat pomocí 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.

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

Ve verzi Databricks Runtime 11.3 LTS a vyšší je nastavení schématu pro tyto tabulky volitelné pro formáty, které podporují vývoj schématu. Podrobnosti najdete v tématu Odvozování schématu a vývoj pomocí funkce COPY INTO .

Načtení dat JSON pomocí 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í 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í 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.

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'

Odvození schématu a vývoj pomocí COPY INTO

Tato část obsahuje příklady pro běžné odvozování schématu a vývojové konfigurace pomocí COPY INTO.

Syntaxe

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

Následující FORMAT_OPTIONS možnosti jsou k dispozici pro automatické odvození vstupního schématu pomocí COPY INTO:

  • inferSchema: Zda chcete odvodit datové typy analyzovaných záznamů nebo předpokládat, že všechny sloupce jsou .StringType

  • mergeSchema: Zda se má schéma odvodit napříč více zdrojovými soubory a sloučit schéma každého zdrojového souboru.

    Pokud mají zdrojové soubory stejné schéma, databricks doporučuje použít výchozí nastavení pro mergeSchema hodnotu in FORMAT_OPTIONS (false).

K dispozici jsou následující COPY_OPTIONS možnosti pro vývoj cílového schématu:COPY INTO

  • mergeSchema: Zda se má vyvíjet schéma cílové tabulky Delta na základě vstupního schématu.

    Pokud je vstupní schéma a cílové schéma stejné, mergeSchema může být false v COPY_OPTIONS.

Odvození a vývoj schématu CSV

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

mergeSchema je true v FORMAT_OPTIONS důsledku toho, že vstupní soubory můžou mít rozdíly v záhlaví nebo oddělovači.

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

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šší.