Redshift 允许将多个列指定为 SORTKEY
列,但大多数最佳实践文档的编写方式好像只有一个 SORTKEY。
如果我用 SORTKEY (COL1, COL2)
创建一个表,这是否意味着所有列都按 COL1 排序,然后按 COL2 排序?或者,因为它是一个列式存储,所以每一列都以不同的顺序存储? IE。 COL1按COL1顺序,COL2按COL2顺序,其他列无序?
我的情况是我有一个表(其中包括)一个 type_id 和一个时间戳列。数据大致按时间戳顺序到达。大多数查询都受到 type_id 和时间戳的连接/限制。通常 type_id 子句更具体,这意味着通过查看 type_id 子句比查看时间戳子句可以排除更大比例的行。由于这个原因,type_id 是 DISTKEY。我试图了解 SORTKEY (type_id)
的利弊, SORTKEY (stamp)
, SORTKEY (type_id,stamp)
, SORTKEY (stamp,type_id)
.
谢谢。
最佳答案
如果您声明 SORTKEY(COL1, COL2)
,所有列将按 COL1
排序,然后 COL2
好像ORDER BY (COL1, COL2)
已完成。
如果您正在使用 SORTKEY
要加速 JOIN,AFAIU 只要您使用相同的 SORTKEY
就无所谓了在将要连接的表上,因为发生的是合并连接。
如 COL1
像您的 type_id
一样具有高度选择性,这意味着只有少量行具有相同的 type_id
.因此,尽管您可以向 SORTKEY 中添加另一列,但它的效用是有限的,因为大部分行消除已经发生。
如 COL1
不像你的stamp
那么挑剔(顺便说一句,这有点奇怪;我原以为它比 type_id
更具选择性?无论如何......),这意味着通过 stamp
过滤不会消除那么多行。所以声明第二个排序键更有意义。然而,这比其他方式效率低,因为提前消除行会更便宜。如果您有时按 stamp
过滤但不是来自 type_id
,不过这样做可能是有意义的。
关于amazon-redshift - 有多个 sortkey 列是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17115069/