DELIMITED

使用 DELIMITED 解析器(默认)通过 COPY 加载分隔的文本数据。您可以指定分隔符、转义字符、如何处理空值以及其他参数。

DELIMITED 解析器支持读取标量类型的一维集合(数组或集)。

DELIMITED 解析器同时支持分摊加载和协作解析

COPY 选项

以下选项特定于此解析器。有关其他适用选项,请参阅参数

DELIMITER

表示一个 ASCII 字符,用于分隔文件中每条记录内的各个列。您可以使用 E'\000' 到 E'\177'(包含)范围内的任何 ASCII 值。不能对 DELIMITER 和 NULL 参数使用相同的字符。有关详细信息,请参阅分隔数据

默认值: 竖线 ('|')。

ENCLOSED [BY]

设置在要其内封装数据的引号字符,允许分隔字符嵌套在字符串值中。可选择范围包含在 E'\001' 至 E'\177'(包含)的任何 ASCII 值(包括除 NULL 以外的任何 ASCII 字符):E'\000')。默认情况下,ENCLOSED BY 没有值,即数据不会被任何类型的引号字符包围。

ESCAPE [AS]

设置转义字符。设置后,转义字符后面的字符将按字面意思解释,而不是解释为特殊字符。您可以使用 E'\001' 至 E'\177'(包含)范围内的任何 ASCII 值来定义转义字符(包括除 NULL 以外的任何 ASCII 字符:E'\000')。

COPY 语句不会将它读取的数据解释为字符串字面量。它也不遵循与其他 SQL 语句(包括 COPY 参数)相同的转义规则。读入数据时,COPY 仅解释被以下选项定义为特殊值的字符:

  • ESCAPE [AS]

  • DELIMITER

  • ENCLOSED [BY]

  • RECORD TERMINATOR

  • All COLLECTION 选项

默认值: 反斜线 ('\')。

NO ESCAPE

消除转义字符处理。如果不需要任何转义字符并且想要防止数据中的字符不被解释为转义序列,则使用该选项。

RECORD TERMINATOR
指定表明数据文件记录结束的字面量字符字符串。有关使用此参数的更多信息,请参见 分隔数据
TRAILING NULLCOLS
指定如果 Vertica 遇到的记录不具有足够数据来匹配表列列表中的列,COPY 将使用 NULL 值插入缺失的列。有关其他信息和示例,请参阅固定宽度格式数据
COLLECTIONDELIMITER

对于集合类型的列,表示用于分隔每个集合中元素的单个 ASCII 字符。您可以使用 E'\000' 到 E'\177'(包含)范围内的任何 ASCII 值。没有任何 COLLECTION 选项可能具有与任何其他 COLLECTION 选项相同的值。有关详细信息,请参阅分隔数据

默认值: 逗号 (',')。

COLLECTIONOPENCOLLECTIONCLOSE

对于集合类型的列,这些选项指示标记集合开头和结尾的字符。在元素列表中的其他地方使用这些字符而不转义它们是错误的。没有任何 COLLECTION 选项可能具有与任何其他 COLLECTION 选项相同的值。

默认值: 方括号('[' 和 ']')。

COLLECTIONNULLELEMENT

该字符串表示集合中空元素值。可将一个 null 值指定为在范围包含在 E'\001' 至 E'\177'(包含)的任何 ASCII 值(包括除 NULL 以外的任何 ASCII 值:E'\000')。没有任何 COLLECTION 选项可能具有与任何其他 COLLECTION 选项相同的值。有关详细信息,请参阅分隔数据

默认值: 'null'

COLLECTIONENCLOSE

对于集合类型的列,设置在要其内封装单个元素的引号字符,允许分隔字符嵌套在字符串值中。可选择范围包含在 E'\001' 至 E'\177'(包含)的任何 ASCII 值(包括除 NULL 以外的任何 ASCII 字符):E'\000')。

没有任何 COLLECTION 选项可能具有与任何其他 COLLECTION 选项相同的值。

默认: 双引号('"')

示例

以下示例显示了默认行为,其中分隔符为 '|'

=> CREATE TABLE employees (id INT, name VARCHAR(50), department VARCHAR(50));
CREATE TABLE

=> COPY employees FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 42|Sheldon Cooper|Physics
>> 17|Howard Wolowitz|Astronomy
>> \.

=> SELECT * FROM employees;
 id |      name       |  department
----+-----------------+--------------
 17 | Howard Wolowitz | Astrophysics
 42 | Sheldon Cooper  | Physics
(2 rows)

以下示例显示如何使用默认选项加载数组值。

=> CREATE TABLE researchers (id INT, name VARCHAR, grants ARRAY[VARCHAR], values ARRAY[INT]);
CREATE TABLE

=> COPY researchers FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 42|Sheldon Cooper|[US-7376,DARPA-1567]|[65000,135000]
>> 17|Howard Wolowitz|[NASA-1683,NASA-7867,SPX-76]|[16700,85000,45000]
>> \.

=> SELECT * FROM researchers;
 id |      name       |               grants               |       values
----+-----------------+------------------------------------+---------------------
 17 | Howard Wolowitz | ["NASA-1683","NASA-7867","SPX-76"] | [16700,85000,45000]
 42 | Sheldon Cooper  | ["US-7376","DARPA-1567"]           | [65000,135000]
(2 rows)

在以下示例中,集合括在大括号中并由句点分隔,且数组包含空值。

=> COPY researchers FROM STDIN COLLECTIONOPEN '{' COLLECTIONCLOSE '}' COLLECTIONDELIMITER '.';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 19|Leonard|{"us-1672".null."darpa-1963"}|{16200.null.16700}
>> \.

=> SELECT * FROM researchers;
 id |      name       |               grants               |       values
----+-----------------+------------------------------------+---------------------
 17 | Howard Wolowitz | ["NASA-1683","NASA-7867","SPX-76"] | [16700,85000,45000]
 42 | Sheldon Cooper  | ["US-7376","DARPA-1567"]           | [65000,135000]
 19 | Leonard         | ["us-1672",null,"darpa-1963"]      | [16200,null,16700]
(3 rows)