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 の確認

-- 列の dist と 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
    
  • Distkey 列

    • t は True、f は False
  • SORTKEY 列
    • はソートキー内の位置、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入門

Ayo berlatih!

Redshift入門

Preparing Video For Download...