如何显式指定分区在ActiveRecord SELECT查询?



我有一个很大的分区表,在执行SELECT查询之前我知道分区名。

在香草SQL语法是SELECT * FROM objects PARTITION (p1)

我目前的解决方案似乎是工作,但看起来有点粗糙:

active_record_relation.to_sql.gsub('FROM `objects`', "FROM `objects` PARTITION(#{explicit_partition_name})")

我想知道是否有一个更习惯的ActiveRecord解决方案?


只是为了清楚,我知道分区修剪,但我不能使用它,因为分区哈希/查找逻辑是一个外部组件/系统。

数据库是MySQL。

就因为我偶然发现了这篇文章,所以你可以以一种侧面的方式构建它

partition_name = 'p1'
active_record_relation.from(
Arel::Nodes::UnaryOperation.new(
active_record_relation.arel_table.name, 
Arel::Nodes::NamedFunction.new('PARTITION',[Arel.sql(partition_name)])
)
)
这将生成所需的SQL
SELECT 
objects.* 
FROM  
objects PARTITION(p1)

完整示例:

table = Arel::Table.new('objects')
table 
.project(table[Arel.star])
.from(Arel::Nodes::UnaryOperation.new(
table.name, 
Arel::Nodes::NamedFunction.new('PARTITION',[Arel.sql('p1')])))
.to_sql

相关内容

  • 没有找到相关文章

最新更新