0

テーブルの作成に使用している 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 フィールドはテーブルに存在しません。何が問題なのかわからない。誰かがこの問題に遭遇しましたか? 何か提案があれば教えてください。

4

1 に答える 1

0

私のSerDeにいくつかの変更が必要であることがわかりました。.proto ファイルの「bytes」タイプを処理していませんでした。それを処理した後、テーブル用に作成された「バイナリ」タイプのフィールドを確認できます。

于 2013-01-15T22:01:06.543 に答える