Skip to main content

Avro Data Types

使用 输入数据工具 读取未压缩和 Deflate 压缩的 Avro 文件,并使用 输出数据工具 写入 Avro 文件。

输入

仅支持 Deflate 压缩。

支持 14 种原生 Avro 数据类型中的大多数。导入时的类型映射如下:

  • 字符串:UTF-8 转换为 V_WString (UTF-16)

  • 字节:保持为 Blob(必要时使用 Blob 工具进行转换)

  • 整型:保持为 Int32

  • 长整型:保持为 Int64

  • 单精度:保持为单精度

  • 双精度:保持为双精度

  • 布尔:保持为 Bool

  • 空:不支持

  • 枚举型:转换为 String Equivalent

  • Union:Alteryx 支持两个子类型的联合。两个子类型必须相同(例如,都是整型或都是双精度),或者其中一个子类型必须为空。

    • Alteryx 字段类型是非空分支的类型(如果两个分支均为非空分支,则为两个分支的类型)。

    • 如果非空分支处于活动状态,则 Alteryx 字段包含该值。

    • 如果空分支处于活动状态,则 Alteryx 字段被设置为空。

    • 无效联合将作为 JSON 导入到一个 V_WString 中(必要时使用 JSON 解析工具进行转换)。例如,以整型作为其活动分支的一个联合可以表示为“{"int":123}”。

  • 定点数:保持为 Blob(必要时使用 Blob 工具进行转换)

这些 Avro 类型本身不受支持,但可以作为 JSON 导入到一个字符串中(必要时使用 JSON 解析工具 进行转换):

  • 记录:例如,对于同时包含整型和字符串字段的记录,使用“{"SubField1":7,"SubField2":"Field2"}”。

  • 数组:例如,“[1,2,3,4,5]”表示一个整型数组。

  • 映射:例如,“{"Key1":Value1,"Key2":Value2}”表示一个字符串到双精度数的映射。

输出

写入 Avro 文件时,有 2 个选项:

  1. 启用压缩 (Deflate) :启用压缩会增加输出时间,但是对于较大的文件,也会减少网络时间。支持的压缩使用 DEFLATE 算法(本质上是 gzip),应当得到其他支持 Avro 的工具(如 Hive)的原生支持。

  2. 支持空值 :选择此选项会向 _all_ 字段写入具有一个空分支和一个有值分支的联合。如果 Alteryx 值为空,则输出的 Avro union 会选择其空分支,否则会选择其有值分支。

    如果未选择此选项,所有输出字段都会按其原生 Avro 类型写入(非联合)。空的 Alteryx 字段会被写入默认值(例如,int32 字段写入 0,字符串字段写入空字符串)。

    考虑使用 公式工具 处理具有“已知”值的空值,这样它们就可以在 Hadoop 中处理。

Alteryx 到 Avro 的类型映射如下:

  • Bool:保持为布尔值

  • 字节、Int16、Int32:保持为整型(32 位)

  • Int64:保持为长整型(64 位)

  • 单精度:保持为单精度

  • 双精度:保持为双精度

  • 定点十进制:转换为双精度数

  • 字符串、V_String、日期、时间、日期时间:保持为字符串 (UTF-8)

  • WString、V_WString:转换为字符串 (UTF-8)

  • Blob、SpatialBlob:保持为字节