はじめに
RedshiftのUDFを使ったことがなかったのでその備忘録になります。
シチュエーション例
Redshiftで、先月のデータを取得したい、みたいな要件が多々あります。
でも毎回先月月初、今月月初を書くのが大変。
/**
* 先月生成されたデータを取得
*/
SELECT * FROM table_name
WHERE
created_at >= DATE_TRUNC('month',ADD_MONTHS(CONVERT_TIMEZONE('JST', GETDATE()), -1)) -- 先月月初から
AND created_at < DATE_TRUNC('month',CONVERT_TIMEZONE('JST', GETDATE())) -- 今月月初未満
「先月月初」「今月月初」みたいなよく使う定義を
ユーザー定義関数(UDF)にしてみたらどうかな...と思いやってみます
対応
今月月初
CREATE FUNCTION f_first_day_of_this_month ()
RETURNS datetime
STABLE
AS $$
SELECT DATE_TRUNC('month',CONVERT_TIMEZONE('JST', GETDATE()))
$$ LANGUAGE sql;
先月月初
CREATE FUNCTION f_first_day_of_last_month ()
RETURNS datetime
STABLE
AS $$
SELECT DATE_TRUNC('month',ADD_MONTHS(CONVERT_TIMEZONE('JST', GETDATE()), -1))
$$ LANGUAGE sql;
使用例
/**
* 先月生成されたデータを取得
*/
SELECT * FROM table_name
WHERE created_at >= f_first_day_of_last_month()
AND created_at < f_first_day_of_this_month()
まとめ
UDFでちょっとだけ楽になりました。
ただ、、、僕自身が使い慣れていないので今後活用していくかは様子を見ていきます。
文献