gpt4 book ai didi

amazon-web-services - Redshift DISTKEY/SORTKEY

转载 作者:行者123 更新时间:2023-12-04 11:10:02 26 4
gpt4 key购买 nike

我有一个非常技术性的问题,关于 Redshift 如何处理 DISTKEYSORTKEY内部以满足存储层和查询执行需求。我读过这个惊人的 post这很好地解释了每个关于 table 设计的含义。

我的问题是让我们假设我有一个包含三列的表 A:

CREATE TABLE (
orderdate timestamp distkey,
product_id varchar(50),
product_name varchar(250)
) SORTKEY (product_id)

现在,我们知道 Redshift 是一种针对数据仓库优化的列式数据库。在我的例子中很明显,数据在计算节点的切片之间分布的方式可能基于 DISTKEY订购日期。但是,列 product_id 会发生什么?和 product_name ?这些是与 orderdate 一起分发的吗?在同一个切片上,然后当我执行查询时,Redshift 使用基于我的 SORTKEY 的区域映射指出具有数据的列的区域并检索它?

如果 Redshift 是一种列式方法,那么每列不应该有不同的存储方式吗?或者这真正意味着:基于从所有列中明智地挑选出来的列,整列将与 DISTKEY 一起存储在同一切片上。然后为了保证性能,用户甚至可以将查询集中在特定区域以提取所需的数据。所以我总体上可能是这样的:

DISTKEY storage tier and SORTKEY query execution behave



现在,如果我使用 DISTKEY所以我的数据是根据准时的列顺序存储的,所以如果稍后,我使用 SORTKEY另一个给我的 DISTKEY无法更改或更改,所以这是如何工作的?

很抱歉,如果我错了,但我需要很好地理解这种架构如何在内部驱动数据。非常感谢

更新

基于回答这个问题的@JoeHarris 帖子,我试图描绘数据可能如何存储。

第一级分布是我的 DISTKEY (日期不好,但只是遵循相同的示例)然后在内部按我的 SORTKEY 进行 Redshift 排序,给出类似的东西:

enter image description here

感谢您的反馈

最佳答案

DISTKEY分发 片之间。

在您的示例中,具有给定 orderdate 的所有行将位于同一切片中。这意味着 这些行的所有列 在那个切片中。

如果两个表具有相同的 DISTKEY,则两个表中具有相同 DISTKEY 列值的所有行都将位于同一片上。

顺便说一下,日期和时间戳不是 DISTKEY 的好选择,因为它们很少用于 JOIN .唯一标识符,如 product_id会做一个更好的 DISTKEY。一般规则是使用出现在最多/最大 JOIN 中的列。
SORTKEY确定行在表中的排序方式。对于存储在每个切片上的行,它们按 SORTKEY 顺序存储。每列的数据存储在单独的块中(并且很可能每列使用许多块),但在列块内,行的顺序相同。

例如,如果一个表有三列,那么每个切片至少会占用三个块(每列一个)。在这些列块中,行的顺序相同。

每个块还有一个最小值和最大值(“区域 map ”),这使得 Redshift 可以很容易地“跳过”不包含所需值的块。这极大地提高了性能,因为磁盘访问是操作中最慢的部分。

关于amazon-web-services - Redshift DISTKEY/SORTKEY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com