はじめに
はじめまして、Timers で Bizdev とか Analytics とか PM とかなんかいろいろやってる岡本(非エンジニア)です。 今回は最新の日付とか、自分が思い描いている特定期間の日付を自動で取ってきてくれる(通称:日数自動計算)クエリをご紹介したいと思います。
分析の悩み
ところで、エンジニアではなく、分析を頑張ってる皆さん、こんな悩みないですか?
- 毎回日付だけ変更してクエリ書くの大変だし、間違えて、上司に怒られる・・・
- 非エンジニアの自分だと、プログラミングとかかけなくて、自動化出来なくて毎回日付を変えるの辛い・・・
手動対応の場合、誰しもが一度は間違ってしまうでしょうし、忙しくてどうしても時間が取れないときもあるかと思います。それに、エンジニアのリソースを分析になかなか割くことが出来ないという会社の事情もあるでしょう。
日数を自動計算するクエリを考えました
そこで、日数を自動で計算してくれるクエリ、もとい関数(みたいなもの)をご紹介します。
かくいう、Timers でも Redash と Slack をつないで自動で KPI を毎日追っています。
このブログでは、BigQuery の LegacySQL、StandardSQL と MySQL の日数自動計算クエリをご紹介。
SELECT 句を使って今日、今月 1 日、来月 1 日を出したいと思います。(毎月10日締めのサブスクリプションサービスとかで、期間を変更したいとかあれば、ご連絡ください。少しいじれば出来ます!)
早速ですが、BigQuery の LegacySQL から紹介します!(Timers では PM などの非エンジニアが分析するときに主に BigQuery を使っています。)
-- Legacy SQL SELECT CURRENT_TIMESTAMP() AS now_time, STRFTIME_UTC_USEC( CURRENT_TIMESTAMP(),"%Y-%m-01") AS YYMM01, STRFTIME_UTC_USEC( DATE_ADD( CURRENT_TIMESTAMP(),1,"MONTH"),"%Y-%m-01") AS YYMM01
つづいては、StandardSQL です。
-- StandardSQL SELECT CURRENT_TIMESTAMP() AS now_time, format_timestamp("%Y-%m-01" , current_timestamp() ) as YYMM01 , format_timestamp("%Y-%m-01" , timestamp( date_add( current_date() , INTERVAL 1 MONTH ) ) ) as YYMM01
最後にMySQL。
-- MySQL SELECT current_timestamp(), timestamp(DATE_FORMAT(CURRENT_timestamp(),"%Y-%m-01")) AS YYMM01, timestamp(DATE_FORMAT(timestampadd(MONTH,1,current_timestamp()),"%Y-%m-01")) AS YYMM01
BigQuery の Legacy SQL や StandardSQL で table_date_range 関数や _TABLE_SUFFIX を使った場合には、%Y-%m-01
の-
を取るなりして、対応すると、最新日や特定期間のテーブルを取ってきてくれます。
まとめ
以上、簡単な日数自動計算クエリの紹介でしたが、いかがでしたでしょうか。
僕は AB テストなど検証をしたときに、先にクエリだけ書いておいて、Redash で定期実行& Slack に自動連携という感じにして、楽をしています。(上司とか、経営陣に「そういえば、あれ、どうなったの?!」とか不意打ちでよく聞かれるので)
個人的にはできるだけ楽をしたいと思っている人間なので、もっと効率のいい方法あるよ!とか言う方はぜひご連絡を!
分析業務だけじゃなくて、次は新規事業系でよく使っている Zapier とかもご紹介出来たらと思います。
積極採用中!!
子育て家族アプリFammを運営するTimers inc. では、現在エンジニアを積極採用中! 急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください! 採用HP : http://timers-inc.com/engineerings