星型架构的 Redshift 性能提升

问题描述 投票:0回答:1

我们有一个事实表和 3 个维度。

  1. Dim 是进程,其中是进程号、状态(打开或关闭)、PK 和其他几个列
  2. Dim是多个品牌的品牌,PK等
  3. Dim是供应商,有很多供应商,PK等
  4. Fack 表与 FK 的尺寸和测量,如最佳出价、数量

假设我想要查询 a) 对于特定供应商 b) 对于特定品牌 c) 特定品牌的所有开放流程 d) 特定供应商的所有封闭流程。 e) 或具体流程

事实上,一个流程可以始终适用于 1 个品牌,但有多个品牌 供应商。

在 Oracle 中,我将为供应商、品牌、流程状态和流程创建位图索引。这样我就可以更快地查询所有场景。

在 Redshift 中执行此操作的最佳方法是什么?如何最好地限制大事实表?查询的列是维度的,因此总会对事实表进行全面扫描?例如,如果存在 50:50 打开与关闭的进程等,我是否应该将进程的状态作为属性放置在事实表中以仅扫描半个表?

我很确定维度将具有分布样式,因为没有太大的 amd 来避免广播,但是如果有时在Where子句中只使用一个谓词有时会超过1,那又怎么样呢?

amazon-web-services performance amazon-redshift
1个回答
0
投票

Amazon Redshift 的基本规则是:

  • WHERE
    中通常使用的色谱柱应该是
    SORTKEY
  • 通常在
    JOIN
    中使用的列应位于
    DISTKEY

当Redshift将数据存储在磁盘上时,每个1MB块都有一个“区域映射”,用于标识列的最大值和最小值(它是列式数据库,因此列是单独存储的)。这意味着 Redshift 可以“跳过”不包含相关值的磁盘块。这是 SORTKEY 提供最大好处的地方。

另请参阅:选择最佳排序键 - Amazon Redshift

© www.soinside.com 2019 - 2024. All rights reserved.