
# 导出查询结果
#### 功能描述
INSERT OVERWRITE DIRECTORY用于将查询结果直接写入到指定的目录，支持按CSV、Parquet、ORC、JSON、Avro格式进行存储。
#### 语法格式
```
INSERT OVERWRITE DIRECTORY path
  USING file_format
  [OPTIONS(key1=value1)]
  select_statement;
```
#### 关键字
- USING：指定所存储格式。
- OPTIONS：导出时的属性列表，为可选项。
 
#### 参数
表1INSERT OVERWRITE DIRECTORY参数描述 
| **参数**      | **描述**                                  |
|:---|:---|
| path        | 要将查询结果写入的OBS路径。                         |
| file_format | 写入的文件格式，支持按CSV、Parquet、ORC、JSON、Avro格式。 |
   
#### 注意事项
- 通过配置"spark.sql.shuffle.partitions"参数可以设置非Managed表在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'= "'"。
   
 
#### 示例
```
INSERT OVERWRITE DIRECTORY 'obs://bucket/dir'
  USING csv
  OPTIONS(key1=value1)
  select * from db1.tb1;
```
