根据小表的结果修剪大表 [英] Pruning a large table based on the results from a smaller table
本文介绍了根据小表的结果修剪大表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试了解是否可以减少在以下方案中扫描的分区数。
我有两个表:
Table A (100M rows)
JOIN_KEY DATA_1 DATA_2 etc.
Table B (40K rows)
JOIN_KEY FILTER_COL_A FILTER_COL_B
当用户想要查询表A中的数据时,需要通过FILTER_COL_A
&;FILTER_COL_B
过滤,从表B中获取相应的JOIN_KEY
值。
当筛选FILTER_COL_A
&;FILTER_COL_B
时,它将为JOIN_KEY
生成非常少的值-通常只有3个,但也可能更多。
表A按JOIN_KEY
群集化。
当我编写一个查询来连接JOIN_KEY上的两个表,然后对FILTER_COL_A
和FILTER_COL_B
进行筛选时,将扫描表A上的所有分区,而不是800个分区中的大约5个分区。
我不能像在运行时那样直接筛选JOIN_KEY,在从表B返回数据之前,我不知道它应该是什么值。
有没有一种方法可以构造查询,以便Snowflake在联接筛选器中使用表B的结果并修剪表A的大部分分区?
推荐答案
发布此答案,以防其他人遇到此问题。
在编写本文时,它似乎只有在表A和表B上的JOIN_KEY
列的数据类型均为number(38,0)
时才有效。
当使用number (38,0)
时,Snowflake根据FILTER_COL_A
和FILTER_COL_B
过滤后的表B的结果修剪表A上的部分。
这篇关于根据小表的结果修剪大表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文