我正在尝试在redshift中加入两个表。一大一小。连接是通过它们的id,我已经通过列(用于连接)在集群上分发了大的连接,并且我也将此列用作sortkey。我在所有节点上整体分发的小表,并使用sortkey和用于连接的列。
示例:
create table table_small diststyle all SORTKEY(id) as select * from another_small_table;
create table big_table distkey (id) diststyle key SORTKEY(id) as SELECT * from another_big_table;
explain SELECT * FROM big_table big JOIN small_table small ON big.id = small.id;
查询计划说redshift正在进行散列连接而不是合并连接。这是预期的行为?我期待合并加入。
答案 0 :(得分:1)
根据
https://docs.aws.amazon.com/redshift/latest/dg/c-the-query-plan.html
合并加入
通常是最快的连接,合并连接用于内部连接和 外连接。合并连接不用于完整连接。这个运营商 在连接连接列所在的表时使用 分配键和排序键,当不到20%时 连接表是未排序的。它按顺序读取两个排序表 找到匹配的行。要查看未排序行的百分比,请查询 SVV_TABLE_INFO系统表。
所以 - 因为你没有(id)的分发键,所以不会使用这个连接类型。