我正在尝试将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;在列规范
中
答案 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。
希望它有所帮助...... !!!