将存储在HBase中的JSON对象映射到struct <array <..>&gt;蜂巢外部表

时间:2018-03-06 09:32:40

标签: hive hbase hiveql

我有一个包含JSON格式的列的hbase表。所以,我想创建一个包含结构&gt;的hive外部表。类型。

名为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", ..}]

Hive外部表:

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 个答案:

答案 0 :(得分:1)

HBaseStorageHandler(de)序列化程序仅支持字符串和二进制字段https://cwiki.apache.org/confluence/display/Hive/HBaseIntegratio

您在HBase中存储的内容实际上是一个字符串(确实包含JSON),但您无法将其映射到复杂的Hive类型。 解决方案是将事件定义为字符串,并使用HIVE JSON解串器将数据导出到另一个HIVE表https://github.com/rcongiu/Hive-JSON-Serde