从 JetBrains JDBC 驱动程序执行 Drill 查询时引用错误

Posted

技术标签:

【中文标题】从 JetBrains JDBC 驱动程序执行 Drill 查询时引用错误【英文标题】:Quoting error when executing a Drill query from JetBrains JDBC driver 【发布时间】:2020-05-12 13:11:07 【问题描述】:

我在 JetBrans (Rider 2019.2) 中有一个自定义数据源驱动程序,它使用 apache-drill-1.17.jar JDBC 驱动程序(官方)。

使用驱动会出现这个错误:

SELECT * FROM dfs.my_parquets."Test" limit 10;
--
PARSE ERROR: Lexical error at line 1, column 19. Encountered: "`" (96), after : ""  
SQL Query: ALTER SESSION SET `exec.query.max_rows`=501 

从错误中可以明显看出,Rider 尝试使用反引号标识符执行此隐藏查询:

ALTER SESSION SET `exec.query.max_rows`=501

问题是目标钻取中的quoting_identifiers 没有设置为`(反引号),而是设置为"(双引号)。

作为连接字符串,我使用的是:jdbc:drill:drillbit=my-drill-instance;quoting_identifiers='"'

有没有办法告诉驱动程序在隐藏查询中使用双引号?

【问题讨论】:

目前无法直接更改报价。我根据您的描述提交了issue DBE-10801。 【参考方案1】:

Manual shows,该选项应该不带引号传递:

jdbc:drill:zk=local;quoting_identifiers=[

jdbc:drill:drillbit=my-drill-instance;quoting_identifiers="

【讨论】:

我试过了。此示例引发错误:Connect string 'drillbit=my-drillbit;quoting_identifiers="' contains unterminated quoted value '' 我的错,正确的是jdbc:drill:drillbit=localhost;quoting_identifiers='"'。但是在设置正确的LIMIT 值时,Drill JDBC 驱动程序存在问题。作为一种解决方法,在 PreferencesDatabaseData Views 中关闭 Limit page size to 选项并手动设置您的查询。例如:SELECT * FROM cp."employee.json" LIMIT 100. 另外,您可以跳过 quoting_identifiers 选项并为每个会话设置它ALTER SESSION SET planner.parser.quoting_identifiers = '"'

以上是关于从 JetBrains JDBC 驱动程序执行 Drill 查询时引用错误的主要内容,如果未能解决你的问题,请参考以下文章

JDBC-执行sql语句的API

JDBC阶段总结

从 Python 连接和测试 JDBC 驱动程序

JDBC — 学习大纲

执行存储过程时使用 Microsoft JDBC 驱动程序的开销

从 Spark 到 Oracle 服务器的 JDBC 连接