金仓数据库KingbaseES中COPY TO的介绍(三)关键字:
KingbaseES、COPY、人大金仓
COPY TO的部分语法
COPY … TO …[ [ WITH ] ( option [, ...] ) ]
上一次,已经对COPT TO 的一些option进行介绍,接下来,介绍其余的一些option字段:
QUOTE
指定一个数据值被引用时使用的引用字符。默认是双引号。这必须是一个单一的单字节字符。只有使用 CSV 格式时才允许这个选项。
ESCAPE 'escape_character'
指定应该出现在一个匹配 QUOTE 值的数据字符之前的字符。默认和 QUOTE 值一样(这样如果引用字符出现在数据中,它会被双写)。这必须是一个单一的单字节字符。只有使用 CSV 格式时才允许这个选项。
FORCE_QUOTE { ( column_name [, ...] ) | * }
强制必须对每个指定列中的所有非 NULL 值使用引用。 NULL 输出不会被引用。如果指定了 * ,所有列的非 NULL 值都将被引用。只有在 COPY TO 中使用 CSV 格式时才允许 这个选项。
ENCODING 'encoding_name'
指定文件被以 ``encoding_name`` 编码。如果省略这个选项,将使用当前的客户端编码。
COPY TO的实例
- COPY table_name TO stdout WITH (QUOTE 'quote_character')
QUOTE选项用于指定用于引用文本字段的字符,当需要导出的数据包含分隔符时,可以通过设置QUOTE字段来确保这些字符能够正确地被识别为文本而不是分隔符或其他特殊标记。QUOTE可以设置为单引号、双引号或其他任何字符。
test=# select * from t1; a | b ---+----- 1 | a,b (1 row) test=# copy t1 to stdout with csv ; 1,"a,b" test=# copy t1 to stdout with csv quote '~'; 1,~a,b~ |
- COPY table_name TO stdout WITH ESCAPE 'escape_character'
ESCAPE选项用于指定在字段值中使用的转义字符。通常,在csv文件中,使用双引号将字段值包裹起来,已区分字段值与分隔符之间的界限,但是,当字段值本身包含引用字符时,就需要用转义字符对引用字符进行转义,避免被误解为字段的开始或结束。
test=# select * from t1; a | b ---+----- 1 | a,b 2 | c"d (2 rows) |
test=# copy t1 to stdout with csv escape E'\\'; 1,"a,b" 2,"c\"d" test=# copy t1 to stdout with csv escape E'\*'; 1,"a,b" 2,"c*"d" |
- COPY table_name TO stdout WITH FORCE_QUOTE { ( column_name [, ...] ) | * }
FORCE_QUOTE选项用于强制将字段的值用引号引起来,可以将指定列的值引起来,也可以利用*将表中所有的值用引号引起来。
test=# copy t1 to stdout with (format csv,force_quote *); "1","a,b" "2","c""d" test=# copy t1 to stdout with (format csv,force_quote (b)); 1,"a,b" 2,"c""d" |
- COPY table_name TO 'filename' WITH ENCODING 'encoding_name'
ENCODING选项支持在导出数据时指定编码格式
test=# copy t1 to stdout with encoding 'utf8'; 1 a,b 2 c"d test=# copy t1 to stdout with encoding 'sql_ascii'; 1 a,b 2 c"d test=# copy t1 to stdout with encoding 'gb18030'; 1 a,b 2 c"d |
- COPY table_name TO 'filename' WITH NULL 'null_string'
该字段可以实现,将复制表中数据时,若碰到空字符串,用null_string代替
test=# select * from t1; a | b ---+----- 1 | sss 1 | (2 rows) test=# copy t1 to '/home/zhangnan/t1.txt' null 'x'; COPY 2 |
[zhangnan@kes_0_14 ~]$ cat t1.txt 1 sss
|
- COPY table_name TO 'filename' WITH HEADER [ boolean ]
HEADER选项可以在复制时,将表的列明等信息一同复制:
test=# copy t1 to stdout csv header; a,b 1,sss 1, |
总结
COPY TO命令中通过这些OPTION,可以按照用户需求导出数据,并灵活地进行设置,为数据导出提供了更好地控制和可定制性,使用户能够更方便地处理导出的数据。