Doris的数据导出
背景
我们在用业务需求的时候,有时需要把 doris 里的数据查询出来给到下游团队。当数据量很大的时候往往不能直接返回数据。我们采用了将结果文件放到 OSS,然后将 OSS 的路径返回,让下游团队自己去 OSS 上面下载。我们今天就来看看怎么将Doris的数据导出到OSS中去。
导出实战
官方文档上面阐述了 Doris 的导出支持两种方式:
- S3 协议
- HDFS 协议
我们的项目里没有使用 HDFS,有引入成本。就选择了通过 S3 协议导出到阿里云的 OSS 上。
导出的语法如下:
select k1 from tb1 limit 1000
into outfile "s3://my_bucket/export/my_file_"
format as csv
properties
(
"AWS_ENDPOINT" = "http://s3.bd.bcebos.com",
"AWS_ACCESS_KEY" = "xxxx",
"AWS_SECRET_KEY" = "xxx",
"AWS_REGION" = "bd"
)
说明:
file_path
filepath 我们指定文件路径和文件名前缀即可。最终的文件名由我们写的内容的最后一部分+文件序号+文件格式后缀组成。
如,我填的是"s3://moude/test/userdata",最终的文件名示例:user_data_5371f31f24694f76-beef5d5dca0c6a12_0.csv
format
format_as FORMAT AS CSV 指定导出格式. 支持 csv、parquet、csv_with_names、csv_with_names_and_types. 默认为 CSV
properties
语法:
[PROPERTIES ("key"="value", ...)] 支持如下属性: column_separator: 列分隔符 line_delimiter: 行分隔符 max_file_size: 单个文件大小限制,如果结果超过这个值,将切割成多个文件。
Broker 相关属性需加前缀 broker.
:
broker.name: broker 名称
broker.hadoop.security.authentication: 指定认证方式为 kerberos
broker.kerberos_principal: 指定 kerberos 的 principal
broker.kerberos_keytab: 指定 kerberos 的 keytab 文件路径。该文件必须为 Broker 进程所在服务器上的文件的绝对路径。并且可以被 Broker 进程访问
HDFS 相关属性: fs.defaultFS: namenode 地址和端口 hadoop.username: hdfs 用户名 dfs.nameservices: name service 名称,与 hdfs-site.xml 保持一致 dfs.ha.namenodes.[nameservice ID]: namenode 的 id 列表,与 hdfs-site.xml 保持一致 dfs.namenode.rpc-address.[nameservice ID].[name node ID]: Name node 的 rpc 地址,数量与 namenode 数量相同,与 hdfs-site.xml 保
示例:
SELECT * FROM tbl
INTO OUTFILE "hdfs://path/to/result_"
FORMAT AS CSV
PROPERTIES
(
"broker.name" = "my_broker",
"broker.hadoop.security.authentication" = "kerberos",
"broker.kerberos_principal" = "doris@YOUR.COM",
"broker.kerberos_keytab" = "/home/doris/my.keytab",
"column_separator" = ",",
"line_delimiter" = "\n",
"max_file_size" = "100MB"
);
可以看到除了我们本身的 sql 而外,还需要提供一些信息。接下来我们一个个来找。
- ENDPOINT 地址和 REGION
可以去到这个地址:help.aliyun.com/document_de… 找到你对应的地区的 Endpoint 地址。
我这里是华东 1 的。
我对应的地址和 REGION 是 oss-cn-hangzhou 和 oss-cn-hangzhou.aliyuncs.com
- AWS_ACCESS_KEY 和 AWS_SECRET_KEY
点击进去就能看到你的 ACCESS_KYE 了
- 导出路径
s3://my_bucket/export/my_file_
s3 是协议名,my_bucket 是 bucket 名称,替换成自己的 bucket 名称就行了。
都准备好之后我们导出试试:
SELECT * FROM table1 INTO OUTFILE "s3://moude/test/user_data_"
FORMAT AS CSV
properties
(
"AWS_ENDPOINT" = "http://oss-cn-hangzhou.aliyuncs.com",
"AWS_ACCESS_KEY" = "LTAI5tDE****bdG2mKZpf7P",
"AWS_SECRET_KEY" = "J2Ta0JpJq****ClumP7jrxGlRGJo",
"AWS_REGION" = "oss-cn-hangzhou",
"column_separator" = ","
)
300 多 w 的数据大概 5s 的时间导出到了 oss 上。
就这样就导出成功拉,导出的文件样式如下:
本文正在参加「金石计划 . 瓜分6万现金大奖」