Skip to main content

说明

在 TabSeparated 格式中,数据按行写入。每一行都包含由制表符分隔的值。除每行最后一个值后跟的是换行符外,其他每个值后面都跟一个制表符。全文统一严格使用 Unix 换行符。最后一行末尾也必须包含换行符。值以文本格式写入,不加引号,特殊字符会被转义。 该格式也可称为 TSV TabSeparated 格式便于使用自定义程序和脚本处理数据。它是 HTTP 接口以及命令行客户端批次模式的默认格式。该格式还支持在不同的 DBMS 之间传输数据。例如,你可以从 MySQL 获取转储并上传到 ClickHouse,反之亦然。 TabSeparated 格式支持输出总计值 (使用 WITH TOTALS 时) 和极值 (当 ‘extremes’ 设置为 1 时) 。在这些情况下,总计值和极值会在主数据之后输出。主结果、总计值和极值之间以空行分隔。示例:

数据格式化

整数以十进制形式写入。数字开头可以带一个额外的 ”+” 字符 (解析时会被忽略,格式化时不会保留) 。非负数不能包含负号。读取时,允许将空字符串解析为零,或者 (对于有符号类型) 将仅包含一个负号的字符串解析为零。超出相应数据类型范围的数字,可能会被解析成另一个数字,且不会报错。 浮点数以十进制形式写入。使用点号作为小数分隔符。支持指数表示法,也支持 ‘inf’、‘+inf’、‘-inf’ 和 ‘nan’。浮点数可以以小数点开头或结尾。 格式化时,浮点数可能会损失精度。 解析时,不严格要求读取最接近机器可表示值的数。 日期以 YYYY-MM-DD 格式写入,并按相同格式解析,但分隔符可以是任意字符。 带时间的日期以 YYYY-MM-DD hh:mm:ss 格式写入,并按相同格式解析,但分隔符可以是任意字符。 这些操作都基于客户端或服务器启动时的系统时区 (取决于由哪一方格式化数据) 。对于带时间的日期,夏令时未作规定。因此,如果某个转储包含夏令时期间的时间,则该转储无法与数据形成唯一对应关系,解析时会在两个时间中选取一个。 读取时,错误的日期和带时间的日期可能按自然溢出方式解析,或者被解析为空日期和时间,且不会报错。 例外情况下,如果带时间的日期恰好由 10 位十进制数字组成,也支持按 Unix 时间戳格式解析。结果不受时区影响。格式 YYYY-MM-DD hh:mm:ssNNNNNNNNNN 会自动区分。 String 输出时,特殊字符会使用反斜杠转义。输出使用以下转义序列:\b\f\r\n\t\0\'\\。解析时还支持 \a\v\xHH (十六进制转义序列) ,以及任意 \c 序列,其中 c 可以是任意字符 (这些序列会被转换为 c) 。因此,读取数据时支持以下格式:换行既可以写成 \n\,也可以直接写成换行符。例如,字符串 Hello world 如果单词之间不是空格而是换行符,则可以按以下任一形式解析:
之所以支持第二种变体,是因为 MySQL 在写入制表符分隔的转储时会使用它。 以 TabSeparated 格式传递数据时,至少需要转义以下字符:制表符、换行符 (LF) 和反斜杠。 只有少量符号会被转义。你很容易遇到某个字符串值,在输出时被终端破坏。 数组写作 [] 中以逗号分隔的值列表。数组中的数值项按常规方式格式化。DateDateTime 类型用单引号括起来。String 也用单引号括起来,并遵循与上述相同的转义规则。 NULL 的格式由设置 format_tsv_null_representation 决定 (默认值为 \N) 。 在输入数据中,ENUM 值可以表示为名称或 id。首先,我们会尝试将输入值与 ENUM 名称匹配。如果失败,且输入值是数字,则会尝试将该数字与 ENUM id 匹配。 如果输入数据只包含 ENUM id,建议启用设置 input_format_tsv_enum_as_number 以优化 ENUM 解析。 Nested 结构中的每个元素都表示为数组。 例如:

示例用法

插入数据

使用下面这个名为 football.tsv 的 TSV 文件:
插入数据:

读取数据

使用 TabSeparated 格式读取数据:
输出将采用制表符分隔的格式:

格式设置

最后修改于 2026年7月23日