jooq 从表的特定分区中选择
Posted
技术标签:
【中文标题】jooq 从表的特定分区中选择【英文标题】:jooq select from a particular partition of the table 【发布时间】:2018-08-04 15:09:18 【问题描述】:在表的特定分区上执行选择查询的正确方法是什么。例如,我有一个雇员表,它在特定列上进行范围分区。
目前我这样做:
Result<Record> fetch = DSL.using(configuration())
.select()
.from(EMPLOYEES)
.fetch();
执行以下sql的正确方法是什么(其中p2是一个分区)
SELECT * FROM employees PARTITION (p2);
更新 1 当我使用可更新记录时,更新/插入呢,例如:
employeeRecord.attach(configuration())
employeeRecord.update(); // or insert
我假设我可以做这样的事情,但那会处理乐观锁情况(我通过我表上的版本列使用)
DSL.using(configuration())
.update("0 partition (p2)", EMPLOYEES)
.set(EMPLOYEES.NAME, "abc")
.where(EMPLOYEES.ID.eq(123))
.execute();
【问题讨论】:
【参考方案1】:jOOQ 目前不支持表上的PARTITION
子句。相关功能请求为:https://github.com/jOOQ/jOOQ/issues/2774
您可以使用普通的 SQL 模板 API 轻松解决此限制: https://www.jooq.org/doc/latest/manual/sql-building/plain-sql-templating
Result<Record> fetch = DSL.using(configuration())
.select()
.from("0 partition (p2)", EMPLOYEES)
.fetch();
以上是为了方便:
Result<Record> fetch = DSL.using(configuration())
.select()
.from(DSL.table("0 partition (p2)", EMPLOYEES))
.fetch();
【讨论】:
感谢这项工作,更新了 updatableRecords 案例的问题 @anuj:您介意再次删除更新并提出新问题吗?我不确定这些事情是否严格相关。 Stack Overflow 不会很快用完问题 ID :-)【参考方案2】:您是否尝试过使用此处的示例,例如
create.select(t.BOOKED_AT, t.AMOUNT,
sum(t.AMOUNT).over().partitionByOne()
.orderBy(t.BOOKED_AT)
https://www.jooq.org/doc/3.0/manual/sql-building/column-expressions/window-functions/
【讨论】:
OP 询问是否查询分区表,这与窗口函数完全不同(尽管使用相同的关键字)。 啊,我的错。我不确定 jooq 是否应该对此提供本机支持,因为它完全依赖于 Oracle。感谢您的正确回答! 其他数据库我没查过,但至少DB2和PostgreSQL也支持分区表。我认为支持此供应商特定功能没有问题,但它可能不是优先事项。以上是关于jooq 从表的特定分区中选择的主要内容,如果未能解决你的问题,请参考以下文章