テーブルの作成に使用している protobuf に問題があります。
構造体に 2 つのフィールドを持つ .proto ファイルがあります。Hive は 1 つのフィールド (EMetaData) のみを使用しているようで、テーブル内の「bytes」タイプのフィールドを無視します。
message EE {
required EMetaData header = 1;
optional bytes cl = 2;
}
message EMetaData {
required uint32 version = 1;
optional string root_pid = 2;
}
テーブルはHiveでこのように作成されます。
Hive>desc pbtest2;
OK
key struct<header:struct<rootpid:string,version:int>> from deserializer
value struct<header:struct<rootpid:string,version:int>> from deserializer
以下は私のテーブル作成ステートメントです。
create table pbtest2 row format serde 'MyProtobufDeserializer' with serdeproperties ('KEY_SERIALIZE_CLASS'='CEMessages$EE','VALUE_SERIALIZE_CLASS'='CEMessages$EE') stored as inputformat 'MyInputFormat' outputformat 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'
バイト型 cl フィールドはテーブルに存在しません。何が問題なのかわからない。誰かがこの問題に遭遇しましたか? 何か提案があれば教えてください。