使用Hive进行Twitter分析时创建外部表遇ParseException报错求助
解决Hive创建Twitter分析表时的ParseException错误
这个报错我太熟悉啦!问题出在你用了user作为列名——它是Hive的保留关键字,直接使用会触发语法解析错误,也就是你看到的:
FAILED: ParseException line 9:2 cannot recognize input near 'user' 'STRUCT' '<' in column name or primary key or foreign key
为什么会出现这个问题?
Hive内置了一系列保留关键字(比如user、select、where等),这些词被Hive SQL解析器当作语法指令处理。如果直接把它们用作列名、表名或其他标识符,解析器会混淆,抛出无法识别的语法错误。
解决方法:用反引号包裹关键字列名
只需要把user列名用反引号(`)包裹起来,告诉Hive这是一个标识符而非语法关键字。修改后的创建表语句示例如下:
CREATE EXTERNAL TABLE IF NOT EXISTS tweets ( text STRING, `user` STRUCT< id: BIGINT, name: STRING, screen_name: STRING, location: STRING >, -- 其他列按原格式继续定义即可 entities STRUCT< hashtags: ARRAY<STRUCT<text: STRING>> > ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION '/path/to/your/tweets/data';
额外确认
你已经成功添加了hive-json-serde.jar,这部分配置没问题,不需要调整。只要修正user列的命名方式,重新执行建表语句就能解决这个问题啦!
内容的提问来源于stack exchange,提问作者Shashank Tripathi
相关产品推荐
相关产品推荐

