一. 查询结果导出概述
语法:
SELECT INTO OUTFILE 语句可以将查询结果导出到文件中。目前支持通过 Broker 进程, 通过 S3 协议, 或直接通过 HDFS 协议,导出到远端存储,如 HDFS,S3,BOS,COS(腾讯云)上。语法如下
query_stmt
INTO OUTFILE "file_path"
[format_as]
[properties]
- 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
- [format_as]
FORMAT AS CSV
指定导出格式。默认为 CSV。
- [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", ...)
目前支持以下属性:
- column_separator:列分隔符,仅对 CSV 格式适用。默认为 \t。
- line_delimiter:行分隔符,仅对 CSV 格式适用。默认为 \n。
- max_file_size:单个文件的最大大小。默认为 1GB。取值范围在 5MB 到 2GB 之间。超过这个大小的文件将会被切分。
- schema:PARQUET 文件schema信息。仅对 PARQUET 格式适用。导出文件格式为PARQUET时,必须指定schema。
二. 并发导出
默认情况下,查询结果集的导出是非并发的,也就是单点导出。如果用户希望查询结果集可以并发导出,需要满足以下条件:
- session variable 'enable_parallel_outfile' 开启并发导出: set enable_parallel_outfile = true;
- 导出方式为 S3 , 或者 HDFS, 而不是使用 broker
- 查询可以满足并发导出的需求,比如顶层不包含 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
网友评论