Redshift 中的表

Redshift 入门

Jason Myers

Principal Engineer

创建表

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Redshift 入门

数据分布

Redshift 集群

  • 跨计算节点分布
  • 使用 Redshift 内部行 ID、DISTKEYPRIMARY KEY
  • 多种分布样式
Redshift 入门

分布样式

Name Description Usage
ALL 每个节点上都有整张表 适用于连接中常用的小型事实查找表
KEY 按 DISTKEY 列的数据分布 在按 DISTKEY 聚合或连接时使用
EVEN 按行轮循分布到各节点 适用于无键的大表
AUTO 小表用 ALL;如有合适 DISTKEY 且表变大则用 KEY,否则回退到 EVEN 默认
Redshift 入门

DISTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
-- 将数据分布键设为 organization_id
DISTKEY(organization_id);
CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    -- 将 organization_id 设为数据分布键
    'organization_id' VARCHAR(31) DISTKEY,
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Redshift 入门

设置分布样式

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
DISTKEY(organization_id)
-- 将分布样式设为 KEY
DISTSTYLE KEY;
Redshift 入门

SORTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
DISTKEY(organization_id)
DISTSTYLE KEY
-- 将排序键设为 fk_monitoringlocation
SORTKEY(fk_monitoringlocation);
  • 控制磁盘上的存储顺序
  • 增强谓词下推能力
  • 可有多个
Redshift 入门

定义多个 SORTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
-- 将 fk_monitoringlocation、organization_id 设为复合排序键
COMPOUND SORTKEY(fk_monitoringlocation, organization_id);
Redshift 入门

查看列的 DISTKEY 与 SORTKEY 状态

-- 查看列的分布键与排序键状态
SELECT column_name, 
       distkey, 
       sortkey
  FROM SVV_REDSHIFT_COLUMNS
 -- 仅限 spectrumdb 架构
 WHERE schema_name = 'spectrumdb'
   -- 目标表:ecommerce_sales
   AND table_name = 'ecommerce_sales';
  • 结果

       column   | distkey | sortkey
    ============|=========|========
    year_qtr    | t       | 1
    total_sales | f       | 2
    ecom_sales  | f       | 0
    
  • 分布键列

    • t 表示 True,f 表示 False
  • 排序键列
    • 为在排序键中的位置,0 表示不在排序键中

Redshift 入门

查看分布样式

  • SVV_TABLE_INFO
  • 影响查询性能的表信息
    • 分布样式
    • 分布倾斜
    • 表大小
    • 排序键
    • 排序键倾斜
table          | encoded | diststyle       | sortkey1     | skew_sortkey1 | skew_rows
===============|=========|=================|==============|===============|===========
ecommerce_sales| N       | KEY(year_qtr)   | year_qtr     |               |          
date           | N       | ALL             | dateid       |          1.00 |
Redshift 入门

继续:查看分布样式

SELECT table
       diststyle 
  FROM SVV_TABLE_INFO
 WHERE schema like 'spectrumdb';
table           | diststyle 
================|============== 
ecommerce_sales | KEY(year_qtr)
Redshift 入门

Vamos praticar!

Redshift 入门

Preparing Video For Download...