更新时间:2025-08-01 GMT+08:00

导出Doris查询结果集

本章节主要介绍如何使用SELECT INTO OUTFILE命令,将Doris查询结果集使用指定的文件格式导出到指定的存储系统中。

约束与限制

  • 导出命令不会检查文件及文件路径是否存在、是否会自动创建路径、或是否会覆盖已存在文件,由远端存储系统的语义决定。
  • 如果在导出过程中出现错误,可能会有导出文件残留在远端存储系统上,Doris不会清理这些文件,需要手动清理。
  • 导出命令的超时时间同查询的超时时间,可以通过SET query_timeout=xxx进行设置。
  • 对于结果集为空的查询,依然会产生一个大小为0的文件。
  • 文件切分会保证一行数据完整的存储在单一文件中,因此文件的大小并不严格等max_file_size。
  • 对于部分输出为非可见字符的函数,如BITMAP、HLL类型,输出为\N,即NULL。
  • 目前部分地理信息函数,如ST_Point的输出类型为VARCHAR,但实际输出值为经过编码的二进制字符,当前这些函数会输出乱码。对于地理函数,请使用ST_AsText进行输出。

语法介绍

<query_stmt>
INTO OUTFILE "file_path"
[format_as]
[properties]

其中:

  • “query_stmt”表示具体的查询语句。
  • “file_path”表示导出的文件的存储路径。
  • “format_as”表示指定导出格式,支持CSV、PARQUET、CSV_WITH_NAMES、CSV_WITH_NAMES_AND_TYPES、ORC,默认为CSV。

更多介绍请参见OUTFILE

查询结果导出示例​

  • 导出到HDFS​

    使用Broker方式将简单查询结果导出到文件“hdfs://path/tmp/result.txt”中,并指定导出格式为CSV。

    • 集群已启用Kerberos认证(安全模式)
      SELECT * FROM example_db.test_export_tbl
      INTO OUTFILE "hdfs://192.168.67.78:25000/tmp/result_"
      FORMAT AS CSV
      PROPERTIES
      (
      "broker.name" = "broker_192_168_67_78",
      "column_separator" = ",",
      "line_delimiter" = "\n",
      "max_file_size" = "100MB",
      "broker.hadoop.security.authentication" = "kerberos",
      "broker.kerberos_principal" = "doris/hadoop.hadoop.com@HADOOP.COM",
      "broker.kerberos_keytab" = "/home/omm/doris_keytab/doris.keytab",
      "broker.dfs.nameservices" = "hacluster",
      "broker.dfs.ha.namenodes.hacluster" = "37,36",
      "broker.dfs.namenode.rpc-address.hacluster.37" = "主NameNode实例IP地址:RPC端口号",
      "broker.dfs.namenode.rpc-address.hacluster.36" = "备NameNode实例IP地址:RPC端口号",
      "broker.dfs.client.failover.proxy.provider.hacluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
      );
    • 集群未启用Kerberos认证(普通模式)
      SELECT * FROM example_db.test_export_tbl
      INTO OUTFILE "hdfs://192.168.67.78:25000/tmp/result_"
      FORMAT AS CSV
      PROPERTIES
      (
      "broker.name" = "broker_192_168_67_78",
      "column_separator" = ",",
      "line_delimiter" = "\n",
      "max_file_size" = "100MB",
      "broker.username"="hdfs",
      "broker.password"="",
      "broker.dfs.nameservices" = "hacluster",
      "broker.dfs.ha.namenodes.hacluster" = "37,36",
      "broker.dfs.namenode.rpc-address.hacluster.37" = "主NameNode实例IP地址:RPC端口号",
      "broker.dfs.namenode.rpc-address.hacluster.36" = "备NameNode实例IP地址:RPC端口号",
      "broker.dfs.client.failover.proxy.provider.hacluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
      );
  • 导出到本地文件​

    导出到本地文件时需要先在“fe.conf”中配置enable_outfile_to_local=true。

    select * from tbl1 limit 10
    INTO OUTFILE "file:///home/work/path/result_";