跳到主要内容
最后 更新

数据导出概述

数据导出(Export)功能用于将 查询结果集Apache Doris 表数据 以指定文件格式写入指定的存储系统,常用于结果集下载和跨系统数据交换场景。

数据导出 vs 数据备份

数据导出和数据备份均可将 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支持不支持不支持
导出指定分区支持支持不支持
导出指定 Tablets支持不支持不支持
并发导出支持,并发高(受 ORDER BY 等单机算子限制)支持,并发高(支持 Tablet 粒度并发)不支持,单线程导出
支持的导出格式Parquet、ORC、CSVParquet、ORC、CSVMySQL Dump 专有格式
是否支持外表支持部分支持不支持
是否支持 View支持支持支持
支持的导出位置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 列写入带 UUID 逻辑标记的 FIXED_LEN_BYTE_ARRAY(16),使用标准大端字节序;ORC 中 UUID 列写入 BINARY 并附带 Doris 专有的 doris.logical_type=uuid 属性,因为 ORC 没有标准 UUID 类型。ARRAY、MAP 或 STRUCT 中嵌套的 UUID 元素与顶层列使用相同的表示方式。通过表值函数重新读取 Doris 写出的 ORC 文件可还原原生 UUID 类型,而 Parquet 的 Schema 推断仍将 UUID 叶子暴露为 STRING/VARBINARY,重新导入 Parquet 文件时需指定 UUID 目标列,或使用 CAST(value AS UUID) 转换。写入 Iceberg UUID 字段时遵循 Iceberg 列类型映射

ORC 类型映射

Doris 类型ORC 类型
booleanboolean
tinyinttinyint
smallintsmallint
intint
bigintbigint
largeIntstring
datestring
datev2string
datetimestring
datetimev2timestamp
floatfloat
doubledouble
char / varchar / stringstring
uuidbinary
decimaldecimal
structstruct
mapmap
arrayarray
jsonstring
variantstring
bitmapbinary
quantile_statebinary
hllbinary

Parquet 类型映射

Apache Doris 导出到 Parquet 文件格式时,会先将 Doris 内存数据转换为 Arrow 内存格式,再由 Arrow 写出到 Parquet 文件。映射关系如下:

Doris 类型Arrow 类型Parquet Physical TypeParquet Logical Type
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,写入带 Parquet 时间戳逻辑类型的 INT64。仅当 Hive 2、Hive 3 等下游旧版读取端要求时,才设置为 true 写入已废弃的 INT96 编码。异步 Export 会将该属性保存在导出作业中,并在作业执行时应用。如果 Doris 后续读取显式导出的 INT96 文件,请在 Hive Catalog 或文件表值函数中将 hive.parquet.time-zone 设置为导出会话时区,使 FileScannerV2 还原原始墙上时间。

相关文档