本文主要是介绍Redshift - 表设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
AWS Redshift 中设计表
AWS Redshift 是基于 PostgreSQL 的数据仓库。 那么如何创建一个表, 这个表的创建于普通的关系型数据库的表有什么不同呢?
在创建 Redshift table 时, 可以选择排序键、分配方式和压缩编码。
设计表是为了 减少 I/O 操作数和尽量减少处理查询所需的内存。
Sort key:
排序键将您的数据按照排序顺序存储在磁盘中。Amazon Redshift 查询优化程序在确定最佳查询计划时会使用排序顺序。
如何选择排序键:
- 根据需要频繁查询的数据而决定, 例如时间列或常查询的某一列。
- 根据需要频繁查询的语句而决定, 例如联接表的关联列。
- 根据需要频繁查询的范围条件而决定, 例如条件范围。
Distribution style:
在执行查询时,查询优化程序根据执行联接和聚合的需要将行重新分配到计算节点。选择表分配方式的目的是通过在运行查询前将数据放在需要的位置来最大程度地减小重新分配步骤的影响。
- 数据表只能有一个分配键
- 只有用于联接的行需要分配,因此需要考虑筛选后的数据集的大小,而不是表的大小。
- 在过滤的结果集中选择基数高的列。
分配方式:
KEY 分配:
根据一列中的值分配行。领导节点会尝试将匹配的值放置到同一个节点切片上。
ALL 分配:
向每个节点分配整个表的副本。EVEN 分配或 KEY 分配只将表中的部分行放置在每个节点上,而 ALL 分配则确保为该表参与的所有联接并置每一行。
EVEN 分配:
不管任意特定列中的值是什么,系统都以轮询方式向所有切片分配行。EVEN 分配是默认分配方式。
AUTO 分配:
在自动 (AUTO) 分配方式下,基于表数据大小分配最佳分配方式。最初向小型表分配的是 ALL 分配,然后在表变大时更改为 EVEN 分配。
通过 PG_CLASS_INFO 查看应用于表的分配方式。
SVV_TABLE_INFO 中的 DISTSTYLE 列指示表的当前分配方式。
例:
create table dist_key (col1 int)
diststyle key distkey (col1);create table dist_even (col1 int)
diststyle even;create table dist_all (col1 int)
diststyle all;create table dist_auto (col1 int);
Compression
可以在创建表时指定压缩编码,但在大多数情况下,自动压缩具有最佳的效果。
自动压缩将在选择压缩编码时平衡整体性能。如果排序键列的压缩率远高于同一查询中的其他列,则范围受限扫描的执行效果可能会很差。因此,自动压缩将选择一个效率较低的压缩编码来让排序键列与其他列保持平衡。
压缩方式:
Raw, AZ64, Byte-dictionary, Delta, LZO, Mostly, Runlength, Text255 and Text32k, ZSTD
例:
create table customer(
custkey int encode delta,
custname varchar(30) encode raw,
gender varchar(7) encode text255,
address varchar(200) encode text255,
city varchar(30) encode text255,
state char(2) encode raw,
zipcode char(5) encode bytedict,
start_date date encode delta32k);
主外键
不强制实施唯一、主键和外键约束。
除非您的应用程序强制实施约束,否则不要定义主键和外键约束。Amazon Redshift 不强制实施唯一、主键和外键约束。 如果主键不唯一,则会造成问题。
这篇关于Redshift - 表设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!