更新时间:2022-08-12 GMT+08:00

导出查询结果

功能描述

INSERT OVERWRITE DIRECTORY用于将查询结果直接写入到指定的目录,支持按CSV、Parquet、ORC、CARBON、JSON、Avro格式进行存储。

语法格式

1
2
3
4
INSERT OVERWRITE DIRECTORY path
  USING file_format
  [OPTIONS(key1=value1)]
  select_statement;

关键字

  • USING:指定所存储格式。
  • OPTIONS:导出时的属性列表,为可选项。

参数

表1 INSERT OVERWRITE DIRECTORY参数描述

参数

描述

path

要将查询结果写入的OBS路径。

file_format

写入的文件格式,支持按CSV、Parquet、ORC、CARBON、JSON、Avro格式。

file_format为csv时,options参数可以参考表3

注意事项

  • 通过配置“spark.sql.shuffle.partitions”参数可以设置非DLI表在OBS桶中插入的文件个数,同时,为了避免数据倾斜,在INSERT语句后可加上“distribute by rand()”,可以增加处理作业的并发量。例如:
    insert into table table_target select * from table_source distribute by cast(rand() * N as int);
  • 配置项为OPTIONS('DELIMITER'=',')时,可以指定分隔符,默认值为“,”

    对于CSV数据,支持如下所述分隔符:

    • 制表符tab,例如:'DELIMITER'='\t'。
    • 任意的二进制字符,例如:'DELIMITER'='\u0001(^A)'。
    • 单引号('),单引号必须在双引号(" ")内。例如:'DELIMITER'= "'"。
    • DLI表还支持\001(^A)和\017(^Q),例如:'DELIMITER'='\001(^A)','DELIMITER'='\017(^Q)'。

示例

1
2
3
4
INSERT OVERWRITE DIRECTORY 'obs://bucket/dir'
  USING csv
  OPTIONS(key1=value1)
  select * from db1.tb1;