将hbase中存储的json对象Map到结构单元外部表

sqserrrh  于 2021-06-08  发布在  Hbase
关注(0)|答案(1)|浏览(365)

我有一个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

谢谢

nwwlzxa7

nwwlzxa71#

hbastoragehandler(de)serialiser仅支持字符串和二进制字段https://cwiki.apache.org/confluence/display/hive/hbaseintegratio
hbase中存储的实际上是一个字符串(它确实包含一个json),但不能将其Map到复杂的配置单元类型。解决方案是将事件定义为字符串,并使用hivejson反序列化程序将数据导出到另一个配置单元表https://github.com/rcongiu/hive-json-serde

相关问题