开发者社区> 问答> 正文

解析含有复杂数据结构的hql时报错

麻烦请教, 含有复杂数据类型的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

展开
收起
山海行 2023-07-05 19:47:51 49 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    析含有复杂数据结构的hql可能会报错是因为:

    hql不支持所有数据类型。hql主要用于支持关系型数据,对于复杂的数据结构如字典、列表、元组等,hql支持有限。

    变量没有声明。hql需要在使用变量前先声明该变量,否则会报错。

    语法错误。hql语法与SQL有些差异,容易写错语法导致报错。

    如果遇到解析hql报错,可考虑以下解决方法:

    避免使用复杂的数据类型,尽量只使用基础类型。

    检查所有变量是否声明。

    仔细检查hql语句中的空格、符号是否正确,按标准的hql语法编写。

    将复杂数据结构存放在表中,然后通过Join来处理,避免直接在hql中使用复杂数据结构。

    将hql解析成SQL后在SQL发生器中测试是否能解析正确,再提交运行。

    2023-07-30 15:34:34
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 11:06:07
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像