Spec-Zone.ru › DuckDB

Выражение COPY

Примеры

Считывание файла CSV в таблицу lineitem, используя автоматически определенные параметры CSV:

COPY lineitem FROM 'lineitem.csv';

Считывание файла CSV в таблицу lineitem, используя вручную заданные параметры CSV:

COPY lineitem FROM 'lineitem.csv' (DELIMITER '|');

Считывание файла Parquet в таблицу lineitem:

COPY lineitem FROM 'lineitem.pq' (FORMAT PARQUET);

Считывание файла JSON в таблицу lineitem, используя автоматически определенные параметры:

COPY lineitem FROM 'lineitem.json' (FORMAT JSON, AUTO_DETECT true);

Считывание файла CSV в таблицу lineitem, используя двойные кавычки:

COPY lineitem FROM "lineitem.csv";

Считывание файла CSV в таблицу lineitem, опуская кавычки:

COPY lineitem FROM lineitem.csv;

Запись таблицы в файл CSV:

COPY lineitem TO 'lineitem.csv' (FORMAT CSV, DELIMITER '|', HEADER);

Запись таблицы в файл CSV, используя двойные кавычки:

COPY lineitem TO "lineitem.csv";

Запись таблицы в файл CSV, опуская кавычки:

COPY lineitem TO lineitem.csv;

Запись результата запроса в файл Parquet:

COPY (SELECT l_orderkey, l_partkey FROM lineitem) TO 'lineitem.parquet' (COMPRESSION ZSTD);

Копирование всего содержимого базы данных db1 в базу данных db2:

COPY FROM DATABASE db1 TO db2;

Копирование только схемы (элементов каталога), но не данных:

COPY FROM DATABASE db1 TO db2 (SCHEMA);

Обзор

COPY перемещает данные между DuckDB и внешними файлами. COPY ... FROM импортирует данные в DuckDB из внешнего файла. COPY ... TO записывает данные из DuckDB во внешние файлы. Команда COPY может использоваться для CSV, PARQUET и JSON файлов.

COPY ... FROM

COPY ... FROM импортирует данные из внешнего файла в существующую таблицу. Данные добавляются к данным, которые уже находятся в таблице. Количество столбцов в файле должно совпадать с количеством столбцов в таблице table_name, и содержимое столбцов должно быть конвертируемо в типы столбцов таблицы. В случае, если это невозможно, будет выброшено исключение.

Если указан список столбцов, COPY скопирует только данные указанных столбцов из файла. Если в таблице есть столбцы, которые не входят в список столбцов, COPY ... FROM вставит значения по умолчанию для этих столбцов.

Копирование содержимого файла с разделителем запятая test.csv без заголовка в таблицу test:

COPY test FROM 'test.csv';

Копирование содержимого файла с разделителем запятая с заголовком в таблицу category:

COPY category FROM 'categories.csv' (HEADER);

Копирование содержимого lineitem.tbl в таблицу lineitem, где данные разделяются символом «|» (|):

COPY lineitem FROM 'lineitem.tbl' (DELIMITER '|');

Копирование содержимого lineitem.tbl в таблицу lineitem, где разделитель, символ кавычек и наличие заголовка автоматически определяются:

COPY lineitem FROM 'lineitem.tbl' (AUTO_DETECT true);

Чтение содержимого файла с разделителем запятая names.csv в столбец name таблицы category. Любые другие столбцы этой таблицы заполняются значением по умолчанию:

COPY category(name) FROM 'names.csv';

Чтение содержимого файла Parquet lineitem.parquet в таблицу lineitem:

COPY lineitem FROM 'lineitem.parquet' (FORMAT PARQUET);

Чтение содержимого файла JSON с разделителем перенос строки lineitem.ndjson в таблицу lineitem:

COPY lineitem FROM 'lineitem.ndjson' (FORMAT JSON);

Чтение содержимого файла JSON lineitem.json в таблицу lineitem:

COPY lineitem FROM 'lineitem.json' (FORMAT JSON, ARRAY true);

Синтаксис

COPY ... TO

COPY ... TO экспортирует данные из DuckDB во внешние файлы CSV или Parquet. Она имеет практически тот же набор опций, что и COPY ... FROM, однако в случае COPY ... TO опции задают, как файл должен быть записан на диск. Любой файл, созданный COPY ... TO, может быть скопирован обратно в базу данных с использованием COPY ... FROM с похожим набором опций.

Функция COPY ... TO может быть вызвана, указав имя таблицы или запрос. Когда указывается имя таблицы, содержимое всей таблицы будет записано в результирующий файл. Когда указывается запрос, запрос выполняется, и результат запроса записывается в результирующий файл.

Копирование содержимого таблицы lineitem в файл CSV с заголовком:

COPY lineitem TO 'lineitem.csv';

Копирование содержимого таблицы lineitem в файл lineitem.tbl, где столбцы разделены символом «|» (|), включая строку заголовка:

COPY lineitem TO 'lineitem.tbl' (DELIMITER '|');

Использование табуляции для создания TSV-файла без заголовка:

COPY lineitem TO 'lineitem.tsv' (DELIMITER '\t', HEADER false);

Копирование столбца l_orderkey таблицы lineitem в файл orderkey.tbl:

COPY lineitem(l_orderkey) TO 'orderkey.tbl' (DELIMITER '|');

Копирование результата запроса в файл query.csv, включая заголовок с именами столбцов:

COPY (SELECT 42 AS a, 'hello' AS b) TO 'query.csv' (DELIMITER ',');

Копирование результата запроса в файл Parquet query.parquet:

COPY (SELECT 42 AS a, 'hello' AS b) TO 'query.parquet' (FORMAT PARQUET);

Копирование результата запроса в файл JSON с разделителем перенос строки query.ndjson:

COPY (SELECT 42 AS a, 'hello' AS b) TO 'query.ndjson' (FORMAT JSON);

Копирование результата запроса в файл JSON query.json:

COPY (SELECT 42 AS a, 'hello' AS b) TO 'query.json' (FORMAT JSON, ARRAY true);

COPY ... TO Опции

Ноль или более опций копирования могут быть предоставлены в рамках операции копирования. Спецификатор WITH является необязательным, но если опции указаны, скобки обязательны. Значения параметров могут передаваться с или без обертки в одинарные кавычки.

Любая опция, являющаяся булевым значением, может быть включена или отключена несколькими способами. Можно написать true, ON, или 1 для включения опции и false, OFF, или 0 для её отключения. Значение BOOLEAN также может быть опущено, например, пропустив только (HEADER), в этом случае предполагается true.

Ниже приведенные опции применимы ко всем форматам, записанным с COPY.

END_OF_DOCUMENT_MARKER
Имя Описание Тип Значение по умолчанию
FORMAT Указывает функцию копирования для использования. По умолчанию выбирается из расширения файла (например, .parquet приводит к записи/чтению файла Parquet). Если расширение файла неизвестно CSV выбирается по умолчанию. Vanilla DuckDB предоставляет CSV, PARQUET и JSON, но дополнительные функции копирования можно добавить, используя extensions. VARCHAR auto
USE_TMP_FILE Флаг, указывающий, следует ли сначала записать данные в временный файл, если исходный файл существует (target.csv.tmp). Это предотвращает перезапись существующего файла поврежденным файлом в случае отмены записи. BOOL auto
OVERWRITE_OR_IGNORE Флаг, указывающий, разрешено ли перезаписывать файлы, если они уже существуют. Действует только при использовании с partition_by. BOOL false
OVERWRITE Если установлено, все существующие файлы внутри целевых каталогов будут удалены (не поддерживается на удалённых файловых системах). Действует только при использовании с partition_by. BOOL false
APPEND Если установлено, в случае генерации имени файла, которое уже существует, путь будет сгенерирован заново, чтобы гарантировать, что существующие файлы не перезапишутся. Действует только при использовании с partition_by. BOOL false
FILENAME_PATTERN Установите шаблон для использования в имени файла, который может необязательно содержать {uuid} для заполнения сгенерированным UUID или {id}, который заменяется инкрементным индексом. Действует только при использовании с partition_by. VARCHAR auto
FILE_EXTENSION Установите расширение файла, которое должно быть назначено сгенерированному файлу(ам). VARCHAR auto
PER_THREAD_OUTPUT Создавать по одному файлу на поток, а не один файл в целом. Это позволяет ускорить параллельную запись. BOOL false
FILE_SIZE_BYTES Если этот параметр установлен, процесс COPY создаёт каталог, который будет содержать экспортированные файлы. Если размер файла превышает заданный лимит (указанный в байтах, например 1000 или в читаемом формате, например 1k), процесс создаёт новый файл в каталоге. Этот параметр работает в сочетании с PER_THREAD_OUTPUT. Обратите внимание, что размер используется приблизительно, и файлы иногда могут быть немного больше лимита. VARCHAR или BIGINT (пусто)
PARTITION_BY Столбцы для разбиения с использованием схемы разбиения Hive, см. раздел разбиения таблиц. VARCHAR[] (пусто)
RETURN_FILES Включать ли созданный(ые) путь(и) к файлу (как столбец Files VARCHAR[]) в результат запроса. BOOL false
WRITE_PARTITION_COLUMNS Следует ли записывать столбцы разбиения в файлы. Действует только при использовании с partition_by. BOOL false

Синтаксис

COPY FROM DATABASE ... TO

Оператор COPY FROM DATABASE ... TO копирует всё содержимое одной подключенной базы данных в другую подключенную базу данных. Это включает схему, включая ограничения, индексы, последовательности, макросы и сами данные.

ATTACH 'db1.db' AS db1;
CREATE TABLE db1.tbl AS SELECT 42 AS x, 3 AS y;
CREATE MACRO db1.two_x_plus_y(x, y) AS 2 * x + y;

ATTACH 'db2.db' AS db2;
COPY FROM DATABASE db1 TO db2;
SELECT db2.two_x_plus_y(x, y) AS z FROM db2.tbl;
z
87

Чтобы скопировать только схему db1 в db2, но не копировать данные, добавьте SCHEMA к оператору:

COPY FROM DATABASE db1 TO db2 (SCHEMA);

Синтаксис

Формат-специфичные опции

Опции CSV

Нижеприведённые параметры применимы при записи CSV файлов.

Имя Описание Тип Значение по умолчанию
COMPRESSION Тип сжатия для файла. По умолчанию это будет определяться автоматически из расширения файла (например, file.csv.gz будет использовать gzip, file.csv будет использовать none). Доступные варианты: none, gzip, zstd. VARCHAR auto
DATEFORMAT Указывает формат даты для записи дат. См. Формат даты VARCHAR (пусто)
DELIM или SEP Символ, используемый для разделения столбцов в каждой строке. VARCHAR ,
ESCAPE Символ, который должен появляться перед символом, соответствующим значению quote . VARCHAR "
FORCE_QUOTE Список столбцов, к которым всегда должны добавляться кавычки, даже если это не требуется. VARCHAR[] []
HEADER Следует ли записывать заголовок для CSV файла. BOOL true
NULLSTR Строка, которая записывается для представления значения NULL. VARCHAR (пусто)
QUOTE Символ кавычек, который используется, когда значение данных заключено в кавычки. VARCHAR "
TIMESTAMPFORMAT Указывает формат даты для записи временных меток. См. Формат даты VARCHAR (пусто)

Опции Parquet

Нижеприведённые параметры применимы при записи файлов Parquet.

Имя Описание Тип Значение по умолчанию
COMPRESSION Формат сжатия (uncompressed, snappy, gzip или zstd). VARCHAR snappy
COMPRESSION_LEVEL Уровень сжатия, значение от 1 (низкое сжатие, высокая скорость) до 22 (высокое сжатие, низкая скорость). Поддерживается только для сжатия zstd. BIGINT 3
FIELD_IDS Размер field_id для каждого столбца. Для автоматического определения используйте auto. STRUCT (пусто)
ROW_GROUP_SIZE_BYTES Целевой размер каждой группы строк. Можно использовать строку в удобочитаемом формате, например, 2MB, или целое число, то есть количество байтов. Этот параметр используется только при использовании SET preserve_insertion_order = false;, в противном случае игнорируется. BIGINT row_group_size * 1024
ROW_GROUP_SIZE Целевой размер (количество строк) каждой группы строк. BIGINT 122880
ROW_GROUPS_PER_FILE Создать новый файл Parquet, если в текущем файле указанное количество групп строк. Если активны несколько потоков, количество групп строк в файле может немного превышать заданное количество групп строк, чтобы ограничить количество блокировок – аналогично поведению FILE_SIZE_BYTES. Однако, если per_thread_output установлен, только один поток записывает в каждый файл, и это становится точным снова. BIGINT (пусто)

Примеры FIELD_IDS:

Автоматическое назначение field_ids:

COPY
    (SELECT 128 AS i)
    TO 'my.parquet'
    (FIELD_IDS 'auto');

Устанавливает field_id столбца i в значение 42:

COPY
    (SELECT 128 AS i)
    TO 'my.parquet'
    (FIELD_IDS {i: 42});

Устанавливает field_id столбца i в значение 42, и столбца j в значение 43:

COPY
    (SELECT 128 AS i, 256 AS j)
    TO 'my.parquet'
    (FIELD_IDS {i: 42, j: 43});

Устанавливает field_id столбца my_struct в значение 43, и столбца i (вложенного в my_struct ) в значение 43:

COPY
    (SELECT {i: 128} AS my_struct)
    TO 'my.parquet'
    (FIELD_IDS {my_struct: {__duckdb_field_id: 42, i: 43}});

Устанавливает field_id столбца my_list в значение 42, и столбца element (имя дочернего элемента списка по умолчанию) в значение 43:

COPY
    (SELECT [128, 256] AS my_list)
    TO 'my.parquet'
    (FIELD_IDS {my_list: {__duckdb_field_id: 42, element: 43}});

Устанавливает field_id столбца my_map в значение 42, и столбцов key и value (имена дочерних элементов словаря по умолчанию) в значения 43 и 44:

COPY
    (SELECT MAP {'key1' : 128, 'key2': 256} my_map)
    TO 'my.parquet'
    (FIELD_IDS {my_map: {__duckdb_field_id: 42, key: 43, value: 44}});

Параметры JSON

Ниже приведенные параметры применимы при записи файлов JSON.

Имя Описание Тип Значение по умолчанию
ARRAY Запись массива JSON. Если true, записывается массив JSON из записей, если false, записывается JSON, разделенный символом новой строки. BOOL false
COMPRESSION Тип сжатия для файла. По умолчанию он определяется автоматически из расширения файла (например, file.json.gz будет использовать gzip, file.json будет использовать none). Доступные варианты: none, gzip, zstd. VARCHAR auto
DATEFORMAT Указывает формат даты для записи дат. См. Формат даты VARCHAR (пусто)
TIMESTAMPFORMAT Указывает формат даты для записи временных меток. См. Формат даты VARCHAR (пусто)

Ограничения

COPY не поддерживает копирование между таблицами. Для копирования между таблицами используйте INSERT statement:

INSERT INTO tbl2
    FROM tbl1;

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/sql/statements/copy.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API