跳到主要内容
跳到主要内容

CSV

描述

逗号分隔值格式 (RFC)。 格式化时,行用双引号括起来。 字符串内的双引号将输出为连续的两个双引号。 没有其他字符转义规则。

  • 日期和日期时间包含在双引号中。
  • 数字输出时不带引号。
  • 值由分隔符分隔,默认情况下为 ,。 分隔符在 format_csv_delimiter 设置中定义。
  • 行使用 Unix 换行符 (LF) 分隔。
  • 数组在 CSV 中按如下方式序列化
    • 首先,数组被序列化为字符串,就像在 TabSeparated 格式中一样
    • 生成的字符串在 CSV 中用双引号输出。
  • CSV 格式的元组被序列化为单独的列(即,它们在元组中的嵌套丢失)。
$ clickhouse-client --format_csv_delimiter="|" --query="INSERT INTO test.csv FORMAT CSV" < data.csv
注意

默认情况下,分隔符为 ,。 有关更多信息,请参阅 format_csv_delimiter 设置。

解析时,所有值都可以带引号或不带引号解析。 支持双引号和单引号。

行也可以在不带引号的情况下排列。 在这种情况下,它们将被解析到分隔符或换行符(CR 或 LF)。 但是,违反 RFC 的是,当解析不带引号的行时,前导和尾随空格和制表符将被忽略。 换行符支持:Unix (LF)、Windows (CR LF) 和 Mac OS Classic (CR LF) 类型。

NULL 根据 format_csv_null_representation 设置进行格式化(默认值为 \N)。

在输入数据中,ENUM 值可以表示为名称或 ID。 首先,我们尝试将输入值与 ENUM 名称匹配。 如果失败且输入值为数字,我们将尝试将此数字与 ENUM ID 匹配。 如果输入数据仅包含 ENUM ID,建议启用 input_format_csv_enum_as_number 设置以优化 ENUM 解析。

示例用法

格式设置

设置描述默认注释
format_csv_delimiter在 CSV 数据中被视为分隔符的字符。,
format_csv_allow_single_quotes允许字符串使用单引号。true
format_csv_allow_double_quotes允许字符串使用双引号。true
format_csv_null_representationCSV 格式中的自定义 NULL 表示形式。\N
input_format_csv_empty_as_default将 CSV 输入中的空字段视作默认值。true对于复杂的默认表达式,也必须启用 input_format_defaults_for_omitted_fields
input_format_csv_enum_as_number将 CSV 格式中插入的枚举值视为枚举索引。false
input_format_csv_use_best_effort_in_schema_inference使用一些调整和启发式方法来推断 CSV 格式的模式。 如果禁用,所有字段将被推断为字符串。true
input_format_csv_arrays_as_nested_csv从 CSV 读取数组时,期望其元素已在嵌套 CSV 中序列化,然后放入字符串中。false
output_format_csv_crlf_end_of_line如果设置为 true,则 CSV 输出格式中的行尾将为 \r\n 而不是 \nfalse
input_format_csv_skip_first_lines跳过数据开头指定的行数。0
input_format_csv_detect_header自动检测 CSV 格式中带有名称和类型的标头。true
input_format_csv_skip_trailing_empty_lines跳过数据末尾的尾随空行。false
input_format_csv_trim_whitespaces修剪未加引号的 CSV 字符串中的空格和制表符。true
input_format_csv_allow_whitespace_or_tab_as_delimiter允许在 CSV 字符串中使用空格或制表符作为字段分隔符。false
input_format_csv_allow_variable_number_of_columns允许 CSV 格式中可变数量的列,忽略额外的列并在缺失的列上使用默认值。false
input_format_csv_use_default_on_bad_values当 CSV 字段反序列化失败时,允许为列设置默认值。false
input_format_csv_try_infer_numbers_from_strings在模式推断时尝试从字符串字段推断数字。false