Импорт и экспорт данных с использованием федеративных запросов

Импорт данных

Федеративные запросы позволяют импортировать данные из подключенных внешних источников в таблицы базы данных YDB. Для импорта данных нужно использовать запрос чтения из внешнего источника данных или внешней таблицы и записи в YDB таблицу.

Для колоночных таблиц поддерживается массивно-параллельный импорт из внешнего источника при использовании конструкций UPSERT и INSERT — несколько рабочих потоков параллельно читают данные из внешнего источника и пишут в таблицу. Для строковых таблиц функциональность в разработке.

Операция Запись в строковые таблицы Запись в колоночные таблицы
UPSERT однопоточная параллельная
REPLACE однопоточная параллельная
INSERT однопоточная параллельная

Совет

Рекомендованными вариантами импорта с использованием федеративных запросов являются операции UPSERT и REPLACE — для них значительно оптимизирован сценарий импорта данных.

Пример импорта данных из PostgreSQL таблицы в YDB таблицу:

UPSERT INTO target_table
SELECT * FROM postgresql_datasource.source_table

Подробнее про создание внешних источников данных и внешних таблиц, а также про запросы чтения данных из них можно прочитать в статьях:

Экспорт данных

На данный момент экспорт данных с использованием федеративных запросов поддержан только для S3-совместимых хранилищ, подробнее смотреть в статье Экспорт данных в объектное хранилище S3.

Отображение типов при импорте и экспорте данных в формате Parquet

При экспорте и импорте данных в формате Parquet YDB использует логическую схему типов Apache Arrow — стандарт, применяемый в Parquet для описания семантики данных. Ниже приведено соответствие между типами YQL и логическими типами Arrow, которые записываются в Parquet-файл.

Тип YQL Тип Arrow при экспорте Тип Arrow при импорте Комментарий
Bool UINT8 BOOL, UINT8
Int8 INT8 INT8
Int16 INT16 INT16
Int32 INT32 INT32
Int64 INT64 INT64
Uint8 UINT8 UINT8
Uint16 UINT16 UINT16
Uint32 UINT32 UINT32
Uint64 UINT64 UINT64
Float FLOAT (32) FLOAT (32)
Double FLOAT (64) FLOAT (64)
Date UINT16 UINT16, INT32, UINT32, INT64, UINT64, DATE, TIMESTAMP (s, ms, us) количество дней, прошедших с начала Unix-эпохи
Date32 DATE (s) DATE (s)
Datetime UINT32 UINT16, INT32, UINT32, INT64, UINT64, DATE, TIMESTAMP (s, ms, us) количество секунд, прошедших с начала Unix-эпохи
Datetime64 TIMESTAMP (us) TIMESTAMP (s, ms, us)
Timestamp TIMESTAMP (us) TIMESTAMP (s, ms, us)
Timestamp64 TIMESTAMP (us) TIMESTAMP (s, ms, us)
Decimal(s, p) DECIMAL (128, s, p) DECIMAL (128, s, p)
String BINARY BINARY
Utf8 BINARY BINARY
Json BINARY BINARY