导出查询结果
功能描述
INSERT OVERWRITE DIRECTORY用于将查询结果直接写入到指定的目录,支持按CSV、Parquet、ORC、JSON、Avro格式进行存储。
语法格式
1 2 3 4 |
INSERT OVERWRITE DIRECTORY path USING file_format [OPTIONS(key1=value1)] select_statement; |
关键字
- USING:指定所存储格式。
- OPTIONS:导出时的属性列表,为可选项。
参数
参数 |
描述 |
---|---|
path |
要将查询结果写入的OBS路径。 |
file_format |
写入的文件格式,支持按CSV、Parquet、ORC、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'。
- 支持通过unicode编码指定分割符,例如:'DELIMITER'='\u0001'。
- 单引号('),单引号必须在双引号(" ")内。例如:'DELIMITER'= "'"。
示例
1 2 3 4 |
INSERT OVERWRITE DIRECTORY 'obs://bucket/dir' USING csv OPTIONS(key1=value1) select * from db1.tb1; |