我有一个hbase表,其中包含一个json格式的列。因此,我想创建一个包含struct>类型的配置单元外部表。
名为smms的hbase表:
colum name : nodeid , value : "4545781751" in STRING FORMAT
column name : events in JSON FORMAT
value : [{"id":12542, "status" :"true", ..},{"id":"1477", "status":"false", ..}]
配置单元外部表:
Create external table msg (
key INT
nodeid STRING,
events STRUCT<ARRAY<id:INT, status: STRING>
}
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,data:nodeid, data:events") TBLPROPERTIES ("hbase.table.name" = "smms");
配置单元查询: select * from msg;
返回以下结果:
nodeid : 4545781751
events : NULL
谢谢
1条答案
按热度按时间nwwlzxa71#
hbastoragehandler(de)serialiser仅支持字符串和二进制字段https://cwiki.apache.org/confluence/display/hive/hbaseintegratio
hbase中存储的实际上是一个字符串(它确实包含一个json),但不能将其Map到复杂的配置单元类型。解决方案是将事件定义为字符串,并使用hivejson反序列化程序将数据导出到另一个配置单元表https://github.com/rcongiu/hive-json-serde