如何展平包含JSON数据的配置单元列

时间:2019-03-03 13:09:53

标签: hadoop hive

有一个仅包含一列的配置单元表,并且该表应该在每个记录中包含JSON。请注意,在每个记录中,JSON结构可能会有所不同。我想展平JSON并使用所有JSON密钥创建一个表。可能吗?如果是,您能建议怎么做吗?谢谢!

2 个答案:

答案 0 :(得分:0)

使用JSONSerDe并定义列的超集,或者更好地仅定义所需的列。仅解析表DDL中定义的列,如果JSON行中没有此类键,则将加载NULL。无论如何,您都需要知道可能的键来创建具有从JSON解析的列的表。

或者,如果要提取JSON中存在的键和值,也可以将JSON转换为地图,并且JSON是简单的扁平形式,例如此答案:https://stackoverflow.com/a/54766529/2700344

答案 1 :(得分:0)

您可以尝试以下操作:

假设您在名为 json_test

的表中有一列包含JSON数据的内容
|-----------------------------------------------------------|
| col1                                                      |
|-----------------------------------------------------------|
| {"variable1":123,"variable2":456,"variable3":789}         |                                          
|-----------------------------------------------------------|
| {"variable1":222,"variable2":333,"variable3":444}         |
-------------------------------------------------------------

如果要解析此内容,可以运行下面的hive语句来解析它。每行可以具有不同的JSON格式。如果查询找到该属性,它将返回值,否则将返回NULL

select get_json_object(col1,'$.variable1') as variable1,
get_json_object(col1,'$.variable2') as variable2,
get_json_object(col1,'$.variable3') as variable3 
from json_test

输出:

|variable1 |variable2 |variable3 |
|----------|----------|----------|
|123       |456       |789       |
|222       |333       |444       |