Hadoop Hive SQL查询表名为保留关键字case时beeline执行失败如何解决
Hive保留关键字作为表名查询失败的可行解决思路
- 方案1:使用适配beeline环境的转义符包裹表名
beeline通过JDBC连接Hive时,单反引号会被JDBC驱动先行解析,因此需要用双反引号包裹保留关键字表名才能正确被Hive引擎识别,执行命令示例:select * from ``case``;
如果是在shell脚本中嵌套调用beeline,还需要额外对反引号做转义,避免被shell识别为命令替换标记,示例:beeline -u jdbc:hive2://<Hive服务地址>:<端口>/<默认库> -n <用户名> -p <密码> -e "select * from \`case``;"` - 方案2:使用全限定表名提升兼容性
部分低版本Hive对无库名的保留关键字表名转义支持存在缺陷,可加上库名构成全限定名再配合转义符使用,执行命令示例:select * from <你的库名>.``case``; - 方案3:临时关闭保留关键字检查(仅测试环境可用,生产环境不推荐)
可临时修改Hive的SQL解析配置,关闭SQL11保留关键字校验,无需转义即可直接查询,执行命令如下:set hive.support.sql11.reserved.keywords=false; select * from case; - 方案4:长期使用建议重命名表
从根本上避免保留关键字带来的各类兼容问题,可将表重命名为非保留关键字的名称,执行命令示例:ALTER TABLE ``case`` RENAME TO <新表名如case_data>;
如果以上方案均执行失败,可先排查当前账号是否有该表的查询权限、当前会话是否切换到了表所属的数据库,排除权限和库选择错误的问题。
内容的提问来源于stack exchange,提问作者ARCuber
相关产品推荐
相关产品推荐

