8. 8 @awscloud_jp #awsblackbelt
Redshiftの構成②
SELECT *
FROM lineitem;
SQLをコンパイル、
コードを生成し、コン
ピュートノードへ配信
CPU CPU CPU CPU CPU CPU
Leaderノード
Computeノード
スライス=
メモリとディスクを
ノード内で分割した論
理的な処理単位
コンピュートノードの追
加でパフォーマンス向上
(スケールアウト)
28. 28 @awscloud_jp #awsblackbelt
Interleaved Sort Keyのデータ配置イメージ
DeptId LocId
1 A
1 B
1 C
1 D
2 A
2 B
2 C
2 D
DeptId LocId
3 A
3 B
3 C
3 D
4 A
4 B
4 C
4 D
Compound Sort Key Interleaved Sort Key
DeptId LocId
1 A
1 B
2 A
2 B
1 C
1 C
2 D
2 D
DeptId LocId
3 A
3 B
4 A
4 B
3 C
3 D
4 C
4 D
DeptId = 1 -> 1 block
LocId = C -> 4 block
DeptId = 1 -> 2 block
LocId = C -> 2 block
DeptId=1 and LocId=C-> 1 block
32. 32 @awscloud_jp #awsblackbelt
EVEN vs. DISTKEY(1)
• EVEN • DISTKEY=p_partkey
select trim(name) tablename, slice,
sum(rows)
from stv_tbl_perm where name='part'
group by name, slice
order by slice;
tablename | slice | sum
-----------+-------+---------
part | 0 | 1600000
part | 1 | 1600000
…
part | 126 | 1600000
part | 127 | 1600000
tablename | slice | sum
-----------+-------+---------
part | 0 | 1596925
part | 1 | 1597634
…
part | 126 | 1610452
part | 127 | 1596154
各スライスに均等に分散 キーのカーディナリティに依存
33. 33 @awscloud_jp #awsblackbelt
EVEN vs. DISTKEY(2)
• DISTKEY = p_brand
tablename | slice | sum
-----------+-------+---------
part | 0 | 0
part | 1 | 0
part | 2 | 0
part | 3 | 0
part | 4 | 8193350
…
part | 118 | 8193342
part | 119 | 0
part | 120 | 16384823
part | 121 | 8191943
カーディナリティの低い
カラムでは、データの極端な
偏りが生じる場合がある
= クエリー処理効率の低下
34. 34 @awscloud_jp #awsblackbelt
ALL
• 全レコードが各ノードの特定スライスに集約
tablename | slice | sum
-----------+-------+---------
part | 0 |204800000
part | 1 | 0
part | 2 | 0
part | 3 | 0
part | 4 | 0
…
part | 96 |204800000
part | 97 | 0
part | 98 | 0
…
…
各ノードの先頭スライスに
全レコードが格納される。
35. 35 @awscloud_jp #awsblackbelt
コロケーション(1)
• 関連するレコードのコロケーション
– ジョイン対象となるレコードを同一ノードに集める
• コロケーションの方法
1. ジョインに使用するカラムをDISTKEYとして作成 または
2. 分散方式 ALLでテーブルを作成(マスター・テーブルなど)
select sum(l_extendedprice* (1 - l_discount)) as revenue
from lineitem, part
Where (p_partkey = l_partkey …
1. それぞれをDISTKEYとして作成
または
2. テーブルをALLで作成
36. 36 @awscloud_jp #awsblackbelt
コロケーション(2):DISTKEY
6200995 | almond pale linen
| Manufacturer#3| Brand#32
part
lineitem
5024338535 | 6200995 | 0.01
|0.08 | A | F
|1992-01-02 | 1992-02-14
2201039 | almond pale linen
| Manufacturer#1| Brand#11
part
lineitem
121932093 | 2201039 | 0.05
|0.43 | D | E
|1994-07-11 | 1994-08-23
59. 59 @awscloud_jp #awsblackbelt
WLMパラメータとパラメータの動的変更
• 新しくWLMのパラメータにdynamicとstaticの区別が用意され、
dynamicはRedshiftを再起動せずにパラメータ変更が可能に
• dynamic parameter
– Concurrency(並列実行数),
– Percent of memory to use (メモリ使用量)
• static parameter
– User groups
– User group wildcard
– Query groups
– Query group wildcard
– Timeout
New!!
62. 62 @awscloud_jp #awsblackbelt
UDF定義の例
• 例)引数aとbを比較して大きい方を返すUDF
CREATE FUNCTION f_greater (a float, b float)
RETURNS float STABLE
AS $$
if a > b: return a
return b
$$ LANGUAGE plpythonu;
SELECT f_greater (c1, c2) FROM t1