什么是Runtime Filter,它在ADB PG中有什么作用?
Runtime filter是一种查询优化技术,它是在查询执行期间动态生成的过滤器。在查询执行过程中,Runtime filter可以根据已经扫描到的数据值或者其他信息,过滤掉不需要的数据,从而减少查询的数据量,提高查询性能。常见的Runtime filter有Bloom Filter和Min-Max Filter等。它们可以用于多种查询场景,如join、group by、order by等。
untime filter可用于Hash Join的加速。以SQLSELECT * FROM sales JOIN items ON sales.item_id = items.id WHERE items.price > 1000为例,sales表是事实表,items是维度表,维度表较小,通过条件price>1000可以进一步减少返回的记录数。在执行join时,可以依据满足条件的item_id结果集建立filter,例如满足条件的min,max分别是1,100,可以生成id > 1 and id < 100的过滤表达式,也可以生成ID的in(id1,id2,id3 ...)表达式。Runtime filter传递给左表,左表在扫描记录进行probe时,可以通过filter提前过滤不满足条件的记录,减少probe的次数。对于字符串类型,还可以为右表结果集建立Bloom filter来做提前过滤,当然本身Bloom filter也有代价,不太适合结果集比较大的场景。更进一步,如果左表列上有粗糙索引,可以依据filter来做过滤,减少数据块扫描。在MPP场景,Runtime filter也能发挥作用,可以有效减少shuffle的数据量。
——参考链接。
Runtime Filter的目的是在Join计算前筛选掉一部分数据,以减少Join计算的数据量。在ADB PG中,Runtime Filter被设计用来从Join根源上减少网络Shuffle开销,提升Join性能。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。