我正在尝试使用 JOOQ 查询 Hive。 Hive SQL 方言与 MySQL 方言非常接近。 现在我遇到了这些问题:
- Hive 支持 LIMIT N,但不支持 LIMIT N OFFSET K。 Dummy 解决方案 - 覆盖 select.limit(limit);
在 JOOQ 中解决此类问题的最佳实践是什么?
最佳答案
不幸的是,扩展 jOOQ 以彻底支持新的 SQL 方言并不是很简单。 jOOQ 的 API 随着时间的推移变得越来越广泛,支持大量标准和特定于供应商的 SQL 语法变体。虽然 Apache Hive 方言可能看起来与 MySQL 类似,但可能存在许多细微的差异,需要在 jOOQ 的内部实现。 LIMIT .. OFFSET 子句的不同实现只是问题之一。也就是说,将 jOOQ 与“未知”或“不受支持”的方言一起使用通常不是一个好主意。
解决方案:短期内
短期内,您可能需要修补 jOOQ 的渲染 SQL。最好的技术是使用 ExecuteListener,如下所述:
- http://www.jooq.org/doc/latest/manual/sql-execution/execute-listeners/
- http://www.jooq.org/javadoc/latest/org/jooq/ExecuteListener.html
收到“renderEnd()”事件后,您将能够访问呈现的 SQL 并使用正则表达式或您喜欢的任何技术对其进行修改。
解决方案:从长远来看
从长远来看,如果/当#2337时可能会有更好的解决方案已实现(但我们可能不会实现)
关于mysql - jooq 扩展现有方言。采用MySQL方言到apache Hive方言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15381401/