[Redshift] テーブル作成には複数の手段が存在する

2016.12.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

テーブル作成には状況に応じて複数の手段が用意されています。必要に応じて使い分けるととても便利なので、小ネタですが備忘録として書きます。

環境

MacOSX 10.10.5 Yosemite
Redshift 1.0.1125

派閥別一覧

正統派:CREATE TABLE

基本ですね。
RedshiftではENCODE(圧縮)、DISTSTYLE(分散キー)、SORTKEY(ソートキー)の指定が他のDBと違う所です。
Amazon Redshift | CREATE TABLE

CREATE TABLE blog.test (
  id INTEGER ENCODE lzo
  , title VARCHAR(8) ENCODE lzo
  , PRIMARY KEY(id)
)
DISTSTYLE ALL
SORTKEY(id);

一時的派:TEMP TABLE

一時テーブルなので、トランザクションが終了すると削除されてしまいます。
ぱっと見はCREATE TABLEと似てますが、圧縮ができないので使い所を考えないとOut Of Memory必要があります。

CREATE TEMP TABLE test3 (
 id INTEGER
 , title VARCHAR(8)
);

あまり細かい事は言わないよ派:CREATE TABLE AS (CTAS)

CREATE TABLE程ではないけど部分的に設定できます。
Amazon Redshift | CREATE TABLE AS
注意事項として、作成元のテーブルから圧縮のエンコーディング、制約、ID 列、デフォルトの列値、プライマリキーを継承しない、などがあります。
Amazon Redshift | CTAS の使用に関する注意事項

CREATE [TEMP] TABLE blog.test2 
DISTSTYLE EVEN 
SORTKEY(fruit_id)
AS
SELECT *
FROM blog.fruit;

緊急派:SELECT INTO

SELECT分からいきなりテーブルにできてしまいますので、今すぐにとりあえずCREATEしたい派に役立ちます。
上記のCTASとの違いも確認しておきましょう。
Amazon Redshift | SELECT INTO

SELECT *
INTO [TEMP] TABLE blog.test4
FROM blog.fruit;

節約派:VIEW

テーブルの様に扱えると言う事で...長所は容量を食わない所ですが、短所は場合により処理に時間がかかる事です。
Amazon Redshift | CREATE VIEW

CREATE VIEW blog.test_view 
AS
SELECT name, price FROM blog.fruit;

さいごに

状況によって使い分けられると言ってもたまにしか使わないのもあり、備忘録として(個人的に)役立つかな、と思います。
他にも見つけたら追記して行きたいと思います。