Doris数据导出案例和注意事项
一、Doris数据导出到HDFS案例
1、创建Doris表并插入数据
#创建Doris表
CREATE TABLE IF NOT EXISTS example_db.export_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`timestamp` DATETIME NOT NULL COMMENT "数据灌入时间,精确到秒",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
`cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
`max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
`min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
ENGINE=OLAP
AGGREGATE KEY(`user_id`, `date`, `timestamp`, `city`, `age`, `sex`)
PARTITION BY RANGE(`date`)
(
PARTITION `p1` VALUES [("2017-10-01"),("2017-10-02")),
PARTITION `p2` VALUES [("2017-10-02"),("2017-10-03")),
PARTITION `p3` VALUES [("2017-10-03"),("2017-10-04"))
)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
#插入数据
insert into example_db.export_tbl values
(10000,"2017-10-01","2017-10-01 08:00:05","北京",20,0,"2017-10-01 06:00:00",20,10,10),
(10000,"2017-10-01","2017-10-01 09:00:05","北京",20,0,"2017-10-01 07:00:00",15,2,2),
(10001,"2017-10-01","2017-10-01 18:12:10","北京",30,1,"2017-10-01 17:05:45",2,22,22),
(10002,"2017-10-02","2017-10-02 13:10:00","上海",20,1,"2017-10-02 12:59:12",200,5,5),
(10003,"2017-10-02","2017-10-02 13:15:00","广州",32,0,"2017-10-02 11:20:00",30,11,11),
(10004,"2017-10-01","2017-10-01 12:12:48","深圳",35,0,"2017-10-01 10:00:15",100,3,3),
(10004,"2017-10-03","2017-10-03 12:38:20","深圳",35,0,"2017-10-03 10:20:22",11,6,6);
2、创建Export ,数据导出到 HDFS
EXPORT TABLE example_db.export_tbl
PARTITION (p1,p2,p3)
TO "hdfs://mycluster/export/"
PROPERTIES
(
"column_separator"=",",
"columns" = "user_id,date,timestamp,city,age,sex,last_visit_date,cost,max_dwell_time,min_dwell_time",
"exec_mem_limit"="2147483648",
"timeout" = "3600"
)
WITH BROKER "broker_name"
(
"username" = "root",
"password" = "",
"dfs.nameservices"="mycluster",
"dfs.ha.namenodes.mycluster"="node1,node2",
"dfs.namenode.rpc-address.mycluster.node1"="node1:8020",
"dfs.namenode.rpc-address.mycluster.node2"="node2:8020",
"dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
);
注意:任务导出后目前不支持取消导出。
3、查看任务
mysql> show export \G;
*************************** 1. row ***************************
JobId: 42452
Label: export_08629eeb-f48e-4f52-a03e-0af81410272a
State: EXPORTING
Progress: 0%
TaskInfo: {"partitions":["p1","p2","p3"],"exec mem limit":2147483648,"column separator":",","line delimiter":"\n","columns":"user_id,date,times
tamp,city,age,sex,last_visit_date,cost,max_dwell_time,min_dwell_time","tablet num":3,"broker":"broker_name","coord num":1,"db":"default_cluster:example_db","tbl":"export_tbl"} Path: hdfs://mycluster/export/
CreateTime: 2023-06-13 18:14:25
StartTime: 2023-06-13 18:14:28
FinishTime: NULL
Timeout: 3600
ErrorMsg: NULL
15 rows in set (0.02 sec)
4、查看导出结果
登录HDFS ,查看导出结果如下:
二、Doris数据导出到本地案例
1、配置 fe.conf
将Doris表数据通过select...into outfile方式导出到本地文件时需要先在各个FE节点的fe.conf文件中加入"enable_outfile_to_local=true",并重新启动Doris集群。
下面在node1-node5各个FE节点上配置fe.conf文件:
#node1-node5节点配置 fe.conf文件,加入配置
vim /software/doris-1.2.1/apache-doris-fe/conf/fe.conf
enable_outfile_to_local=true
2、Doris 数据导出到本地
与导出到HDFS不同的是导入到本地的目录需要预先创建出来,然后执行导出数据命令即可,这里说的本地是指BE节点,指定对应导出命令时不一定是在哪个BE节点进行导出,所以这里我们在所有BE节点创建导出路径
#创建/home/work/path路路径,在各个BE节点创建,node3-node5
mkdir -p /home/work/path
这里同样对Doris表"export_tbl"进行导出,这里将表中数据导出到BE节点的"/home/work/path/"目录下。
#在doris mysql客户端执行如下命令
select * from export_tbl limit 100
INTO OUTFILE "file:///home/work/path/result_";
三、注意事项
- 关于FE配置可以通过配置fe.conf实现 1. export_checker_interval_second :Export 作业调度器的调度间隔,默认为 5 秒。设置该参数需重启 FE。2. export_running_job_num_limit :正在运行的 Export 作业数量限制。如果超过,则作业将等待并处于 PENDING 状态。默认为 5,可以运行时调整。3. export_task_default_timeout_second :Export 作业默认超时时间。默认为 2 小时。可以运行时调整。4. export_tablet_num_per_task :一个查询计划负责的最大分片数。默认为 5。5. label :用户手动指定的 EXPORT 任务 label ,如果不指定会自动生成一个 label 。
- 不建议一次性导出大量数据。一个 Export 作业建议的导出数据量最大在几十 GB。过大的导出会导致更多的垃圾文件和更高的重试成本。
- 如果表数据量过大,建议按照分区导出。
- 在 Export 作业运行过程中,如果 FE 发生重启或切主,则 Export 作业会失败,需要用户重新提交。
- 如果 Export 作业运行失败,在远端存储中产生的 __doris_export_tmp_xxx 临时目录,以及已经生成的文件不会被删除,需要用户手动删除。
- 如果 Export 作业运行成功,在远端存储中产生的 __doris_export_tmp_xxx 目录,根据远端存储的文件系统语义,可能会保留,也可能会被清除。比如对象存储(支持S3协议)中,通过 rename 操作将一个目录中的最后一个文件移走后,该目录也会被删除。如果该目录没有被清除,用户可以手动清除。
- 当 Export 运行完成后(成功或失败),FE 发生重启或切主,则 SHOW EXPORT 展示的作业的部分信息会丢失,无法查看。
- Export 作业只会导出 Base 表的数据,不会导出 Rollup Index 的数据。
- Export 作业会扫描数据,占用 IO 资源,可能会影响系统的查询延迟。
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
版权归原作者 Lansonli 所有, 如有侵权,请联系我们删除。