OUTFILE
description
1. 该语句用于使用 `SELECT INTO OUTFILE` 命令将查询结果的导出为文件。目前支持通过 Broker 进程, 通过 S3 协议, 或直接通过 HDFS 协议,导出到远端存储,如 HDFS,S3,BOS,COS(腾讯云)上。
3. 语法:
4. query_stmt
5. INTO OUTFILE "file_path"
6. [format_as]
7. [properties]
9. 1. file_path
10. file_path 指向文件存储的路径以及文件前缀。如 `hdfs://path/to/my_file_`。
11. 最终的文件名将由 `my_file_`,文件序号以及文件格式后缀组成。其中文件序号由0开始,数量为文件被分割的数量。如:
12. my_file_abcdefg_0.csv
13. my_file_abcdefg_1.csv
14. my_file_abcdegf_2.csv
16. 2. format_as
17. FORMAT AS CSV
18. 指定导出格式。默认为 CSV。
21. 3. properties
22. 指定相关属性。目前支持通过 Broker 进程, 或通过 S3 协议进行导出。
24. 语法:
25. [PROPERTIES ("key"="value", ...)]
26. 支持如下属性:
27. column_separator: 列分隔符
28. line_delimiter: 行分隔符
29. max_file_size: 单个文件大小限制,如果结果超过这个值,将切割成多个文件。
31. Broker 相关属性需加前缀 `broker.`:
32. broker.name: broker名称
33. broker.hadoop.security.authentication: 指定认证方式为 kerberos
34. broker.kerberos_principal: 指定 kerberos 的 principal
35. broker.kerberos_keytab: 指定 kerberos 的 keytab 文件路径。该文件必须为 Broker 进程所在服务器上的文件的绝对路径。并且可以被 Broker 进程访问
37. HDFS 相关属性需加前缀 `hdfs.`:
38. hdfs.fs.defaultFS: namenode 地址和端口
39. hdfs.hdfs_user: hdfs 用户名
41. S3 协议则直接执行 S3 协议配置即可:
42. AWS_ENDPOINT
43. AWS_ACCESS_KEY
44. AWS_SECRET_KEY
45. AWS_REGION
example
1. 1. 使用 broker 方式导出,将简单查询结果导出到文件 `hdfs://path/to/result.txt`。指定导出格式为 CSV。使用 `my_broker` 并设置 kerberos 认证信息。指定列分隔符为 `,`,行分隔符为 `\n`。
2. SELECT * FROM tbl
3. INTO OUTFILE "hdfs://path/to/result_"
4. FORMAT AS CSV
5. PROPERTIES
6. (
7. "broker.name" = "my_broker",
8. "broker.hadoop.security.authentication" = "kerberos",
9. "broker.kerberos_principal" = "doris@YOUR.COM",
10. "broker.kerberos_keytab" = "/home/doris/my.keytab",
11. "column_separator" = ",",
12. "line_delimiter" = "\n",
13. "max_file_size" = "100MB"
14. );
15. 最终生成文件如如果不大于 100MB,则为:`result_0.csv`。
16. 如果大于 100MB,则可能为 `result_0.csv, result_1.csv, ...`。
18. 2. 将简单查询结果导出到文件 `hdfs://path/to/result.parquet`。指定导出格式为 PARQUET。使用 `my_broker` 并设置 kerberos 认证信息。
19. SELECT c1, c2, c3 FROM tbl
20. INTO OUTFILE "hdfs://path/to/result_"
21. FORMAT AS PARQUET
22. PROPERTIES
23. (
24. "broker.name" = "my_broker",
25. "broker.hadoop.security.authentication" = "kerberos",
26. "broker.kerberos_principal" = "doris@YOUR.COM",
27. "broker.kerberos_keytab" = "/home/doris/my.keytab",
28. "schema"="required,int32,c1;required,byte_array,c2;required,byte_array,c2"
29. );
30. 查询结果导出到parquet文件需要明确指定`schema`。
32. 3. 将 CTE 语句的查询结果导出到文件 `hdfs://path/to/result.txt`。默认导出格式为 CSV。使用 `my_broker` 并设置 hdfs 高可用信息。使用默认的行列分隔符。
33. WITH
34. x1 AS
35. (SELECT k1, k2 FROM tbl1),
36. x2 AS
37. (SELECT k3 FROM tbl2)
38. SELEC k1 FROM x1 UNION SELECT k3 FROM x2
39. INTO OUTFILE "hdfs://path/to/result_"
40. PROPERTIES
41. (
42. "broker.name" = "my_broker",
43. "broker.username"="user",
44. "broker.password"="passwd",
45. "broker.dfs.nameservices" = "my_ha",
46. "broker.dfs.ha.namenodes.my_ha" = "my_namenode1, my_namenode2",
47. "broker.dfs.namenode.rpc-address.my_ha.my_namenode1" = "nn1_host:rpc_port",
48. "broker.dfs.namenode.rpc-address.my_ha.my_namenode2" = "nn2_host:rpc_port",
49. "broker.dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
50. );
51. 最终生成文件如如果不大于 1GB,则为:`result_0.csv`。
52. 如果大于 1GB,则可能为 `result_0.csv, result_1.csv, ...`。
54. 4. 将 UNION 语句的查询结果导出到文件 `bos://bucket/result.txt`。指定导出格式为 PARQUET。使用 `my_broker` 并设置 hdfs 高可用信息。PARQUET 格式无需指定列分割符。
55. 导出完成后,生成一个标识文件。
56. SELECT k1 FROM tbl1 UNION SELECT k2 FROM tbl1
57. INTO OUTFILE "bos://bucket/result_"
58. FORMAT AS PARQUET
59. PROPERTIES
60. (
61. "broker.name" = "my_broker",
62. "broker.bos_endpoint" = "http://bj.bcebos.com",
63. "broker.bos_accesskey" = "xxxxxxxxxxxxxxxxxxxxxxxxxx",
64. "broker.bos_secret_accesskey" = "yyyyyyyyyyyyyyyyyyyyyyyyyy",
65. "schema"="required,int32,k1;required,byte_array,k2"
66. );
68. 5. 将 select 语句的查询结果导出到文件 `cos://${bucket_name}/path/result.txt`。指定导出格式为 csv。
69. 导出完成后,生成一个标识文件。
70. select k1,k2,v1 from tbl1 limit 100000
71. into outfile "s3a://my_bucket/export/my_file_"
72. FORMAT AS CSV
73. PROPERTIES
74. (
75. "broker.name" = "hdfs_broker",
76. "broker.fs.s3a.access.key" = "xxx",
77. "broker.fs.s3a.secret.key" = "xxxx",
78. "broker.fs.s3a.endpoint" = "https://cos.xxxxxx.myqcloud.com/",
79. "column_separator" = ",",
80. "line_delimiter" = "\n",
81. "max_file_size" = "1024MB",
82. "success_file_name" = "SUCCESS"
83. )
84. 最终生成文件如如果不大于 1GB,则为:`my_file_0.csv`。
85. 如果大于 1GB,则可能为 `my_file_0.csv, result_1.csv, ...`。
86. 在cos上验证
87. 1. 不存在的path会自动创建
88. 2. access.key/secret.key/endpoint需要和cos的同学确认。尤其是endpoint的值,不需要填写bucket_name。
90. 6. 使用 s3 协议导出到 bos,并且并发导出开启。
91. set enable_parallel_outfile = true;
92. select k1 from tb1 limit 1000
93. into outfile "s3://my_bucket/export/my_file_"
94. format as csv
95. properties
96. (
97. "AWS_ENDPOINT" = "http://s3.bd.bcebos.com",
98. "AWS_ACCESS_KEY" = "xxxx",
99. "AWS_SECRET_KEY" = "xxx",
100. "AWS_REGION" = "bd"
101. )
102. 最终生成的文件前缀为 `my_file_{fragment_instance_id}_`。
104. 7. 使用 s3 协议导出到 bos,并且并发导出 session 变量开启。
105. 注意:但由于查询语句带了一个顶层的排序节点,所以这个查询即使开启并发导出的 session 变量,也是无法并发导出的。
106. set enable_parallel_outfile = true;
107. select k1 from tb1 order by k1 limit 1000
108. into outfile "s3://my_bucket/export/my_file_"
109. format as csv
110. properties
111. (
112. "AWS_ENDPOINT" = "http://s3.bd.bcebos.com",
113. "AWS_ACCESS_KEY" = "xxxx",
114. "AWS_SECRET_KEY" = "xxx",
115. "AWS_REGION" = "bd"
116. )
118. 8. 使用 hdfs 方式导出,将简单查询结果导出到文件 `hdfs://path/to/result.txt`。指定导出格式为 CSV,用户名为work。指定列分隔符为 `,`,行分隔符为 `\n`。
119. SELECT * FROM tbl
120. INTO OUTFILE "hdfs://path/to/result_"
121. FORMAT AS CSV
122. PROPERTIES
123. (
124. "hdfs.fs.defaultFS" = "hdfs://ip:port",
125. "hdfs.hdfs_user" = "work"
126. );
127. 最终生成文件如如果不大于 100MB,则为:`result_0.csv`。
128. 如果大于 100MB,则可能为 `result_0.csv, result_1.csv, ...`。
keyword
1. OUTFILE