我们有一个事实表和 3 个维度。
假设我想要查询 a) 对于特定供应商 b) 对于特定品牌 c) 特定品牌的所有开放流程 d) 特定供应商的所有封闭流程。 e) 或具体流程
事实上,一个流程可以始终适用于 1 个品牌,但有多个品牌 供应商。
在 Oracle 中,我将为供应商、品牌、流程状态和流程创建位图索引。这样我就可以更快地查询所有场景。
在 Redshift 中执行此操作的最佳方法是什么?如何最好地限制大事实表?查询的列是维度的,因此总会对事实表进行全面扫描?例如,如果存在 50:50 打开与关闭的进程等,我是否应该将进程的状态作为属性放置在事实表中以仅扫描半个表?
我很确定维度将具有分布样式,因为没有太大的 amd 来避免广播,但是如果有时在Where子句中只使用一个谓词有时会超过1,那又怎么样呢?
Amazon Redshift 的基本规则是:
WHERE
中通常使用的色谱柱应该是 SORTKEY
JOIN
中使用的列应位于 DISTKEY
当Redshift将数据存储在磁盘上时,每个1MB块都有一个“区域映射”,用于标识列的最大值和最小值(它是列式数据库,因此列是单独存储的)。这意味着 Redshift 可以“跳过”不包含相关值的磁盘块。这是 SORTKEY 提供最大好处的地方。