如何将Doris的数据导出到OSS

882 阅读2分钟

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 而外,还需要提供一些信息。接下来我们一个个来找。

  1. ENDPOINT 地址和 REGION

可以去到这个地址:help.aliyun.com/document_de… 找到你对应的地区的 Endpoint 地址。

我这里是华东 1 的。

我对应的地址和 REGION 是 oss-cn-hangzhou 和 oss-cn-hangzhou.aliyuncs.com

  1. AWS_ACCESS_KEY 和 AWS_SECRET_KEY

点击进去就能看到你的 ACCESS_KYE 了

  1. 导出路径
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万现金大奖」