Dela via


Vanliga datainläsningsmönster med hjälp av COPY INTO

Lär dig vanliga mönster för att använda COPY INTO för att läsa in data från filkällor till Delta Lake.

Det finns många alternativ för att använda COPY INTO. Du kan också använda tillfälliga autentiseringsuppgifter med COPY INTO i kombination med dessa mönster.

Se COPY INTO för en fullständig referens av alla alternativ.

Skapa måltabeller för COPY INTO

COPY INTO måste rikta in sig på en befintlig Delta-tabell.

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

I Databricks Runtime 11.3 LTS och senare är det valfritt att ange schemat för dessa tabeller för format som stöder schemautveckling. Se om schemainferens och utveckling med COPY INTO för detaljer.

Läs in JSON-data med hjälp av COPY INTO

I följande exempel läses JSON-data från fem filer i Azure Data Lake Storage Gen2 (ADLS Gen2) in i deltatabellen med namnet my_json_data. Den här tabellen måste skapas innan COPY INTO kan köras. Om några data redan har lästs in från en av filerna, läses inte data in igen för filen.

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

Läsa in Avro-data med hjälp av COPY INTO

I följande exempel läses Avro-data in i ADLS Gen2 med ytterligare SQL-uttryck som en del av -instruktionen SELECT .

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

Läsa in CSV-filer med hjälp av COPY INTO

I följande exempel läses CSV-filer in från Azure Data Lake Storage Gen2 under abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 till en Delta-tabell.

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'

Schemainferens och utveckling med hjälp av COPY INTO

Det här avsnittet innehåller exempel på vanliga schemainferens- och evolutionskonfigurationer med hjälp av COPY INTO.

Syntax

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

Följande FORMAT_OPTIONS är tillgängliga för att automatiskt härleda indataschemat med COPY INTO:

  • inferSchema: Om du vill härleda datatyperna för de parsade posterna eller anta att alla kolumner är av StringType.

  • mergeSchema: Om schemat ska härledas mellan flera källfiler och om schemat för varje källfil ska sammanfogas.

    Om källfilerna har samma schema rekommenderar Databricks att du använder standardinställningen för mergeSchema i FORMAT_OPTIONS (false).

Följande COPY_OPTIONS är tillgängliga för att utveckla målschemat med COPY INTO:

  • mergeSchema: Om du vill utveckla schemat för deltatabellen för mål baserat på indataschemat.

    Om indataschemat och målschemat är desamma kan mergeSchema vara false i COPY_OPTIONS.

Härled och utveckla ett CSV-schema

I följande exempel skapas en schemalös Delta-tabell med namnet my_pipe_data och läser in pipe-avgränsad CSV med en rubrik.

mergeSchema är true i FORMAT_OPTIONS eftersom indatafilerna kan ha skillnader i sidhuvud eller avgränsare.

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

Ignorera skadade filer vid inläsning av data

Om data som du läser in inte kan läsas på grund av ett problem med skada kan dessa filer hoppas över genom att ignoreCorruptFiles ange true i FORMAT_OPTIONS.

Resultatet av kommandot COPY INTO returnerar hur många filer som hoppades över på grund av skada i kolumnen num_skipped_corrupt_files. Det här måttet visas också i kolumnen operationMetrics under numSkippedCorruptFiles när du har kört DESCRIBE HISTORY i deltatabellen.

Skadade filer spåras inte av COPY INTO, så de kan läsas in igen i en efterföljande körning om skadan är åtgärdad. Du kan se vilka filer som är skadade genom att köra COPY INTO i VALIDATE läge.

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

Kommentar

ignoreCorruptFiles finns i Databricks Runtime 11.3 LTS och senare.