Импорт и экспорт данных с использованием федеративных запросов
Импорт данных
Федеративные запросы позволяют импортировать данные из подключенных внешних источников в таблицы базы данных 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 |