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