FCSVPARSER
解析 CSV 格式(逗号分隔值)的数据。使用此解析器将 CSV 数据加载至列式表、Flex 表和混合表中。所有数据均必须以 Unicode UTF-8 格式进行编码。fcsvparser
解析器支持 CSV 数据的 RFC 4180 标准和其他选项,以适应 CSV 文件格式定义的变化。无效记录被拒绝。有关数据格式的详细信息,请参阅处理非 UTF-8 输入。
该解析器仅可用于 Flex 表。所有 Flex 解析器均会将数据作为单个 VMap 存储在 LONG VARBINAR_raw__
列中。如果某个数据行过大而无法适应该列,该数据行将被拒绝。Vertica 在加载带 NULL 指定列的数据时支持 NULL 值。
语法
FCSVPARSER ( [parameter='value'[,...]] )
参数
type
- 解析器的默认参数值,为以下字符串之一:
-
rfc4180
-
traditional
您在加载符合 RFC 4180 标准的数据(如 MS Excel 文件)时,无须使用 type 参数。请参阅加载 CSV 数据,以了解
RFC4180
的默认参数以及您可为传统 CSV 文件指定的其他选项。默认值:
RFC4180
-
delimiter
- 用于分隔 CSV 数据中的字段的单字符值。
默认值:
,
(对于rfc4180
和traditional
) escape
- 用作转义字符的单字符值,用于按字面解释数据中的下一个字符。
默认值:
-
rfc4180
:"
-
traditional
:\\
-
enclosed_by
- 单字符值。使用
enclosed_by
包括一个与分隔符完全相同但应该按字面解释的值。例如,如果数据分隔符为逗号 (,
),则您要在数据 ("my name is jane, and his is jim"
) 中使用逗号。默认值:
"
record_terminator
- 用于指定记录末尾的单字符值。
默认值:
-
rfc4180
:\n
-
traditional
:\r\n
-
header
- 布尔值,指定是否使用第一行数据作为标题列。当
header=true
(默认)且不存在标题时,fcsvparser 使用默认列标题。默认标题由ucoln
组成,其中 n 为列偏移数,第一列为0
。您可以使用header_names
参数指定自定义列标题名称,如下所述。如果您指定
header=false
,则fcsvparser
会将输入的第一行解析为数据,而不是列标题。默认值: true
header_names
- 列标题名称列表,由解析器的分隔符参数定义的字符分隔。使用此参数可以在没有标题行的 CSV 文件中指定标题名称,或覆盖 CSV 源中存在的列名称。要覆盖一个或多个现有列名,请指定要使用的标题名称。此参数覆盖数据中的任何标题行。
trim
- 布尔值,指定是否从标题名和键值中去掉空格。
默认值: true
omit_empty_keys
- 布尔值,指定解析器如何处理没有值的标头键。如果是 true,则不加载
header
行中的空值键。默认值: false
reject_on_duplicate
- 布尔值,指定是忽略重复记录 (false),还是拒绝重复记录 (true)。在任何一种情况下,都会继续加载。
默认值:false
reject_on_empty_key
- 布尔值,指定是否拒绝包含的键不含值的任何行。
默认值:false
reject_on_materialized_type_error
- 布尔值,指定是否拒绝解析器无法强制转换为兼容数据类型的任何实体化列值。请参阅加载 CSV 数据。
默认值:false
示例
此示例展示了如何使用 fcsvparser
加载 Flex 表,构建视图,然后查询该视图。
-
为 CSV 数据创建 Flex 表:
=> CREATE FLEX TABLE rfc(); CREATE TABLE
-
使用
fcsvparser
加载来自 STDIN 的数据。指定不存在标题,然后按如下方式输入一些数据:=> COPY rfc FROM stdin PARSER fcsvparser(header='false'); Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself. >> 10,10,20 >> 10,"10",30 >> 10,"20""5",90 >> \.
-
运行
compute_flextable_keys_and_build_view
函数,然后查询rfc_view
。请注意,默认的enclosed_by
字符允许字段 ("20""5"
) 内出现转义字符 ("
)。因此,所得到的值得以正确解析。由于输入数据中不存在标题,函数为各列添加了ucoln
:=> SELECT compute_flextable_keys_and_build_view('rfc'); compute_flextable_keys_and_build_view -------------------------------------------------------------------------------------------- Please see public.rfc_keys for updated keys The view public.rfc_view is ready for querying (1 row) => SELECT * FROM rfc_view; ucol0 | ucol1 | ucol2 -------+-------+------- 10 | 10 | 20 10 | 10 | 30 10 | 20"5 | 90 (3 rows)
有关使用此解析器其他参数的详细信息和示例,请参阅加载 CSV 数据。