全量数据导出
全量数据导出(Export)是 PALO 提供的一种将数据导出的功能。
该功能可以将用户指定的表或分区的数据,以文本的格式,通过 Broker 进程导出到远端存储上,如 HDFS/BOS 等。
本文档主要介绍 Export 功能的基本使用方式。
功能介绍
Export 功能是一个异步执行的作业。用户通过 Export 语句指定需要导出的表或者表中某些分区后,系统将生成分布式数据扫描计划,由多个 Compute Node 节点共同完成数据扫描读取的工作,并通过 Broker 进程写到远端存储上。
导出功能的最小粒度是表的分区。
目前的导出功能较为简单,仅支持对表进行全列导出,不支持对表中列进行映射、转换和过滤操作。
提交导出作业
通过如下语句提交一个导出作业
EXPORT TABLE example_tbl
PARTITION(p1, p2)
TO "bos://my_bucket/export/"
WITH BROKER "bos"
(
"bos_endpoint" = "http://bj.bcebos.com",
"bos_accesskey" = "xxxxxxxxxxxxxxxxxxxxxxxxxx",
"bos_secret_accesskey"="yyyyyyyyyyyyyyyyyyyy"
);
该语句指定将 example_tbl
表的 p1
,p2
两个分区导出到 BOS 的 bos://my_bucket/export/
目录下。
导出命令的详细帮助,请参阅 EXPORT。
导出作业的执行
导出作业会生成多个查询计划,每个查询计划负责扫描一部分数据分片(Tablet)。
每个查询计划默认扫描 5 个 Tablet。即假设一共 100 个 Tablet,则会生成 20 个查询计划。
用户也可以在提交作业时,通过作业属性 tablet_num_per_task
指定这个数值。
一个作业的多个查询计划顺序执行。
一个查询计划扫描多个分片,将读取的数据以行的形式组织,每 1024 行为一个批次,调用 Broker 写入到远端存储上。
查询计划遇到错误会整体自动重试 3 次。如果一个查询计划重试 3 次依然失败,则整个作业失败。
导出文件的结构
导出作业会首先在指定的远端存储的路径中,建立一个名为 __doris_export_tmp_12345
的临时目录(其中 12345
为作业 id)。
导出的数据首先会写入这个临时目录。每个查询计划会生成一个文件,文件名示例:
export-data-c69fcf2b6db5420f-a96b94c1ff8bccef-1561453713822
其中 c69fcf2b6db5420f-a96b94c1ff8bccef
为查询计划的 ID。1561453713822
为文件生成的时间戳。
当所有数据都导出后,PALO 会将这些文件移动到用户指定的路径中。
查看作业进度
提交作业后,可以通过 SHOW EXPORT 命令查询导入作业状态。结果举例如下:
JobId: 14008
State: FINISHED
Progress: 100%
TaskInfo: {"partitions":["p1", "p2"],"exec mem limit":2147483648,"column separator":",","line delimiter":"\n","tablet num":1,"broker":"hdfs","coord num":1,"db":"default_cluster:db1","tbl":"tbl3"}
Path: bos://my_bucket/export/
CreateTime: 2019-06-25 17:08:24
StartTime: 2019-06-25 17:08:28
FinishTime: 2019-06-25 17:08:34
Timeout: 3600
ErrorMsg: N/A
当作业状态为 FINISHED 时,即表示导出完成。
关于 SHOW EXPORT 的详细帮助,请参阅:SHOW EXPORT。