2012-10-22 5 views
0

테이블을 만들 때 사용하고있는 protobuf에 문제가 있습니다.protobuf에서 '바이트'형식을 무시하고 테이블을 하이브로 만듭니다.

구조에 2 개의 필드가있는 .proto 파일이 있습니다. 하이브는 하나의 필드 (EMetaData) 만 사용하고 테이블의 '바이트'유형 필드는 무시합니다.

message EE { 
required EMetaData header = 1; 
optional bytes cl = 2; 
} 

message EMetaData { 
required uint32 version = 1; 
optional string root_pid = 2; 
} 

표가 하이브에 생성되었습니다.

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 문입니다.

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 필드가 테이블에 없습니다. 문제가 무엇인지 잘 모릅니다. 누구든지이 문제를 겪고 있습니까? 의견이 있으면 알려주십시오.

답변

0

내 SerDe에 약간의 변경이 필요하다는 것을 알았습니다. .proto 파일에서 '바이트'유형을 처리하지 않았습니다. 처리 후 테이블에 대해 생성 된 'binary'유형 필드를 볼 수 있습니다.

관련 문제