使用LIKE选项创建外部表遇ParseException错误,如何解决?
解决Hive CREATE EXTERNAL TABLE LIKE 语法报错问题
嘿,这个报错我太熟了——你这是把Hive里CREATE TABLE LIKE的语法顺序和用法搞混啦!报错里的missing EOF at 'LIKE' near ')',就是因为解析器完全没料到在列定义括号结束后会出现LIKE关键字,而且你同时手动定义列和用LIKE的操作本身就冲突了。
正确的写法来啦
如果你想复制EPCTR_201804表的完整结构,同时给新表指定外部存储路径,直接这么写就行:
CREATE EXTERNAL TABLE IF NOT EXISTS test1 LIKE 'EPCTR_201804' LOCATION '/hdfs/t1/tt1/PR/34/1xx/E1ERPSE/201801/PR/20180202-000758/*';
为啥原来的写法不行?
- 语法顺序错误:Hive里
LIKE子句必须紧跟在新表名后面,不能放在列定义的括号之后。解析器在读完(rec string)之后,本来以为语句要结束了(期待EOF),结果看到LIKE,直接就报错了。 - 功能冲突:当你使用
LIKE的时候,Hive会自动从目标表(EPCTR_201804)继承所有的列定义、分区规则、表属性等信息,这时候你手动写(rec string)完全是画蛇添足,反而会让解析器混乱。
要是只想用原表的部分结构怎么办?
如果你的需求不是完全复制原表,而是只取部分列,那LIKE就不适合用了。你得手动定义需要的列,然后如果需要同步原表的某些属性,可以用TBLPROPERTIES来单独设置,但这种场景下就别碰LIKE啦。
内容的提问来源于stack exchange,提问作者SA2018
相关产品推荐
相关产品推荐

