OUTFILE

description

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

keyword

  1. OUTFILE