导出查询结果集
所有文档

          数据仓库 Palo

          导出查询结果集

          本文档介绍如何使用 SELECT INTO OUTFILE 命令进行查询结果的导出操作。

          功能介绍

          SELECT INTO OUTFILE 语句可以将查询结果导出到文件中。

          目前支持通过 Broker 进程导出到远端存储,如 HDFS,S3,BOS 上。或者直接导出到 Compute Node 所在节点的本地磁盘上(云上用户不支持)。

          用户可以通过这个命令,借助灵活的 SQL 语法,将期望的查询结果进行导出。

          执行导出命令

          SELECT INTO OUTFILE 本质上是一个同步的 SQL 查询命令。因此受到会话变量 query_timeout 的超时限制。如果导出较大结果集或 SQL 本身执行时间较长时,请先设置合理的超时时间。

          1. 导出到 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 上。

          2. 导出到 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 用户因无法直接访问节点,因此不支持导出到本地磁盘的功能。

          3. 导出到 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 ...
          上一篇
          全量数据导出
          下一篇
          导出数据到外部表