跳到主要内容

数据导出概述

数据导出(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 格式的映射关系。

ORC 类型映射

Doris 类型ORC 类型
booleanboolean
tinyinttinyint
smallintsmallint
intint
bigintbigint
largeIntstring
datestring
datev2string
datetimestring
datetimev2timestamp
floatfloat
doubledouble
char / varchar / stringstring
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
decimaldecimal128FIXED_LEN_BYTE_ARRAYDECIMAL(scale, precision)
structstructParquet Group
mapmapParquet Map
arraylistParquet List
jsonutf8BYTE_ARRAYUTF8
variantutf8BYTE_ARRAYUTF8
bitmapbinaryBYTE_ARRAY
quantile_statebinaryBYTE_ARRAY
hllbinaryBYTE_ARRAY
备注

在 2.1.11 和 3.0.7 版本中,支持通过 parquet.enable_int96_timestamps 属性指定 Doris 的 datetimev2 类型在 Parquet 中是使用 INT96 还是 INT64 存储,默认为 INT96INT96 在 Parquet 标准中已被废弃,仅用于兼容旧系统(如 Hive 4.0 之前的版本)。

相关文档