导出查询结果集
更新时间:2022-09-13
本文档介绍如何使用 SELECT INTO OUTFILE
命令进行查询结果的导出操作。
功能介绍
SELECT INTO OUTFILE
语句可以将查询结果导出到文件中。
目前支持通过 Broker 进程导出到远端存储,如 HDFS,S3,BOS 上。或者直接导出到 Compute Node 所在节点的本地磁盘上(云上用户不支持)。
用户可以通过这个命令,借助灵活的 SQL 语法,将期望的查询结果进行导出。
执行导出命令
SELECT INTO OUTFILE
本质上是一个同步的 SQL 查询命令。因此受到会话变量 query_timeout
的超时限制。如果导出较大结果集或 SQL 本身执行时间较长时,请先设置合理的超时时间。
-
导出到 BOS
SQL1SELECT * FROM example_tbl 2INTO OUTFILE "bos://my_bucket/result_" 3FORMAT AS CSV 4PROPERTIES 5( 6 "broker.name" = "bos", 7 "broker.bos_endpoint" = "http://bj.bcebos.com", 8 "broker.bos_accesskey" = "xxxxxxxxxxxxxxxxxxxxxxxxxx", 9 "broker.bos_secret_accesskey" = "yyyyyyyyyyyyyyyyyyyyyyyyyy" 10 "column_separator" = ",", 11 "line_delimiter" = "\n", 12 "max_file_size" = "100MB" 13);
以上命令将 SQL 语句
SELECT * FROM example_tbl
的结果导出到 BOS 上。 -
导出到 Compute Node 节点的本地磁盘
SQL1SELECT * FROM example_tbl 2INTO OUTFILE "file:///home/work/path/result_" 3FORMAT AS CSV 4PROPERTIES 5( 6 "column_separator" = ",", 7 "line_delimiter" = "\n", 8 "max_file_size" = "100MB" 9);
以上命令会将结果导出到某一个 Compute Node 节点的指定磁盘路径上。
公有云 PALO 用户因无法直接访问节点,因此不支持导出到本地磁盘的功能。
-
导出到 BOS,并在成功后生成一个标识文件。
SQL1SELECT * FROM example_tbl 2INTO OUTFILE "bos://my_bucket/result_" 3FORMAT AS CSV 4PROPERTIES 5( 6 "broker.name" = "bos", 7 "broker.bos_endpoint" = "http://bj.bcebos.com", 8 "broker.bos_accesskey" = "xxxxxxxxxxxxxxxxxxxxxxxxxx", 9 "broker.bos_secret_accesskey" = "yyyyyyyyyyyyyyyyyyyyyyyyyy" 10 "column_separator" = ",", 11 "line_delimiter" = "\n", 12 "max_file_size" = "100MB", 13 "success_file_name" = "SUCCESS" 14);
以上命令将 SQL 语句
SELECT * FROM example_tbl
的结果导出到 BOS 上。并会在成功后,创建一个result_SUCCESS
的空文件标识。用户可以通过这个标识,来判断导出是否完成。
关于语句的详细说明,请参阅 SELECT INTO OUTFILE。
查看返回结果
导出命令为同步命令。命令返回,即表示操作结束。同时会返回一行结果来展示导出的执行结果。
如果正常导出并返回,则结果如下:
SQL
1mysql> select * from tbl1 limit 10 into outfile "file:///home/work/path/result_";
2+------------+-----------+----------+--------------+
3| FileNumber | TotalRows | FileSize | URL |
4+------------+-----------+----------+--------------+
5| 1 | 2 | 8 | 192.168.1.10 |
6+------------+-----------+----------+--------------+
71 row in set (0.05 sec)
- FileNumber:最终生成的文件个数。
- TotalRows:结果集行数。
- FileSize:导出文件总大小。单位字节。
- URL:如果是导出到本地磁盘,则这里显示具体导出到哪个 Compute Node。
如果执行错误,则会返回错误信息,如:
SQL
1mysql> SELECT * FROM tbl INTO OUTFILE ...
2ERROR 1064 (HY000): errCode = 2, detailMessage = Open broker writer failed ...