Doris系列19-查询结果集导出

2022-01-14  本文已影响0人  只是甲

一. 查询结果导出概述

语法:
SELECT INTO OUTFILE 语句可以将查询结果导出到文件中。目前支持通过 Broker 进程, 通过 S3 协议, 或直接通过 HDFS 协议,导出到远端存储,如 HDFS,S3,BOS,COS(腾讯云)上。语法如下

query_stmt
INTO OUTFILE "file_path"
[format_as]
[properties]
  1. file_path
    file_path 指向文件存储的路径以及文件前缀。如 hdfs://path/to/my_file_
    最终的文件名将由 my_file_,文件序号以及文件格式后缀组成。其中文件序号由0开始,数量为文件被分割的数量。如:
my_file_abcdefg_0.csv
my_file_abcdefg_1.csv
my_file_abcdegf_2.csv
  1. [format_as]
FORMAT AS CSV

指定导出格式。默认为 CSV。

  1. [properties]
    指定相关属性。目前支持通过 Broker 进程, 或通过 S3 协议进行导出。
    3.1) Broker 相关属性需加前缀 broker.。
    3.2) HDFS 相关属性需加前缀 hdfs. 其中 hdfs.fs.defaultFS 用于填写 namenode 地址和端口。属于必填项。。
    3.3) S3 协议则直接执行 S3 协议配置即可。
("broker.prop_key" = "broker.prop_val", ...)
or
("hdfs.fs.defaultFS" = "xxx", "hdfs.hdfs_user" = "xxx")
or 
("AWS_ENDPOINT" = "xxx", ...)

其他属性:

("key1" = "val1", "key2" = "val2", ...)

目前支持以下属性:

  1. column_separator:列分隔符,仅对 CSV 格式适用。默认为 \t。
  2. line_delimiter:行分隔符,仅对 CSV 格式适用。默认为 \n。
  3. max_file_size:单个文件的最大大小。默认为 1GB。取值范围在 5MB 到 2GB 之间。超过这个大小的文件将会被切分。
  4. schema:PARQUET 文件schema信息。仅对 PARQUET 格式适用。导出文件格式为PARQUET时,必须指定schema。

二. 并发导出

默认情况下,查询结果集的导出是非并发的,也就是单点导出。如果用户希望查询结果集可以并发导出,需要满足以下条件:

  1. session variable 'enable_parallel_outfile' 开启并发导出: set enable_parallel_outfile = true;
  2. 导出方式为 S3 , 或者 HDFS, 而不是使用 broker
  3. 查询可以满足并发导出的需求,比如顶层不包含 sort 等单点节点。(后面会举例说明,哪种属于不可并发导出结果集的查询)

满足以上三个条件,就能触发并发导出查询结果集了。并发度 = be_instacne_num * parallel_fragment_exec_instance_num

三. 案例

导出命令:

SELECT * FROM example_db.kafka_test1
INTO OUTFILE "hdfs://10.31.1.123:8020/tmp/result_"
FORMAT AS CSV
PROPERTIES
(
    "broker.name" = "broker_name",
    "column_separator" = ",",
    "line_delimiter" = "\n",
    "max_file_size" = "100MB"
);
image.png image.png

参考:

  1. https://doris.apache.org/master/zh-CN/administrator-guide/outfile.html#%E8%AF%AD%E6%B3%95
上一篇 下一篇

猜你喜欢

热点阅读