Запись данных в бакеты S3
В YDB для записи данных в бакет S3 можно использовать внешние источники данных или внешние таблицы.
Запись в S3 через внешний источник данных
Запись данных с помощью внешних источников данных удобно использовать для прототипирования и первоначальной настройки работы с записью данных. В общем виде запрос записи в S3-совместимое хранилище данных с использованием внешнего источника данных выглядит следующим образом:
INSERT INTO
<s3_external_datasource_name>.<write_folder>
WITH
(
FORMAT = "<file_format>",
COMPRESSION = "<compression>",
SCHEMA = (<schema_definition>),
<format_settings>
)
<expression>
Где:
s3_external_datasource_name
— название внешнего источника данных, ведущего на бакет с S3-совместимого хранилища данных.write_folder
— путь к директории внутри бакета, в которую будет вестись запись; путь должен быть не пустым и заканчиваться на/
; запись в корень бакета не поддерживается.file_format
— формат данных в файлах, обязательно.compression
— формат сжатия файлов, опционально.schema_definition
— описание схемы хранимых данных в файлах, опционально; если не указано, будет выведено автоматически из типа<expression>
.format_settings
— параметры форматирования, опционально.
SQL-выражение иллюстрирует запись данных во внешний источник данных напрямую.
INSERT INTO external_source.`test/`
WITH
(
FORMAT = "csv_with_names"
)
SELECT
"value" AS value, "name" AS name
Запись будет произведена в указанный путь, создаваемые при записи файлы получают случайные имена. Для задания партицирования данных нужно использовать PARTITIONED_BY
в секции WITH
, так же как и при чтении из внешних источников данных, подробнее здесь. Расширенное партицирование не поддерживается для записи в S3. Партицирование данных при записи поддерживается для всех форматов записи, кроме json_list
и raw
.
При работе с внешними источниками данных и таблицами возможны только операции чтения (SELECT
) и вставки (INSERT
) данных, другие виды операций не поддерживаются.
Запись данных через внешние таблицы
Если записывать данные нужно регулярно, то удобно делать это с помощью внешних таблиц. При этом нет необходимости указывать все детали работы с этими данными в каждом запросе. Для записи данных в бакет создайте внешнюю таблицу для S3-совместимого хранилища данных и используйте обычное SQL-выражение INSERT INTO
:
INSERT INTO test
SELECT
"value" AS value, "name" AS name
Экспорт данных в объектное хранилище S3
YDB поддерживает экспорт данных из таблиц в S3 с помощью внешнего источника данных.
Для экспорта необходимо использовать запрос записи во внешний источник данных с указанием формата экспортируемых файлов:
INSERT INTO external_source.`test/`
WITH
(
FORMAT = "parquet"
)
SELECT
*
FROM table
Экспортировать можно как обычные YDB таблицы, так и любые внешние таблицы.
Совет
Рекомендованным форматом экспорта является parquet
, для него оптимизированы сценарии импорта и экспорта.
Для экспорта в S3-совместимое хранилище данных всех таблиц, расположенных в определённой директории в схеме данных, а также информации о расположении таблиц, директорий и индексов таблиц, нужно использовать YDB CLI. Подробнее см. в статье Выгрузка в S3-совместимое хранилище.