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

TabSeparated

输入输出别名
TSV

描述

在 TabSeparated 格式中,数据按行写入。每行包含制表符分隔的值。每个值后跟一个制表符,除了行中的最后一个值,该值后跟一个换行符。严格来说,所有地方都假定为 Unix 换行符。最后一行也必须在末尾包含一个换行符。值以文本格式写入,不带引号,并转义特殊字符。

此格式也可在名称 TSV 下使用。

TabSeparated 格式方便使用自定义程序和脚本处理数据。它默认用于 HTTP 接口和命令行客户端的批处理模式。此格式还允许在不同的 DBMS 之间传输数据。例如,您可以从 MySQL 获取转储并将其上传到 ClickHouse,反之亦然。

TabSeparated 格式支持输出总值(当使用 WITH TOTALS 时)和极值(当 ‘extremes’ 设置为 1 时)。在这些情况下,总值和极值在主要数据之后输出。主要结果、总值和极值之间用空行分隔。示例

SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORDER BY EventDate FORMAT TabSeparated

2014-03-17 1406958
2014-03-18 1383658
2014-03-19 1405797
2014-03-20 1353623
2014-03-21 1245779
2014-03-22 1031592
2014-03-23 1046491

1970-01-01 8873898

2014-03-17 1031592
2014-03-23 1406958

数据格式

整数以十进制形式写入。数字可以在开头包含额外的“+”字符(解析时忽略,格式化时不记录)。非负数不能包含负号。读取时,允许将空字符串解析为零,或者(对于有符号类型)将仅由减号组成的字符串解析为零。不适合相应数据类型的数字可能会被解析为不同的数字,而不会显示错误消息。

浮点数以十进制形式写入。点用作小数点分隔符。支持指数条目,以及 ‘inf’、‘+inf’、‘-inf’ 和 ‘nan’。浮点数的条目可以以小数点开头或结尾。在格式化期间,浮点数的精度可能会丢失。在解析期间,不严格要求读取最接近机器可表示的数字。

日期以 YYYY-MM-DD 格式写入,并以相同的格式解析,但使用任何字符作为分隔符。带时间的日期以 YYYY-MM-DD hh:mm:ss 格式写入,并以相同的格式解析,但使用任何字符作为分隔符。这一切都发生在客户端或服务器启动时的系统时区(取决于哪个格式化数据)。对于带时间的日期,未指定夏令时。因此,如果转储在夏令时期间有时间,则转储不能明确匹配数据,并且解析将选择两个时间之一。在读取操作期间,不正确的日期和带时间的日期可以自然溢出或解析为 null 日期和时间,而不会显示错误消息。

作为例外,如果日期时间戳格式正好由 10 个十进制数字组成,也支持解析。结果与时区无关。格式 YYYY-MM-DD hh:mm:ssNNNNNNNNNN 会自动区分。

字符串输出时会转义反斜杠特殊字符。以下转义序列用于输出:\b\f\r\n\t\0\'\\。解析还支持序列 \a\v\xHH(十六进制转义序列)以及任何 \c 序列,其中 c 是任何字符(这些序列转换为 c)。因此,读取数据支持换行符可以写为 \n\,或作为换行符的格式。例如,字符串 Hello world,单词之间是换行符而不是空格,可以在以下任何变体中解析

Hello\nworld

Hello\
world

支持第二种变体是因为 MySQL 在写入制表符分隔的转储时使用它。

在 TabSeparated 格式中传递数据时,您需要转义的最小字符集:制表符、换行符 (LF) 和反斜杠。

仅转义一小部分符号。您很容易遇到一个字符串值,您的终端会在输出中破坏它。

数组写为方括号中逗号分隔的值列表。数组中的数字项按正常格式格式化。DateDateTime 类型以单引号写入。字符串以单引号写入,并具有与上述相同的转义规则。

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

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

Nested 结构的每个元素都表示为一个数组。

例如

CREATE TABLE nestedt
(
`id` UInt8,
`aux` Nested(
a UInt8,
b String
)
)
ENGINE = TinyLog
INSERT INTO nestedt Values ( 1, [1], ['a'])
SELECT * FROM nestedt FORMAT TSV
1  [1]    ['a']

用法示例

格式设置

设置描述默认
format_tsv_null_representationTSV 格式中的自定义 NULL 表示形式。\N
input_format_tsv_empty_as_default将 TSV 输入中的空字段视为默认值。对于复杂的默认表达式,还必须启用 input_format_defaults_for_omitted_fieldsfalse
input_format_tsv_enum_as_number将 TSV 格式中插入的枚举值视为枚举索引。false
input_format_tsv_use_best_effort_in_schema_inference使用一些调整和启发式方法来推断 TSV 格式的 schema。如果禁用,所有字段都将推断为 String。true
output_format_tsv_crlf_end_of_line如果设置为 true,则 TSV 输出格式中的行尾将为 \r\n 而不是 \nfalse
input_format_tsv_crlf_end_of_line如果设置为 true,则 TSV 输入格式中的行尾将为 \r\n 而不是 \nfalse
input_format_tsv_skip_first_lines跳过数据开头指定数量的行。0
input_format_tsv_detect_header自动检测 TSV 格式中带有名称和类型的标头。true
input_format_tsv_skip_trailing_empty_lines跳过数据末尾的尾随空行。false
input_format_tsv_allow_variable_number_of_columns允许 TSV 格式中可变数量的列,忽略额外的列,并在缺失的列上使用默认值。false