2017-02-09 56 views
0

我有像在hadfs中的以下json。如何在Hive中解析嵌套的Json结构?

{"result": [{"sys_tags": {"display_value": "d1", "value": "v1"}, "user_input": {"display_value": "d2", "value": "v2"}}, {"sys_tags": {"display_value": "d1", "value": "v1"}, "user_input": {"display_value": "d2", "value": "v2"}}]} 

我想在配置单元中创建一个外部表来分析数据。

我下载了json-serde-1.3.7-jar-with-dependencies.jar并添加到了hive shell中。这里是我跑的查询

CREATE EXTERNAL TABLE t2(result array<STRUCT<sys_tags STRUCT<display_value :STRING, value:STRING>>, STRUCT<user_input STRUCT<display_value :STRING, value:STRING>>>) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' location 'hdfs://localhost:9000/t2'; 

但它不工作。任何人都可以帮助解决这个问题吗?

回答

1

里有CREATE声明几个不匹配<和失踪:

尝试,

CREATE EXTERNAL TABLE t2(
     result array<STRUCT<sys_tags:STRUCT<display_value:STRING, value:STRING>,user_input:STRUCT<display_value:STRING, value:STRING>>>) 
     ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
     location 'hdfs://localhost:9000/t2'; 
+1

它的工作!非常感谢。 –

0

它的失败,因为JSON属性没有正确映射,尝试了这一点:

CREATE EXTERNAL TABLE t2(result MAP<STRING, ARRAY<MAP<STRING,STRUCT<display_value :STRING, value:STRING>>>>) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' location 'hdfs://localhost:9000/t2'; 
+0

感谢迅速的反应拉胡尔。我试过使用上面的查询。表正在创建而没有任何错误,但在从表中选择数据时发生错误。错误类似于:OK 失败,异常java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException:java.lang.ClassCastException:org.openx.data.jsonserde.json.JSONArray无法转换为org.openx.data.jsonserde.json.JSONObject 花费的时间:0.101秒 –