【问题标题】:Parsing JSon column value解析 JSON 列值
【发布时间】:2019-10-25 07:43:14
【问题描述】:

我正在尝试从名为 Json_table 的表中解析一个 json 列,该表具有 2 种不同类型的元素,

keyfield  |  json_column | SomeotherField1 | SomeotherField2
----------------------------------------------------------------
keyfield1, | {"jField1":"Value1", ..."jField10":"Value10", "MapField":[{"Key": "key1", "Value":"Keyvalue1"}, {"Key": "key2", "Value":"Keyvalue2"}] | someothervalue | someothervalue

使用 get_json_object 函数,我可以轻松访问 jField1 到 jField10 和 MapField。但我不知道如何将 MapField 解析为更多单独的列。

SELECT keyfield, get_json_object(json_column, '$.jField1') as jField1, get_json_object(json_column, '$.jField2') as jField2
FROM Json_table

我需要编写可以为我提供这样结果的查询

Select Keyfield, jField1, jField2, .. , jField10, Key1, Key2 From Json_table
result as:

keyfield1 | Value1 | ... | Value10 | Keyvalue1 | Keyvalue2

我想从“Mapfield”部分中获取所有单个元素。

【问题讨论】:

  • 我在 Hive 中有这张桌子

标签: json dictionary hive


【解决方案1】:

您可以通过索引访问MapField数组,$.MapField[0].Value, $.MapField[1].Value

with cte as (
select string('{"jField1":"Value1","jField10":"Value10", "MapField":[{"Key": "key1", "Value":"Keyvalue1"}, {"Key": "key2", "Value":"Keyvalue2"}]}')as jsn_col) 
select get_json_object(jsn_col,'$.jField1')jField1,
get_json_object(jsn_col,'$.MapField[0].Value')key1,
get_json_object(jsn_col,'$.MapField[1].Value')key2 from cte;

+-------+---------+---------+
|jField1|key1     |key2     |
+-------+---------+---------+
|Value1 |Keyvalue1|Keyvalue2|
+-------+---------+---------+

【讨论】:

  • 谢谢。像魅力一样工作。
猜你喜欢
  • 2021-11-06
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多