解析PB文件定义的字段及类型方案

一、名词解释

1.1、 .proto 文件的基本概念

一个 .proto 文件主要包含以下内容:

syntax: 指定使用的 Protocol Buffers 版本(通常是 proto2 或 proto3)。
package: 定义包名以避免命名冲突。
import: 引用其他 .proto 文件中的定义。
message: 定义数据结构。
enum: 定义枚举类型。
service: (可选)定义 RPC(远程过程调用)服务接口

1.2、 Descriptor 文件的基本概念

在 Protocol Buffers(Protobuf)的上下文中,指的是使用 protoc 编译器从 .proto 文件生成的一种元数据文件。这种文件通常被称为 FileDescriptorSet,它包含了 .proto 文件中定义的所有消息、枚举类型、服务等结构化信息的描述。Descriptor 文件主要用于动态解析 Protobuf 消息,而不需要预先生成的特定语言绑定代码

二、PB文件内容字段解析流程

2.1、pb文件转化为descriptor文件

执行转化命令:protoc --descriptor_set_out=/data/test.description /data/test.proto --proto_path=/data

2.2、解析descriptor文件类、字段描述元信息

     //com.google.protobuf.Descriptors
   DescriptorProtos.FileDescriptorSet descriptorSet =
                    DescriptorProtos.FileDescriptorSet.parseFrom(new FileInputStream(descriptionFilePath));
            DescriptorProtos.FileDescriptorProto fileDescriptorProto = descriptorSet.getFileList().get(0);

            Descriptors.FileDescriptor fileDescriptor =
                    Descriptors.FileDescriptor.buildFrom(fileDescriptorProto, new Descriptors.FileDescriptor[]{});

            String javaPackage = fileDescriptor.getOptions().getJavaPackage();
            String javaOuterClassname = fileDescriptor.getOptions().getJavaOuterClassname();

            List<Descriptors.Descriptor> descriptors = fileDescriptor.getMessageTypes();

参考Flink源码中的flink-protobuf模块,PbToRowTypeUtil工具类,解析Descriptors.Descriptor对象转换为flink的RowType类型


image.png

通过Flink RowType 获取对应的List<RowField> 其中RowField由字段名、字段类型组成,再转换成期望的Hive Type


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 3,301评论 0 5
  • 为了让我有一个更快速、更精彩、更辉煌的成长,我将开始这段刻骨铭心的自我蜕变之旅!从今天开始,我将每天坚持阅...
    李薇帆阅读 1,944评论 0 3
  • 似乎最近一直都在路上,每次出来走的时候感受都会很不一样。 1、感恩一直遇到好心人,很幸运。在路上总是...
    时间里的花Lily阅读 1,399评论 0 2
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 532评论 0 1
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 537评论 0 0