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

RowBinary

输入输出别名

描述

RowBinary 格式按行以二进制形式解析数据。
行和数值按顺序连续列出,没有分隔符。
由于数据以二进制形式表示,FORMAT RowBinary 之后的分隔符必须严格按如下方式指定:

  • 任意数量的空白字符:
    • ' '(空格 - 代码 0x20
    • '\t'(制表符 - 代码 0x09
    • '\f'(换页符 - 代码 0x0C
  • 后面紧跟且只能跟一个换行序列:
    • Windows 风格 "\r\n"
    • 或 Unix 风格 '\n'
  • 紧接着就是二进制数据。
注意

由于是按行存储,该格式比 Native 格式效率更低。

对于以下数据类型,需要注意:

  • 整数 使用定长小端表示。例如,UInt64 使用 8 字节。
  • DateTime 表示为 UInt32,其值为 Unix 时间戳。
  • Date 表示为 UInt16,其值为自 1970-01-01 起的天数。
  • String 表示为可变宽度整数(varint,使用无符号 LEB128 编码),后面跟字符串的字节序列。
  • FixedString 表示为简单的字节序列。
  • Array 表示为可变宽度整数(varint,使用无符号 LEB128 编码),后面跟数组的各个元素。

对于 NULL 支持,每个 Nullable 值前会额外增加一个包含 10 的字节。

  • 如果为 1,则该值为 NULL,并且这个字节本身被解释为一个独立的值。
  • 如果为 0,则该字节后面的值不是 NULL

关于 RowBinary 格式与 RawBlob 格式的对比,请参阅:原始格式比较

使用示例

格式设置

以下设置适用于所有 RowBinary 类型的格式。

SettingDescriptionDefault
format_binary_max_string_sizeRowBinary 格式中 String 类型允许的最大大小。1GiB
output_format_binary_encode_types_in_binary_format允许在 RowBinaryWithNamesAndTypes 输出格式的头部使用 binary encoding 编码并写入类型信息,而不是使用带有类型名称的字符串。false
input_format_binary_decode_types_in_binary_format允许在 RowBinaryWithNamesAndTypes 输入格式的头部使用 binary encoding 解码并读取类型信息,而不是使用带有类型名称的字符串。false
output_format_binary_write_json_as_string允许在 RowBinary 输出格式中,将 JSON 数据类型的值写为 JSON String 值。false
input_format_binary_read_json_as_string允许在 RowBinary 输入格式中,将 JSON 数据类型的值读取为 JSON String 值。false