根据小表的结果修剪大表 [英] Pruning a large table based on the results from a smaller table

查看:8
本文介绍了根据小表的结果修剪大表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试了解是否可以减少在以下方案中扫描的分区数。

我有两个表:

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_AFILTER_COL_B进行筛选时,将扫描表A上的所有分区,而不是800个分区中的大约5个分区。

我不能像在运行时那样直接筛选JOIN_KEY,在从表B返回数据之前,我不知道它应该是什么值。

有没有一种方法可以构造查询,以便Snowflake在联接筛选器中使用表B的结果并修剪表A的大部分分区?

推荐答案

发布此答案,以防其他人遇到此问题。

在编写本文时,它似乎只有在表A和表B上的JOIN_KEY列的数据类型均为number(38,0)时才有效。

当使用number (38,0)时,Snowflake根据FILTER_COL_AFILTER_COL_B过滤后的表B的结果修剪表A上的部分。

这篇关于根据小表的结果修剪大表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆