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 avStringType
.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
iFORMAT_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
varafalse
iCOPY_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.