Help us understand the problem. What is going on with this article?

Redshift使ったときに調べたこと

More than 3 years have passed since last update.

1年くらい前につけたメモが元なので最近は少し違うかもしれないけど

1.UPSERT

PrimaryやUniqueがRedshiftでは効かないからUPSERTするためには一時テーブルに読み込み→元テーブルから同じ主キーのレコードを消す→一時テーブルをくっつける操作が必要
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/merge-replacing-existing-rows.html

2.通し番号、連番

Redshiftにはシーケンスが無い
ROW_NUMBER() を使って通し番号をゲットする。
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_WF_ROW_NUMBER.html

UPDATE target_table
SET
  id_new = row
FROM
(
  SELECT
    id_org id
    ,row_number () over (partition by id_new ORDER BY id_new ASC) AS row
  FROM
    target_table
)
WHERE
  id_org = id
;

2回目以降のINSERT時にはやっぱ一旦一時テーブルにロードしてROW_NUMBER() をゲットしてそれを元テーブルのMAXやらに足してあげる

UPDATE target_table__stg
SET
  id_new = min_id + row
FROM
(
  SELECT
    id_org id
    ,row_number () over (partition by id_new ORDER BY id_new ASC) AS row
  FROM
   target_table__stg
)
WHERE
  id_org = id
;

3.最新のデータ

余裕でレコードが重複するので更新日が最新のものをとってくるクエリがよく必要になる

SELECT a.id, a.no, a.updt, a.dlfl
FROM table_ a, (SELECT id, MAX(updt) AS updt FROM table_ GROUP BY id) b
WHERE a.id = b.id AND a.updt = b.updt

4.COPYを使ったロード

INSERTは4万リクエストくらいでぶったぎられるからCSV作ってS3においてそっからロードする

http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/t_Loading_tables_with_the_COPY_command.html

5.DDLの取り出し

SQLワークベンチとかで頑張る

Database Explorer→テーブル右クリ→CREATE DDL SCRIPT

6.Redshiftに限らないけど便利でよくつかうUPDATE文

UPDATE文にFROMを使う
http://www.oss-db.jp/measures/dojo_20.shtml

7.客の無能クエリで容量もCPUも危ないときに使うCANCEL

PIDの調べ方とCANCELとABORT
クエリ実行中にタイムアウトしたり、客が失敗したクエリを放置したときに必要になる(しかも動作が重くなったって文句まで言ってくる)
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/cancel_query.html

8.いつの間にか検証DBが消えてたときに本番DBを壊さないで検証する一時テーブル

CREATE TEMP TABLE target AS SELECT

9.知ってたらよかったEXPLAIN

http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_EXPLAIN.html

10.参照権限

grant使う

grant select on table _TARGET_ to group read_only_group;

11.客のデータ型を無視した要求にこたえる

CAST - 数値型とか
LPAD - 左0埋めしてみたり
to_char - きっと便利

その他知ってるとよいこと

___uhu
マシュマロないとプログラムできない
http://uhu.cilantro.io/
opt
"INNOVATION AGENCY" を標榜するインターネット広告代理店。エンジニア組織 "Opt Techonologies" を中心にアドテクetc...に取り組んでいます。
https://opt-technologies.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away