Protobuf数据解析

更新时间:
复制 MD 格式

DataWorks数据集成单表实时同步支持使用Protobuf数据解析组件,将来源侧消息队列(如Kafka)中以Protobuf格式编码的二进制数据解析还原为结构化字段。

创建并配置Protobuf数据解析组件

步骤一:配置数据集成任务

  1. 新建数据源,详情请参见:配置数据源。

  2. 新建数据集成任务,详情请参见:单表实时同步任务配置。

    说明

    当数据集成侧同步任务的同步类型为单表实时,可在数据来源组件与数据去向组件之间新增数据处理组件。详情可参见支持的数据源及同步方案。

步骤二:添加Protobuf数据解析组件

  1. 在单表实时同步任务中,开启数据处理开关,单击+添加节点,新增选择Protobuf数据解析组件。

  2. 为节点配置名称和描述信息,并配置Protobuf数据解析组件。

    重要

    Protobuf数据解析组件适用于来源数据以Protobuf格式编码的场景,例如Kafka的消息体为Protobuf二进制数据。组件从指定列读取原始二进制数据,依据.proto文件中定义的消息结构(Message)将其解析还原为结构化字段,追加输出至下游。

    配置基础参数,参数说明如下:

    参数

    说明

    源字段

    必填。选择存放Protobuf二进制数据的上游列,下拉列表仅展示上游BYTES类型的列。消息队列数据源通常选择消息体列,例如Kafka的value列。

    .proto文件内容

    必填。粘贴待解析数据对应的.proto文件全文,支持proto2、proto3语法,可引用Timestamp、Duration等标准定义(well-known types),不支持引用(import)其他自定义proto文件。填写完成后,单击解析内容,系统将解析出文件中定义的全部Message。

    解析失败处理

    必填。选择解析失败(例如源字段取值为空、二进制数据损坏或与Message定义不匹配)时的处理方式,取值如下:

    • 跳过(skip):丢弃该条记录,任务继续运行。默认取值。

    • 抛出异常(error):任务报错并终止运行。

    配置解析字段。单击解析内容成功解析后,在Message名称下拉列表中选择要解析的Message,取值为Message全限定名(含package,例如test.User)。选择Message后,下方解析字段表格将展示该Message定义的全部顶层字段,包括字段名与映射类型,默认全部勾选,可按需取消勾选无需输出的字段。

    解析字段仅支持Message的顶层字段,不支持通过路径(如a.b)提取嵌套字段,嵌套字段将整体解析为JSON字符串输出。Protobuf字段类型与输出字段类型的映射关系如下:

    字段类型映射

    Protobuf字段类型

    输出字段类型

    int32、sint32、sfixed32、uint32、fixed32

    INT

    int64、sint64、sfixed64、uint64、fixed64

    BIGINT

    float

    FLOAT

    double

    DOUBLE

    bool

    BOOLEAN

    string

    STRING

    bytes

    BYTES

    enum

    INT,输出枚举数值,而非枚举名。

    message(单个)

    STRING,整体输出为JSON对象字符串,其中未设置的字段省略,bytes类型取值为Base64编码。

    repeated(任意类型)

    STRING,整体输出为JSON数组字符串。

    其中,uint32、uint64类型按有符号整数输出,取值超过有符号正数最大值时将显示为负数。

组件解析行为

  • 解析出的字段将追加至输出字段列表末尾,存放原始二进制数据的源列保留,不会被删除。请避免解析出的字段与上游已有字段重名,重名可能导致数据写入冲突。

  • Message中未设置的字段按Protobuf默认值输出,例如数值类型为0、string为空字符串、bool为false。

  • .proto文件中不允许在Message内部嵌套定义Message(包括map类型字段),所有Message与enum需定义在文件顶层;字段类型引用其他顶层Message是允许的,其取值将整体输出为JSON字符串。

后续操作

完成数据来源与Protobuf数据解析的配置后,可单击数据输出预览,查看当前节点的输出数据结果是否符合预期。