
# 推荐CSV格式
[CSV格式](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0531.html#ZH-CN_TOPIC_0000002527826192__zh-cn_topic_0000002526895770_li199515274910)通过换行符将整个文件划分为多条记录，再通过分隔符（[delimiter](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0531.html#ZH-CN_TOPIC_0000002527826192__zh-cn_topic_0000002526895770_li191821351213)，默认值为逗号','）将每条记录划分为多个字段，每一个字段可以通过封闭符（[quote](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0531.html#ZH-CN_TOPIC_0000002527826192__zh-cn_topic_0000002526895770_li1095162714910)，默认值为引号'"'）包裹起来。通过这种方式，无需对特殊字符进行转义，即可解决字段内容中出现的行结束符和分隔符等特殊字符问题。同时它是一项通用标准，具备跨平台兼容性和行业普适性，所以优先推荐采用该格式。
导出命令：
```
--data_source可以是一个表名称，也可以是一个select语句。
--server_encoding 可以通过show server_encoding获得。
COPY {data_source} TO '/path/export.csv' delimiter ',' quote '"' escape '"' ENCODING {server_encoding} CSV;
```
导入命令：
```
--data_destination只能是一个表名称。
--file_encoding为该文件导出时指定的编码格式。
COPY {data_destination} FROM '/path/export.csv' delimiter ',' quote '"' escape '"' ENCODING {file_encoding} CSV;
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
若用户自行生成CSV数据文件并导入数据库，需确保数据文件严格遵循CSV格式的标准规范，同时保证在使用COPY命令时，传入的分隔符、封闭符、行结束符等参数准确无误。
#### 示例
1. 数据准备。 
   ```
   gaussdb=# CREATE DATABASE db1 ENCODING='UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE ='en_US.UTF-8' DBCOMPATIBILITY = 'ORA';
   CREATE DATABASE
   gaussdb=# \c db1
   Non-SSL connection (SSL connection is recommended when requiring high-security)
   You are now connected to database "db1" as user "omm".
   db1=# CREATE TABLE test_copy(id int, name text);
   NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default.
   HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
   CREATE TABLE
   db1=# INSERT INTO test_copy VALUES(1, 'aaa');
   INSERT 0 1
   db1=# INSERT INTO test_copy VALUES(2, e'bb\nb');
   INSERT 0 1
   db1=# INSERT INTO test_copy VALUES(3, e'cc\tc');
   INSERT 0 1
   db1=# INSERT INTO test_copy(name) VALUES('ddd');
   INSERT 0 1
   db1=# INSERT INTO test_copy VALUES(5, e'ee\\e');
   INSERT 0 1
   db1=# INSERT INTO test_copy VALUES(6, ',');
   INSERT 0 1
   db1=# INSERT INTO test_copy VALUES(7, '"');
   INSERT 0 1
   db1=#  SELECT * FROM test_copy;
    id |   name    
   ----+-----------
     1 | aaa
     2 | bb       +
       | b
     3 | cc      c
       | ddd
     5 | ee\e
     6 | ,
     7 | "
   (7 rows)
   ```
   
   
2. 整表数据导出。 
   ```
   db1=# COPY test_copy TO '/home/xy/test.csv' 
       DELIMITER ',' 
       QUOTE '"' 
       ESCAPE '"' 
       ENCODING 'UTF-8' 
       CSV;
   COPY 7
   ```
   导出的CSV文件内容如下所示：
   ```
   1,aaa
   2,"bb
   b"
   3,ccc
   ,ddd
   5,ee\e
   6,","
   7,""""
   ```
   
   
3. 数据导入。 
   ```
   db1=# TRUNCATE test_copy;
   TRUNCATE TABLE
   db1=# COPY test_copy FROM '/home/xy/test.csv' 
       DELIMITER ',' 
       QUOTE '"' 
       ESCAPE '"' 
       ENCODING 'UTF-8' 
       CSV;
   COPY 7
   ```
   
   
4. 自定义数据集导出：导出test_copy中id不为空所有行的name列。 
   ```
   db1=# COPY (SELECT name FROM test_copy WHERE id IS NOT NULL) 
       TO '/home/xy/test.csv' 
       DELIMITER ',' 
       QUOTE '"' 
       ESCAPE '"' 
       ENCODING 'UTF-8' 
       CSV;
   COPY 6
   ```
   导出的CSV文件内容如下所示：
   ```
   aaa
   "bb
   b"
   ccc
   ee\e
   ","
   """"
   ```
   
   
 
