麻烦请教, 含有复杂数据类型的sql解析报错,请问是目前不支持么?还是我的代码有问题 hql: select field['id'].string_type as banner_id ,field['index'].string_type as banner_index ,field['pageName'].string_type as pageName from bdm_book.midu_xcx_web_main_log where day = '2019-01-09' and eventid = '151' and cmd in ('26002','26003') group by field['id'].string_type ,field['index'].string_type ,field['pageName'].string_type ;
java 代码: HiveStatementParser parser = new HiveStatementParser(hql); List stmtList = parser.parseStatementList();
第二行java代码抛异常: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :' field['id'].string_type as ban', expect LBRACKET, actual LBRACKET pos 20, line 2, column 12, token LBRACKET
原提问者GitHub用户mengya22
析含有复杂数据结构的hql可能会报错是因为:
hql不支持所有数据类型。hql主要用于支持关系型数据,对于复杂的数据结构如字典、列表、元组等,hql支持有限。
变量没有声明。hql需要在使用变量前先声明该变量,否则会报错。
语法错误。hql语法与SQL有些差异,容易写错语法导致报错。
如果遇到解析hql报错,可考虑以下解决方法:
避免使用复杂的数据类型,尽量只使用基础类型。
检查所有变量是否声明。
仔细检查hql语句中的空格、符号是否正确,按标准的hql语法编写。
将复杂数据结构存放在表中,然后通过Join来处理,避免直接在hql中使用复杂数据结构。
将hql解析成SQL后在SQL发生器中测试是否能解析正确,再提交运行。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。