本文介绍了根据小表的结果修剪大表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试了解是否可以减少在以下方案中扫描的分区数。
我有两个表:
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上的部分。
更多推荐
根据小表的结果修剪大表
发布评论