【StarRocks版本】例如:2.5
【集群规模】例如:3节点(fe与be混部)
【背景】在业务上,需要根据传入的任务号,去一个任务表中获取任务所在日期-也是分区值,再基于这些分区值去另一张业务大表中查询相关的数据,想知道是否有进行分区裁剪的优化
【详述】
请问下,有几种写法,看执行计划,感觉也是没有走分区裁剪的,能不能帮确认下。tableA的分区字段是source_day,tableA有500个日期的分区
写法一:select t1.* from tableA t1 where source_day in(select distinct str_to_date(substr(source,1,8),’%Y-%m-%d’) as source_day from tableB)
执行计划显示,partitions:172/500,实际子查询的结果应该是只有几天的日期
写法二:create table tableC as select distinct str_to_date(substr(source,1,8),’%Y-%m-%d’) as source_day from tableB;
select t1.* from tableA t1 join tableC t2 on t1.source_day=t2.source_day;
执行计划也一样显示,partitions:172/500
写法三:select count(*) from tableA
执行计划显示,查询的分区数也是172/500
这三种场景下,分区裁剪是否真的生效了
这种in的值是动态从tableB查出来的,plan阶段没办法知道in的值,没办法做分区裁剪
那实际执行阶段呢,是个什么流程
看了下文档,确实有很多优化的地方。但好像还是没有找到对这种子查询方式获取分区的sql,从sql层面,表设计层面或者系统设置层面的优化方案,能再指点一下吗
这种动态生效的分区目前没啥好办法,除非在查询侧加上过滤条件使分区裁剪生效,where ds=“2024-07-17”