Обзор экспорта данных
Функция экспорта данных записывает результаты запросов или данные таблиц Apache Doris в указанную систему хранения в заданном формате файлов. Обычно она используется для скачивания результатов запросов и обмена данными между системами.
Экспорт данных и резервное копирование данных
И экспорт, и резервное копирование позволяют выгружать данные из Apache Doris во внешнее хранилище, но предназначены для разных сценариев. В следующей таблице приведены основные различия:
| Критерий сравнения | Экспорт данных | Резервное копирование данных |
|---|---|---|
| Конечное место хранения | HDFS, объектное хранилище, локальная файловая система | HDFS, объектное хранилище |
| Формат данных | Открытые форматы, такие как Parquet, ORC, CSV | Внутренний формат хранения Apache Doris |
| Скорость выполнения | Средняя (требуется чтение данных и преобразование в целевой формат) | Высокая (файлы данных Doris загружаются напрямую, без разбора и преобразования) |
| Гибкость | Позволяет гибко определять состав экспортируемых данных с помощью SQL | Поддерживает только полное резервное копирование на уровне таблицы |
| Типичные сценарии использования | Скачивание результатов запросов, обмен данными между разными системами | Резервное копирование данных, перенос данных между кластерами Apache Doris |
Выбор способа экспорта
Apache Doris предоставляет три способа экспорта данных, каждый из которых подходит для определённых задач:
- SELECT INTO OUTFILE: поддерживает экспорт результатов любых SQL-запросов.
- EXPORT: поддерживает экспорт части или всех данных таблицы.
- MySQL DUMP: экспорт данных, совместимый с командами MySQL Dump.
Сравнение возможностей трёх способов
В следующей таблице три способа экспорта сравниваются по режиму выполнения, возможностям SQL, параллелизму и поддерживаемым форматам, чтобы упростить выбор:
| Критерий сравнения | SELECT INTO OUTFILE | EXPORT | MySQL DUMP |
|---|---|---|---|
| Синхронный / асинхронный режим | Синхронный | Асинхронный (после отправки задания ход выполнения можно проверить с помощью SHOW EXPORT) | Синхронный |
| Поддержка произвольного SQL | Поддерживается | Не поддерживается | Не поддерживается |
| Экспорт указанных разделов | Поддерживается | Поддерживается | Не поддерживается |
| Экспорт указанных Tablet | Поддерживается | Не поддерживается | Не поддерживается |
| Параллельный экспорт | Поддерживается, высокий параллелизм (ограничивается операторами, выполняемыми на одном узле, например ORDER BY) | Поддерживается, высокий параллелизм (на уровне Tablet) | Не поддерживается, однопоточный экспорт |
| Поддерживаемые форматы экспорта | Parquet, ORC, CSV | Parquet, ORC, CSV | Собственный формат MySQL Dump |
| Поддержка внешних таблиц | Поддерживается | Поддерживается частично | Не поддерживается |
| Поддержка представлений | Поддерживается | Поддерживается | Поддерживается |
| Поддерживаемые места назначения экспорта | S3, HDFS | S3, HDFS | LOCAL |
Сценарии применения
SELECT INTO OUTFILE
Подходит для следующих сценариев:
- Экспортируемые данные требуют сложной обработки, например фильтрации, агрегации или соединений.
- Задачи, для которых подходит синхронное выполнение.
Подробные сведения об использовании см. в разделе SELECT INTO OUTFILE.
EXPORT
Подходит для следующих сценариев:
- Экспорт больших объёмов данных из одной таблицы, для которого достаточно простых условий фильтрации.
- Задачи, требующие асинхронной отправки на выполнение.
Подробные сведения об использовании см. в разделе Асинхронный экспорт с помощью Export.
MySQL Dump
Подходит для следующих сценариев:
- Работа в экосистеме MySQL, когда необходимо экспортировать как схемы таблиц, так и данные.
- Использование только для разработки, тестирования или работы с очень небольшими объёмами данных.
Подробные сведения об использовании см. в разделе MySQL Dump.
Сопоставление типов столбцов для экспортируемых файлов
Форматы файлов Parquet и ORC имеют собственные определения типов данных. При экспорте Apache Doris автоматически преобразует внутренние типы данных в соответствующие типы Parquet/ORC. Формат CSV не содержит определений типов: все данные выводятся в текстовом виде.
Ниже приведены соответствия между типами данных Apache Doris и типами форматов ORC и Parquet.
Только в CSV значения UUID экспортируются в виде канонического текста из 36 символов в нижнем регистре. В Parquet столбец UUID записывается как FIXED_LEN_BYTE_ARRAY(16) с логической аннотацией UUID Parquet и каноническим порядком байтов big-endian. В ORC столбец UUID записывается как BINARY со специфичным для Doris атрибутом doris.logical_type=uuid, поскольку в ORC нет стандартного типа UUID. Для элементов UUID, вложенных в ARRAY, MAP или STRUCT, используется то же представление, что и для столбцов верхнего уровня. В dev повторная загрузка файлов ORC, записанных Doris, или файлов Parquet с логической аннотацией UUID через табличную функцию восстанавливает собственный тип UUID. При записи в поля UUID Iceberg используется сопоставление типов столбцов Iceberg.
Сопоставление типов ORC
| Тип Doris | Тип ORC |
|---|---|
| boolean | boolean |
| tinyint | tinyint |
| smallint | smallint |
| int | int |
| bigint | bigint |
| largeInt | string |
| date | string |
| datev2 | date |
| datetime | string |
| datetimev2 | timestamp |
| timestamptz | timestamp with local time zone (ORC TIMESTAMP_INSTANT; сохраняет семантику момента времени начиная с 4.1.5) |
| varbinary | binary |
| float | float |
| double | double |
| char / varchar / string | string |
| uuid | binary |
| decimal | decimal |
| struct | struct |
| map | map |
| array | array |
| json | string |
| variant | string |
| bitmap | binary |
| quantile_state | binary |
| hll | binary |
Сопоставление типов Parquet
При экспорте в формат файлов Parquet Apache Doris сначала преобразует данные Doris в памяти в формат Arrow для представления данных в памяти, после чего Arrow записывает их в файл Parquet. Соответствия типов приведены ниже:
| Тип Doris | Тип Arrow | Физический тип Parquet | Логический тип Parquet |
|---|---|---|---|
| boolean | boolean | BOOLEAN | |
| tinyint | int8 | INT32 | INT_8 |
| smallint | int16 | INT32 | INT_16 |
| int | int32 | INT32 | INT_32 |
| bigint | int64 | INT64 | INT_64 |
| largeInt | utf8 | BYTE_ARRAY | UTF8 |
| date | utf8 | BYTE_ARRAY | UTF8 |
| datev2 | date32 | INT32 | DATE |
| datetime | utf8 | BYTE_ARRAY | UTF8 |
| datetimev2 | timestamp | INT96 / INT64 | TIMESTAMP(MICROS/MILLIS/SECONDS) |
| float | float32 | FLOAT | |
| double | float64 | DOUBLE | |
| char / varchar / string | utf8 | BYTE_ARRAY | UTF8 |
| uuid | fixed_size_binary(16) | FIXED_LEN_BYTE_ARRAY | UUID |
| decimal | decimal128 | FIXED_LEN_BYTE_ARRAY | DECIMAL(scale, precision) |
| struct | struct | Parquet Group | |
| map | map | Parquet Map | |
| array | list | Parquet List | |
| json | utf8 | BYTE_ARRAY | UTF8 |
| variant | utf8 | BYTE_ARRAY | UTF8 |
| bitmap | binary | BYTE_ARRAY | |
| quantile_state | binary | BYTE_ARRAY | |
| hll | binary | BYTE_ARRAY |
При экспорте в Parquet с помощью Export и Outfile используйте свойство enable_int96_timestamps, чтобы выбрать физическое кодирование значений Doris DATETIMEV2. По умолчанию используется значение false: данные записываются как INT64 с логическим типом timestamp Parquet. Устанавливайте значение true для записи в устаревшем кодировании INT96 только тогда, когда оно требуется устаревшему средству чтения данных, например Hive 2 или Hive 3. При асинхронном экспорте с помощью Export это свойство сохраняется вместе с заданием экспорта и применяется при его выполнении. Если Doris впоследствии читает файл, явно экспортированный в формате INT96, задайте для hive.parquet.time-zone часовой пояс сеанса экспорта в Hive Catalog или в табличной функции для работы с файлами, чтобы FileScannerV2 восстановил исходное значение локального времени. Это значение по умолчанию действует начиная с 4.1.5; свойство принимает только true или false.
Связанные документы
- Асинхронный экспорт с помощью Export: используйте команду
EXPORTдля асинхронного экспорта данных таблицы или раздела. - SELECT INTO OUTFILE: используйте
SELECT INTO OUTFILEдля синхронного экспорта результатов запросов. - MySQL Dump: используйте инструмент
mysqldumpдля экспорта схем таблиц и данных. - Рекомендации по экспорту данных: настройка параллелизма экспорта и способы оценки скорости экспорта.