amazon-redshift - 有多个 sortkey 列是什么意思?

标签 amazon-redshift

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/

相关文章:

amazon-redshift - 无法连接到 redshift 数据库

python - 使用 psycopg2 和 Lambda 更新 Redshift (Python)

amazon-redshift - 如何确保正在被替换的表上的同步 DDL 操作?

amazon-redshift - 在 RedShift 中声明一个变量

mysql - 将类似 sql 查询的结果按百分位数分组 : In Redshift/postgresql

.net - 使用 log4net 的 adonetappender 登录到 redshift

amazon-web-services - AWS Datapipeline RedShiftCopyActivity-如何指定 "columns"

amazon-redshift - 临时表上的 distkey 和 sortkey - Redshift

sql - 行数据之间的划分 - SQL

amazon-web-services - 在 AWS CloudFormation 中定义表、 View 和索引