Doris进阶——数据导出

Export导出

Doris提供了一种数据导出功能,可以将数据(可指定分区)的数据以文本的格式进行导出,可以通过Broker进程将数据导出到HDFS或者其他远端存储系统中。

基本原理:

  • Doris在提交一个Export任务后,首先FE会向BE发送snapshot命令,将所涉及到的所有Tablet进行snapshot,然后生成多个查询计划,并开始执行。
  • 每个查询计划负责扫描一部分Tablet,可以通过FE参数进行配置:export_tablet_num_per_task = 5(默认)
  • 然后以行的形式进行组织,1024行数据为一个bach ,然后通过broker的方式输出到外内部存储系统HDFS等。
  • 整个导出任务会重复3次,如果3次全部失败那么这一次导出任务将失败。
  • Doris首先会在外部存储系统中创建一个临时目录,数据完全导出后,然后再将导出的数据放入指定的路径下。

语法:

-- 例如导出到HDFS上
EXPORT TABLE db1.tbl1  -- 指定对应的库名和表名
PARTITION (p1,p2) -- 指定导出的分区
[WHERE [expr]] 
TO "hdfs://host/path/to/export/"  -- 导出路径
PROPERTIES
(
	"label" = "mylabel", -- 任务名
    "column_separator"=",", -- 分隔符
    "columns" = "col1,col2", -- 列名
    "exec_mem_limit"="2147483648", --单个查询计划的内存使用限制
    "timeout" = "3600" --超时时间
)
WITH BROKER "hdfs" -- broker名
(
	"username" = "user", 
	"password" = "passwd"
);

示例:

-- 将数据导出到HDFS上,且HDFS是HA模式
export table test.student
to "hdfs://doit01:8020/doris-export"
PROPERTIES
(
	"label" = "mylabel",
    "column_separator"=",",
    "timeout" = "3600"
)
WITH BROKER "broker_name"
(
  #HDFS开启HA需要指定,还指定其他参数
  "dfs.nameservices"="mycluster",
  "dfs.ha.namenodes.mycluster"="nn1,nn2,nn3",
  "dfs.namenode.rpc-address.mycluster.nn1"= "test1:8020",
  "dfs.namenode.rpc-address.mycluster.nn2"= "test2:8020",
  "dfs.namenode.rpc-address.mycluster.nn3"="test3:8020",
"dfs.client.failover.proxy.provider.mycluster"="org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"          
);

Doris进阶——数据导出_第1张图片

注意:

  • Export导出任务会占用IO资源导致查询效率降低
  • 如果表的数据量太大建议分区导出,否则可能会产生很多的垃圾文件,也会导致重试成本的增加
  •  Export任务执行时FE节点出现问题进行重启,Export任务也会随之失败

查询结果导出:

通过broker的方式直接将查询结果通过:SELECT INTO OUTFILE 进行导出

示例:

-- 通过broker的方式将查询结果进行导出
SELECT * FROM students
INTO OUTFILE "hdfs://test01:8020/doris-out/" -- 指定导出外部存储系统的地址
FORMAT AS CSV -- 导出格式
PROPERTIES
(
    "broker.name" = "broker_name", -- broker名
    "column_separator" = ",",
    "line_delimiter" = "\n",
    "max_file_size" = "100MB" --导出最大的单个文件不超过100M
);

-- 导出parquet格式,导出到HDFS
SELECT city, age FROM students
INTO OUTFILE "hdfs://test01:8020/doris-out/"
FORMAT AS PARQUET
PROPERTIES
(
"broker.name" = "broker_name",
"schema"="required,int32,id;required,byte_array,name" -- 导出parquet需指定schema
);

并发导出:

  • 在默认的情况下数据集的导出时单点导出,可以设置并发导出:set enable_parallel_outfile = true;
  • 导出方式为HDFS、S3,broker不用指定,broker本身就是并发执行的
  • 查看是否并发导出成功,使用explain 查看执行计划图,在PLAN FRAGMENT 1中就证明导出成功,否则就导出失败,该查询不满足并发导出

使用HDFS进行导出:

示例:

set enable_parallel_outfile = true; -- 开启并发导入
EXPLAIN SELECT * FROM example_site_visit
INTO OUTFILE "hdfs://doris-out/"
FORMAT AS CSV
PROPERTIES
(
    "hdfs.fs.defaultFS" = "hdfs://test01:8020",
"hdfs.hdfs_user" = "root",
"column_separator" = ","
);

详细导出,看Doris官网:Doris官网

你可能感兴趣的:(Doris,笔记,big,data,大数据,database,数据库)