Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Общие шаблоны загрузки данных с помощью
Узнайте распространенные шаблоны для использования COPY INTO
для загрузки данных из файловых источников в Delta Lake.
Существует множество вариантов использования COPY INTO
. Вы также можете использовать временные учетные данные вместе с COPY INTO в сочетании с этими шаблонами.
С полным справочником всех параметров можно ознакомиться в COPY INTO
.
Создайте целевые таблицы для COPY INTO
COPY INTO
должна быть нацелена на существующую таблицу Delta.
CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];
В Databricks Runtime 11.3 LTS и более поздних версиях задание схемы данных таблиц является необязательным для форматов, поддерживающих схемную эволюцию. Дополнительные сведения см. в определении схемы и её эволюции с помощью COPY INTO
.
Загрузка данных JSON с помощью COPY INTO
В следующем примере данные JSON загружаются из пяти файлов в Azure Data Lake Storage (ADLS) в таблицу Delta с именем my_json_data
. Эту таблицу необходимо создать перед выполнением COPY INTO
. Если из одного из файлов уже были загружены данные, эти данные для него перезагружены не будут.
COPY INTO my_json_data
FROM 'abfss://[email protected]/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://[email protected]/base/path'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')
Загрузка данных Avro с помощью COPY INTO
В следующем примере данные Avro загружаются в ADLS с помощью дополнительных выражений SQL в рамках инструкции SELECT
.
COPY INTO my_delta_table
FROM (SELECT to_date(dt) dt, event as measurement, quantity::double
FROM 'abfss://[email protected]/base/path')
FILEFORMAT = AVRO
Загрузка CSV-файлов с помощью COPY INTO
В следующем примере CSV-файлы загружаются из Azure Data Lake Storage под abfss://[email protected]/base/path/folder1
в таблицу Delta.
COPY INTO target_table
FROM (SELECT key, index, textData, 'constant_value'
FROM 'abfss://[email protected]/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
FORMAT_OPTIONS('header' = 'true')
-- The example below loads CSV files without headers in ADLS 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://[email protected]/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
Вывод схемы и эволюция с помощью COPY INTO
В этом разделе приведены примеры общих конфигураций вывода схемы и эволюции с помощью COPY INTO
.
Синтаксис
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');
Следующие FORMAT_OPTIONS
доступны для автоматического вывода входной схемы с COPY INTO
:
inferSchema
: следует ли выводить типы данных распарсенных записей или предполагать, что все столбцы имеют типStringType
.mergeSchema
: следует ли выводить схему из нескольких исходных файлов и объединять схему каждого файла.Если исходные файлы имеют ту же схему, Databricks рекомендует использовать параметр по умолчанию для
mergeSchema
вFORMAT_OPTIONS
(false
).
В наличии следующие COPY_OPTIONS
, которые можно использовать для развития целевой схемы с помощью COPY INTO
:
mergeSchema
: следует ли изменять схему целевой Delta-таблицы на основе входной схемы.Если входная схема и целевая схема совпадают,
mergeSchema
может быть заменён наfalse
вCOPY_OPTIONS
.
Выведение и развитие схемы CSV
В следующем примере создаётся таблица Delta без схемы с именем my_pipe_data
и загружается CSV-файл, разделённый столбцами через вертикальный слэш, с заголовком.
mergeSchema
является true
в FORMAT_OPTIONS
, потому что входные файлы могут иметь различия в заголовках или разделителях.
CREATE TABLE IF NOT EXISTS my_pipe_data;
COPY INTO my_pipe_data
FROM 'abfss://[email protected]/base/path'
FILEFORMAT = CSV
FORMAT_OPTIONS ('mergeSchema' = 'true',
'delimiter' = '|',
'header' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');
Игнорирование поврежденных файлов при загрузке данных
Если данные, которые вы загружаете, не удается прочитать из-за некоторых проблем с повреждением, эти файлы можно пропустить, задав параметр ignoreCorruptFiles
true
в поле FORMAT_OPTIONS
.
Результат команды COPY INTO
возвращает количество пропущенных файлов из-за повреждения в столбце num_skipped_corrupt_files
. Эта метрика также отображается в столбце operationMetrics
под numSkippedCorruptFiles
после выполнения DESCRIBE HISTORY
в таблице Delta.
Поврежденные файлы не отслеживаются COPY INTO
, поэтому их можно перезагрузить в последующем запуске, если повреждение исправлено. Чтобы посмотреть, какие файлы повреждены, выполните команду COPY INTO
в режиме VALIDATE
.
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')
Примечание.
ignoreCorruptFiles
доступен в Databricks Runtime 11.3 LTS и выше.