amazon-web-services - Redshift 表适用于我的表的分配键和排序键
问题描述
我有一个表,其中列像 record_id、creation_date、active_time、inactive_time 和更多数据列。截至目前,表中有大约 12M 条记录。distinct 'record_id' (varchar(6)) values count in table is : 8M (data distribution is even on this column) distinct 'creation_date' (date) values count in table is : 800 (data distribution is even on this column) cluster详细信息 - 总切片为 16。
如果我谈论这个表与其他表的连接,它主要基于列'record_id'和'creation_date'。并且有一段时间 active_time 和 inactive_time 也参与了加入。
问题是:-
- 我应该将什么作为该表的 distribution_key,record_id 或 creation_Date ?
- 我应该拿什么排序键?正如我上面所说的 active_time 和 inactive_time 也参与了一段时间的连接,所以我应该在排序键中包含这 2 列吗?
解决方案
Amazon Redshift 的一般规则是:
- 设置为
DISTKEY
最常用的列JOIN
- 设置为
SORTKEY
最常用的列WHERE
1200 万行的表对于 Redshift 来说不是很大。即使你弄错了,它也会运行得很好。
我会推荐一个 DISTKEY record_id
(因为它似乎经常被加入)。
将 SORTKEY 设置为您通常用来限制结果的值。它只能是一列。Redshift 将按照给定列的顺序存储行,并且会记住每个 1MB 存储块中该列的最小值和最大值。这允许它“跳过”不包含该值的块。这使得查询运行得很快,因为它可以避免磁盘访问,这是任何数据库中最慢的部分。
推荐阅读
- java - Flux.generate(...) 的预加载元素
- python - 如何避免字典oneliner中的KeyError
- r - 基础 R 绘图到 ggplot
- javascript - 属性的属性没有“this”作为对根对象的引用
- python - Python的日期时间在特定时间范围内工作
- ios - Swift:在解雇的完成处理程序中呈现 VC
- python - Python,解析大型数组时出现“IndexError:列表索引超出范围”BeautifulSoup
- php - CodeIgniter PHP:仅当 URL 段实际存在时如何回显该段
- java - 在 Thymeleaf 中巩固一对多关系
- laravel - Laravel CSRF 保护如何保护自己免受子域 cookie 覆盖攻击?