Перейти к содержимому
Последнее обновление

Обзор экспорта данных

Функция экспорта данных записывает результаты запросов или данные таблиц 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 OUTFILEEXPORTMySQL DUMP
Синхронный / асинхронный режимСинхронныйАсинхронный (после отправки задания ход выполнения можно проверить с помощью SHOW EXPORT)Синхронный
Поддержка произвольного SQLПоддерживаетсяНе поддерживаетсяНе поддерживается
Экспорт указанных разделовПоддерживаетсяПоддерживаетсяНе поддерживается
Экспорт указанных TabletПоддерживаетсяНе поддерживаетсяНе поддерживается
Параллельный экспортПоддерживается, высокий параллелизм (ограничивается операторами, выполняемыми на одном узле, например ORDER BY)Поддерживается, высокий параллелизм (на уровне Tablet)Не поддерживается, однопоточный экспорт
Поддерживаемые форматы экспортаParquet, ORC, CSVParquet, ORC, CSVСобственный формат MySQL Dump
Поддержка внешних таблицПоддерживаетсяПоддерживается частичноНе поддерживается
Поддержка представленийПоддерживаетсяПоддерживаетсяПоддерживается
Поддерживаемые места назначения экспортаS3, HDFSS3, HDFSLOCAL

Сценарии применения​

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
booleanboolean
tinyinttinyint
smallintsmallint
intint
bigintbigint
largeIntstring
datestring
datev2date
datetimestring
datetimev2timestamp
timestamptztimestamp with local time zone (ORC TIMESTAMP_INSTANT; сохраняет семантику момента времени начиная с 4.1.5)
varbinarybinary
floatfloat
doubledouble
char / varchar / stringstring
uuidbinary
decimaldecimal
structstruct
mapmap
arrayarray
jsonstring
variantstring
bitmapbinary
quantile_statebinary
hllbinary

Сопоставление типов Parquet​

При экспорте в формат файлов Parquet Apache Doris сначала преобразует данные Doris в памяти в формат Arrow для представления данных в памяти, после чего Arrow записывает их в файл Parquet. Соответствия типов приведены ниже:

Тип DorisТип ArrowФизический тип ParquetЛогический тип Parquet
booleanbooleanBOOLEAN
tinyintint8INT32INT_8
smallintint16INT32INT_16
intint32INT32INT_32
bigintint64INT64INT_64
largeIntutf8BYTE_ARRAYUTF8
dateutf8BYTE_ARRAYUTF8
datev2date32INT32DATE
datetimeutf8BYTE_ARRAYUTF8
datetimev2timestampINT96 / INT64TIMESTAMP(MICROS/MILLIS/SECONDS)
floatfloat32FLOAT
doublefloat64DOUBLE
char / varchar / stringutf8BYTE_ARRAYUTF8
uuidfixed_size_binary(16)FIXED_LEN_BYTE_ARRAYUUID
decimaldecimal128FIXED_LEN_BYTE_ARRAYDECIMAL(scale, precision)
structstructParquet Group
mapmapParquet Map
arraylistParquet List
jsonutf8BYTE_ARRAYUTF8
variantutf8BYTE_ARRAYUTF8
bitmapbinaryBYTE_ARRAY
quantile_statebinaryBYTE_ARRAY
hllbinaryBYTE_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.