Skip to main content

描述

Apache Avro 是一种面向行的序列化格式,采用二进制编码以实现高效的数据处理。Avro 格式支持读取和写入 Avro 数据文件。该格式要求消息为自描述消息,并内嵌 schema。如果你将 Avro 与 Schema Registry 搭配使用,请参阅 AvroConfluent 格式。

数据类型映射

下表列出了 Apache Avro format 支持的所有 数据类型,以及它们在 INSERTSELECT queries 中对应的 ClickHouse 数据类型 ** Variant 类型 会隐式地接受 null 作为字段值,因此,例如 Avro 的 union(T1, T2, null) 会被转换为 Variant(T1, T2)。 因此,当从 ClickHouse 生成 Avro 时,我们必须始终在 Avro 的 union 类型集合中包含 null 类型,因为在进行 schema inference 时,我们无法判断是否有某个值实际为 null *** Avro 逻辑类型 不受支持的 Avro 逻辑类型:
  • time-millis
  • time-micros
  • duration

格式设置

示例

读取 Avro 数据

要将 Avro 文件中的数据读入 ClickHouse 表:
导入的 Avro 文件的根 schema 必须为 record 类型。 为了找出表中列与 Avro schema 字段之间的对应关系,ClickHouse 会比较它们的名称。 这种比较区分大小写,未使用的字段会被跳过。 ClickHouse 表中列的数据类型可以与插入的 Avro 数据中的对应字段不同。插入数据时,ClickHouse 会根据上表解释数据类型,然后将数据转换为相应的列类型。 导入数据时,如果在 schema 中找不到某个字段,并且启用了设置 input_format_avro_allow_missing_fields,则会使用默认值,而不是抛出错误。

写入 Avro 数据

要将 ClickHouse 表中的数据写入 Avro 文件:
列名必须满足以下规则:
  • [A-Za-z_] 开头
  • 后续只能包含 [A-Za-z0-9_]
Avro 文件的输出压缩和同步时间间隔可分别通过 output_format_avro_codecoutput_format_avro_sync_interval 设置进行配置。

推断 Avro schema

使用 ClickHouse DESCRIBE 函数,你可以像下面的示例一样快速查看推断出的 Avro 文件格式。 此示例包含一个可公开访问的 Avro 文件 URL,位于 ClickHouse S3 公共 bucket 中:
最后修改于 2026年7月23日