HIVE为JSON创建表 - STRUCT错误

时间:2016-04-07 06:35:24

标签: json hadoop hive

我正在尝试将JSON数据加载到HIVE。我正在使用HIVE中的默认SERDE。我在创建表期间遇到错误。需要帮助!

JSON数据:

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    }
}}

创建声明:

CREATE TABLE complex_json(
widget struct<window:struct< title:string,name:string,width:int,height:int>,
debug:string,
image:struct< src:string,name:string,hOffset:int,vOffset:int,alignment:string > >
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';

我收到错误

  

ParseException行2:27无法识别窗口附近的输入&#39; &#39;:&#39; &#39;结构&#39;在列规范

1 个答案:

答案 0 :(得分:1)

WINDOW 是Hive中的保留关键字,直接您不能将保留用作列的一部分,reserved key words

这里有两个选项:

1。)不要将任何保留键工作作为列的一部分。尝试将您的对象名称从窗口重命名为 window1 ,然后就可以了。

2。)如果你想使用关键字,那就像这样使用`window` ,返回引号和列(关键字) 所以你的创建表将如下所示:

CREATE TABLE complex_json(
widget struct< `window` :struct< title:string,name:string,width:int,height:int>,
debug:string,
image:struct< src:string,name:string,hOffset:int,vOffset:int,alignment:string > >
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';

还要确保您的JSON是单行的。所有这些SerDes都不能识别正确格式化的JSON。

希望它有所帮助...... !!!