tispark直接通过pd查询tikv,有索引的情况下整体流程是什么
2 个赞
官方文档早已看过了,项目中也用到了,现在遇到的问题是where条件中用到了索引字段a。如果是a>=1 and a<150查询有14个task;如果是a in (1,2,3,4…149)的查询,有58个task
tispark直接通过pd查询tikv,有索引的情况下整体流程是什么
这种情况下,TiSpark 会根据从 tikv 中获取的统计信息,做出成本最小的 plan。即使有 index, 并不意味着某一个查询一定走 index scan。相反地,如果 table scan 成本更小,TiSpark 会走 table scan。
task number 根据 region number
能否请你再详细说一下问题呢。 如果你说的是 region task,这个取决于数据分布的。 TiSpark 通过 where 条件获取此次查询的 key range,进而将这些 key range 按照 region (region 也是有 range 的) 的维度来进行拆分形成不同的 task。 另外在某些情况,task 也会在 RDD 执行是再次拆分,比如某个 region 发生分裂的时候。
希望以上答案有所帮助。
1 个赞
不太明白,您回复的截图是什么意思。 可否详细描述下?
primary_partition字段应范围查询有3个task,用in有58个task。。。。。。
能否给出对应的查询计划?
可以执行 spark.sql(“explain select xxxx”).show() 获取。
我初步怀疑是,where 下推了 但是 in 没有下推。 导致前者只需要获取部分数据,而后者需要扫全表。
1 个赞
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。