EXPORT 是云数据库 SelectDB 版提供的异步数据导出能力。提交任务后立即返回,由系统在后台将整张内表、指定分区或外表数据按指定文件格式写入 OSS 或 HDFS。本文介绍命令的适用范围、典型示例和操作要点。
适用场景
EXPORT 面向以下两类需求:
把整张表或指定分区一次性下沉到对象存储或 HDFS,过滤条件简单或不需要复杂计算。
作业可以异步排队执行,由 EXPORT 后台调度、客户端只需轮询状态,不需要保持长连接。
使用限制
不支持将文本格式的输出文件压缩。
不支持以 SELECT 查询结果作为导出源。如果需要落盘任意 SELECT 结果,请改用 SELECT INTO OUTFILE。
单次任务最多覆盖 2000 个分区,超出需要联系技术支持调整 FE 参数
maximum_number_of_export_partitions。delete_existing_files默认禁用。如需启用,请提交工单联系技术支持。
EXPORT 与 SELECT INTO OUTFILE / MySQL Dump 对比
对比维度 | SELECT INTO OUTFILE | EXPORT | MySQL Dump |
执行模式 | 同步阻塞 | 异步排队,提交后立即返回,可用 SHOW EXPORT 查询进度 | 同步阻塞 |
导出来源 | 任意 SELECT 结果集 | 指定的表、分区或外表 | 指定的库或表 |
指定分区 | 支持(在 SELECT 子句中表达) | 支持(PARTITION 子句) | 不支持 |
指定 Tablet | 支持 | 不支持 | 不支持 |
并发能力 | 取决于 SQL 是否含 ORDER BY 等单机算子 | 支持 Tablet 粒度并行 | 单线程 |
输出格式 | Parquet、ORC、CSV | Parquet、ORC、CSV(含 csv_with_names 等变体) | MySQL Dump 专有格式 |
外表 | 支持 | 支持 External Catalog 中的表 | 不支持 |
视图 | 支持 | 支持逻辑视图 | 支持 |
输出位置 | 对象存储、HDFS | 对象存储、HDFS | 本地文件系统 |
导出说明
支持导出的对象
SelectDB 内表(DUPLICATE / UNIQUE / AGGREGATE 三种数据模型均可)。
SelectDB 逻辑视图。
External Catalog 注册的外表(例如 Hive Metastore Catalog 中的表)。
支持的导出位置
对象存储:阿里云 OSS、Amazon S3、腾讯云 COS、华为云 OBS、Google GCS。统一通过
WITH S3子句和s3.*属性键描述。HDFS:含开启 NameNode 高可用与 Kerberos 认证的集群。通过
WITH HDFS子句配置。
支持的导出文件格式
Parquet
ORC
csv(默认)
csv_with_names(首行携带列名)
csv_with_names_and_types(首行列名 + 第二行列类型)
快速上手
建表与写入数据
CREATE TABLE IF NOT EXISTS demo.tbl (
`c1` INT NULL,
`c2` STRING NULL,
`c3` BIGINT NULL
)
DISTRIBUTED BY HASH(c1) BUCKETS 4;
INSERT INTO demo.tbl VALUES
(1, 'doris', 18),
(2, 'nereids', 20),
(3, 'pipeline', 99999),
(4, 'Apache', 122123455),
(5, NULL, NULL);导出到阿里云 OSS
将 demo.tbl 整表写入 OSS Bucket,使用默认 csv 格式:
EXPORT TABLE demo.tbl TO "oss://<your_bucket>/export/tbl_"
PROPERTIES (
"line_delimiter" = ","
)
WITH S3 (
"s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
"s3.region" = "oss-cn-hangzhou",
"s3.access_key" = "<your_access_key_id>",
"s3.secret_key" = "<your_access_key_secret>"
);路径协议:阿里云 OSS 推荐使用
oss://;同时也兼容s3://。子句关键字:无论路径协议是 oss 还是 s3,凭证子句都用
WITH S3,属性键固定为s3.endpoint、s3.region、s3.access_key、s3.secret_key。SelectDB v4 中尚未提供WITH OSS关键字。Endpoint:实例与 OSS 在同一地域时,使用内网 endpoint(如
oss-cn-hangzhou-internal.aliyuncs.com),可避免公网流量费并加快传输。
导出到 HDFS
将 demo.tbl 写入 HDFS,并自定义列分隔符。fs.defaultFS 与目标路径中的 host:port 需替换为真实可达的 NameNode 地址(例如同 VPC 内 EMR 集群 Master 节点的 FQDN):
EXPORT TABLE demo.tbl TO "hdfs://<namenode_host>:9000/path/to/tbl_"
PROPERTIES (
"format" = "csv",
"column_separator" = ","
)
WITH HDFS (
"fs.defaultFS" = "hdfs://<namenode_host>:9000",
"hadoop.username" = "hadoop"
);SelectDB 实例与 HDFS 集群必须在同一 VPC 中。如使用阿里云 EMR,可在 EMR 集群「访问链接与端口」中获取 NameNode FQDN。
hadoop.username取值需与 HDFS 目标目录的写权限匹配,常用hadoop或hdfs。导出完成后,可通过
SELECT * FROM HDFS("uri"="hdfs://<namenode_host>:9000/path/to/tbl_*", ...)表函数反向校验写入内容。
查询导出任务
EXPORT 提交后立即返回,必须用 SHOW EXPORT 跟踪后续状态:
SHOW EXPORT FROM demo ORDER BY CreateTime DESC LIMIT 10;主要列含义:
State:任务进入 PENDING(排队)→ EXPORTING(执行中)→ FINISHED(完成)或 CANCELLED(被取消/失败)。
Progress:百分比进度。
Path:用户提交的目标前缀。
OutfileInfo:FINISHED 后填充,列出每个输出文件的行数、字节数和最终 URL。
ErrorMsg:失败时的错误信息,可据此排查权限、路径或网络问题。
取消导出任务
在 PENDING 或 EXPORTING 阶段可以撤销作业,常见用法是按 Label 模式匹配:
CANCEL EXPORT FROM demo WHERE LABEL like "%export_%";导出示例
导出到开启高可用的 HDFS 集群
HA 模式下需要把 nameservices 与各 NameNode 的 RPC 地址都写在 WITH HDFS 中。dfs.nameservices 的值必须与 fs.defaultFS 中的逻辑名一致,否则会报 Missing property: dfs.namenode.rpc-address.* (expected format: host:port):
EXPORT TABLE demo.tbl TO "hdfs://my-ns/path/to/tbl_"
PROPERTIES (
"line_delimiter" = ","
)
WITH HDFS (
"fs.defaultFS" = "hdfs://my-ns",
"hadoop.username" = "hadoop",
"dfs.nameservices" = "my-ns",
"dfs.ha.namenodes.my-ns" = "nn1,nn2",
"dfs.namenode.rpc-address.my-ns.nn1" = "nn1-host:8020",
"dfs.namenode.rpc-address.my-ns.nn2" = "nn2-host:8020",
"dfs.client.failover.proxy.provider.my-ns" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
);导出到开启高可用与 Kerberos 认证的 HDFS 集群
EXPORT TABLE demo.tbl TO "hdfs://hacluster/path/to/tbl_"
PROPERTIES (
"line_delimiter" = ","
)
WITH HDFS (
"fs.defaultFS" = "hdfs://hacluster/",
"hadoop.username" = "hadoop",
"dfs.nameservices" = "hacluster",
"dfs.ha.namenodes.hacluster" = "n1,n2",
"dfs.namenode.rpc-address.hacluster.n1" = "192.168.0.1:8020",
"dfs.namenode.rpc-address.hacluster.n2" = "192.168.0.2:8020",
"dfs.client.failover.proxy.provider.hacluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
"dfs.namenode.kerberos.principal" = "hadoop/_HOST@REALM.COM",
"hadoop.security.authentication" = "kerberos",
"hadoop.kerberos.principal" = "doris_test@REALM.COM",
"hadoop.kerberos.keytab" = "/path/to/doris_test.keytab"
);指定分区导出
仅导出 test 表的 p1、p2 分区,并通过 columns 限定输出列:
EXPORT TABLE demo.test
PARTITION (p1, p2)
TO "oss://<your_bucket>/export/test_"
PROPERTIES (
"columns" = "k1,k2"
)
WITH S3 (
"s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
"s3.region" = "oss-cn-hangzhou",
"s3.access_key" = "<your_access_key_id>",
"s3.secret_key" = "<your_access_key_secret>"
);导出时按条件过滤数据
仅导出满足 k1 < 50 的行,并自定义列分隔符:
EXPORT TABLE demo.test
WHERE k1 < 50
TO "oss://<your_bucket>/export/test_"
PROPERTIES (
"columns" = "k1,k2",
"column_separator" = ","
)
WITH S3 (
"s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
"s3.region" = "oss-cn-hangzhou",
"s3.access_key" = "<your_access_key_id>",
"s3.secret_key" = "<your_access_key_secret>"
);导出外表数据
先注册一个 Hive Catalog,再用「catalog.库.表」三段式名称提交导出:
-- 1. 创建 Hive Catalog
CREATE CATALOG hive_catalog PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://hms_host:9083'
);
-- 2. 导出 Catalog 下的 Hive 表
EXPORT TABLE hive_catalog.sf1.lineitem TO "oss://<your_bucket>/export/lineitem_"
PROPERTIES (
"format" = "csv",
"max_file_size" = "1024MB"
)
WITH S3 (
"s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
"s3.region" = "oss-cn-hangzhou",
"s3.access_key" = "<your_access_key_id>",
"s3.secret_key" = "<your_access_key_secret>"
);设置导出文件大小
通过 max_file_size 控制单个输出文件的大小上限,超出阈值会自动切分为多个文件:
EXPORT TABLE demo.test TO "oss://<your_bucket>/export/test_"
PROPERTIES (
"format" = "parquet",
"max_file_size" = "512MB"
)
WITH S3 (
"s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
"s3.region" = "oss-cn-hangzhou",
"s3.access_key" = "<your_access_key_id>",
"s3.secret_key" = "<your_access_key_secret>"
);max_file_size 取值范围 5 MB ~ 2 GB;下游处理器(如 Spark、Flink)通常对超大文件不够友好,建议留在 256 MB ~ 1 GB 之间。
导出前清空导出目录
将 delete_existing_files 设为 true,导出会先把目标前缀下的所有文件和子目录清空,再写入新数据:
EXPORT TABLE demo.test TO "oss://<your_bucket>/export/test_"
PROPERTIES (
"format" = "parquet",
"max_file_size" = "512MB",
"delete_existing_files" = "true"
)
WITH S3 (
"s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",
"s3.region" = "oss-cn-hangzhou",
"s3.access_key" = "<your_access_key_id>",
"s3.secret_key" = "<your_access_key_secret>"
);该参数会真实删除外部存储中的数据。云数据库 SelectDB 版默认禁用,未额外开启时直接执行会报 Deleting existing files is not allowed. To enable this feature, you need to add `enable_delete_existing_files=true` in fe.conf。如确需启用,请提交工单联系技术支持,并自行确认目标存储的数据安全。
注意事项
导出数据量
单个 EXPORT 任务建议控制在数十 GB 以内。任务规模越大,失败重试时遗留的孤儿文件越多,扫描动作也会增加 IO 负载,可能挤占在线查询。数据量较大时按分区分多次导出。
失败时的中间文件
EXPORT 失败后已写入的中间文件不会自动清理,需要您在外部存储侧手动删除,避免后续重跑时产生混淆。
超时
作业默认有超时窗口,数据量超大时可能在窗口结束时被判失败。可在 PROPERTIES 中提高
timeout后重新提交。FE 重启或主备切换
运行中的 EXPORT 任务如果赶上 FE 重启或 Master 切换,会被标记为失败,需要重新提交。
导出后校验
建议导出完成后将输出文件的总行数与源表对照,确认没有部分写入或文件缺失。