Redshift 分析のための Window 関数まとめ
こんにちは、 @kz_morita です。
Redshift に溜まったユーザーの行動ログを分析しようとして Window 関数について調べてました. Window関数をある程度理解するとかなり分析の幅が増えるので,今回はWindow関数について学んだことをまとめます.
PostgreSQL と Amazon Redshift について Window関数の前に,Redshift と PostgreSQL の関係性について述べておきます.
Amazon Redshift の 公式サイト に書いてありますが,Redshift は PostgreSQL に基づいています.
基本的には共通しているところが多いですが,Amazon Redshift のほうがより分析ように特化しておりデータセットが巨大な場合や,SQLが複雑な場合に向いているようです.
ただし,頻繁に更新されたり,同時に複数SQLが実行されるような環境には向いていないようです.
Window 関数の書式 それでは早速 Window 関数の書き方について見ていきます.
Window 関数は主に SELECT 句 などで使用でき以下のような書式になります.
Window関数 OVER ( PARTITION BY パーティション ORDER BY 並び順 ROWS Windowフレーム ) 具体的な例を上げます.
SELECTuser_id,action,datetime,-- 各ユーザーごとに取った行動の新しい順で2番めの値を取得 NTH_VALUE(action,2)OVER(PARTITIONBYuser_idORDERBYdatetimeDESCROWSBETWEENUNBOUNDEDPRECEDINGANDUNBOUNDEDFOLLOWING)-- ユーザーの行動ログ FROMuser_logs上記の例を用いながら Window関数, パーティション,並び順,Windowフレーム の順に見ていきます.
Window 関数 Window 関数は,Windowという区切られた区間についての処理を行う関数になります.
NTH_VALUE(action,2)-- <- ココ OVER(PARTITIONBYuser_idORDERBYdatetimeDESCROWSBETWEENUNBOUNDEDPRECEDINGANDUNBOUNDEDFOLLOWING)上記の例で言うところの,NTH_VALUE(action, 2) という箇所が Window 関数になります.