展开描述
用于将 Arrow 数组写入 Avro 数据的核心功能
实现了主写入器接口和记录编码逻辑。用于 arrow-avro crate 的 Avro 写入器实现。
§概述
使用此模块将 Arrow RecordBatch 值序列化为 Avro。支持两种输出格式:
AvroWriter— 写入一个 对象容器文件 (OCF):一个自描述文件,包含头部(模式 JSON + 元数据)、可选压缩、数据块和同步标记。请参阅 Avro 1.11.1 “对象容器文件”。 https://avro.apache.org/docs/1.11.1/specification/#object-container-filesAvroStreamWriter— 写入一个 单一对象编码 (SOE) 流(“数据”字节),不带任何容器帧。当模式是带外已知(即通过注册表)并且您想要最小开销时,这很有用。
§您应该使用哪种格式?
- 当您需要一个可移植、自包含的文件时,请使用 OCF。模式与数据一起传输,使其易于在其他地方读取。
- 当您的周围协议提供模式信息(即模式注册表)时,请使用 SOE 流。写入器会自动添加每个记录的前缀。
- SOE:每个记录都以 2 字节的头部 (
0xC3 0x01) 作为前缀,后跟 8 字节的小端 CRC-64-AVRO 指纹,然后是 Avro 主体。请参阅 Avro 1.11.1 “单一对象编码”。 https://avro.apache.org/docs/1.11.1/specification/#single-object-encoding - Confluent 线格式:每个记录都以魔术字节
0x00作为前缀,后跟一个 大端 4 字节模式 ID,然后是 Avro 主体。使用FingerprintStrategy::Id(schema_id)。 https://docs.confluent.io/platform/current/schema-registry/fundamentals/serdes-develop/index.html#wire-format - Apicurio 线格式:每个记录都以魔术字节
0x00作为前缀,后跟一个 大端 8 字节模式 ID,然后是 Avro 主体。使用FingerprintStrategy::Id64(schema_id)。 https://www.apicur.io/registry/docs/apicurio-registry/1.3.3.Final/getting-started/assembly-using-kafka-client-serdes.html#registry-serdes-types-avro-registry
- SOE:每个记录都以 2 字节的头部 (
§选择 Avro 模式
默认情况下,写入器将您的 Arrow 模式转换为 Avro(包括顶级记录名称)。如果您已经有一个 Avro 模式 JSON 并希望原样使用,请在构造写入器之前将其放入 Arrow 模式元数据中的 avro.schema 键下。构建器将使用该模式而不是生成新模式(除非在选项中将 strip_metadata 设置为 true)。
§压缩
对于 OCF,您可以通过 WriterBuilder::with_compression 启用压缩编解码器。所选的编解码器将写入文件头并用于后续块。SOE 流写入不应用容器级压缩。
模块§
- encoder 🔒
- 将
RecordBatch编码为 Avro 二进制格式。用于 Arrow 类型的 Avro 编码器。 - format
- 不同 Avro 容器文件格式的逻辑。用于 Arrow 的 Avro 写入器格式。
结构体§
- Writer
- 通用 Avro 写入器。
- Writer
Builder - 构建器,用于配置和创建
Writer。
类型别名§
- Avro
Stream Writer - Avro 单一对象编码 流写入器的别名。
- Avro
Writer - Avro 对象容器文件 写入器的别名。