Qron( β 版)
SQL の出力結果を Slack にスケジュール配信できる Qron(キューロン, SQL + cron) という機能を開発致しました。

Qron を使うメリット ✨
- Slack に投稿: 日常的なチャットツールである Slack に簡単に情報を共有・確認することができるので、データアクセスの手間を大幅に削減可能
- 柔軟な配信スケジュール: unix-cron 形式で配信スケジュールを設定できるので、毎日のチェックを必要とする重要なデータや、特定のタイミングでしか確認しないデータなど、用途に合わせた柔軟な配信が可能
ぜひ、Qron を日々のデータ活用にご利用ください。
数字の正確性を担保をしたいので、本機能は Associate クラス以上の特典となっております。
現在、Beginner クラスに属していて Qron を利用したい方は、Associate クラス以上の人に SQL のチェックをしてもらった上で利用することが可能です。
概要
Qron では、決められたフォーマットに変換された SQL を Slack に通知することができます。
SQL の出力には、集計軸の dimension と指標の fact の列が必須になります。それ以外の列名では登録できません。
select
date(RDW_Repeatplus_Order._TRANSACTION_TS) as dimension,
count(*) as fact,
from dwh.RDW_Repeatplus_Order as RDW_Repeatplus_Order
left join dwh.BDW_Repeatplus_Order as BDW_Repeatplus_Order
using (_HASHKEY)
where
BDW_Repeatplus_Order._number_of_orders = 1
and date(RDW_Repeatplus_Order._TRANSACTION_TS) between date_sub(current_date("Asia/Tokyo"), interval 7 day) and date_sub(current_date("Asia/Tokyo"), interval 1 day)
group by 1
order by 1
# | dimension(string, date, datetime) | fact(int64, float64) |
# | --------------------------------- | -------------------- |
# | 2023-11-10 | 2058 |
# | 2023-11-11 | 1488 |
# | 2023-11-12 | 1204 |
# | 2023-11-13 | 856 |
# | 2023-11-14 | 802 |
# | 2023-11-15 | 781 |
# | 2023-11-16 | 1818 |

グループ化
SQL の出力に group_id という属性を追加すると、グルーピングした結果を通知することができるようになります。
2 つ以上ディメンションを使いたいときに利用してください。
select
date(RDW_Repeatplus_Order._TRANSACTION_TS) as dimension,
count(*) as fact,
RDW_Repeatplus_Order._MULTI_TENANT_ID as group_id,
from dwh.RDW_Repeatplus_Order as RDW_Repeatplus_Order
left join dwh.BDW_Repeatplus_Order as BDW_Repeatplus_Order
using (_HASHKEY)
where
BDW_Repeatplus_Order._number_of_orders = 1
and date(RDW_Repeatplus_Order._TRANSACTION_TS) between date_sub(current_date("Asia/Tokyo"), interval 7 day) and date_sub(current_date("Asia/Tokyo"), interval 1 day)
group by 1, 3
order by 3, 1
# | dimension(string, date, datetime) | fact(int64, float64) | group_id(any) |
# | --------------------------------- | -------------------- | ------------- |
# | 2023-11-10 | 76 | bris |
# | 2023-11-11 | 90 | bris |
# | 2023-11-12 | 120 | bris |
# | 2023-11-13 | 96 | bris |
# | 2023-11-14 | 85 | bris |
# | 2023-11-15 | 96 | bris |
# | 2023-11-16 | 127 | bris |
# | 2023-11-10 | 207 | esella |
# | 2023-11-11 | 355 | esella |
# | 2023-11-12 | 312 | esella |
# | 2023-11-13 | 196 | esella |
# | 2023-11-14 | 202 | esella |
# | 2023-11-15 | 185 | esella |
# | 2023-11-16 | 129 | esella |
# | 2023-11-10 | 87 | from |
# | 2023-11-11 | 104 | from |
# | 2023-11-12 | 127 | from |
# | 2023-11-13 | 82 | from |
# | 2023-11-14 | 66 | from |
# | 2023-11-15 | 76 | from |
# | 2023-11-16 | 66 | from |
# | 2023-11-10 | 1619 | hugkumi |
# | 2023-11-11 | 857 | hugkumi |
# | 2023-11-12 | 578 | hugkumi |
# | 2023-11-13 | 412 | hugkumi |
# | 2023-11-14 | 373 | hugkumi |
# | 2023-11-15 | 363 | hugkumi |
# | 2023-11-16 | 1437 | hugkumi |
# | 2023-11-10 | 69 | minawa |
# | 2023-11-11 | 82 | minawa |
# | 2023-11-12 | 67 | minawa |
# | 2023-11-13 | 70 | minawa |
# | 2023-11-14 | 76 | minawa |
# | 2023-11-15 | 61 | minawa |
# | 2023-11-16 | 59 | minawa |

差分
SQL の出力に delta という集計列を追加すると、各行の差分を見やすくした形式で投稿することできます。
delta は、 group_id と併用可能です。
※差分の計算は、SQL 側で実装してください。
select
*,
fact - lag(fact) over(order by dimension) as delta
from (
select
date(RDW_Repeatplus_Order._TRANSACTION_TS) as dimension,
count(*) as fact,
from dwh.RDW_Repeatplus_Order as RDW_Repeatplus_Order
left join dwh.BDW_Repeatplus_Order as BDW_Repeatplus_Order
using (_HASHKEY)
where
BDW_Repeatplus_Order._number_of_orders = 1
and date(RDW_Repeatplus_Order._TRANSACTION_TS) between date_sub(current_date("Asia/Tokyo"), interval 7 day) and date_sub(current_date("Asia/Tokyo"), interval 1 day)
group by 1
)
order by 1
# | dimension(string, date, datetime) | fact(int64, float64) | delta(int64, float64) |
# | --------------------------------- | -------------------- | --------------------- |
# | 2023-11-10 | 2058 | null |
# | 2023-11-11 | 1488 | -570 |
# | 2023-11-12 | 1204 | -284 |
# | 2023-11-13 | 856 | -348 |
# | 2023-11-14 | 802 | -54 |
# | 2023-11-15 | 781 | -21 |
# | 2023-11-16 | 1818 | 1037 |

Retool
Qron の設定は、Retool で行います。
ジョブの作成
『新規作成』からジョブを作成することができます。フォームの各パラメータを適切に設定する必要があるので、このセクションで詳しく説明します。


1. タイトル
アプリの表示名を設定します。


2. 説明文
投稿内容の説明文を設定します。前提条件やデータの参照元などを明記してください。


テキストの装飾には、Slack のマークダウン記法が使えます。
よく使うのはこの辺だと思います。
| 用途 | コマンド |
|---|---|
@channel | <!channel> |
@here | <!here> |
@ユーザー名 | <@user_id> |
| 太字 | *テキスト* |
| 引用 | >テキスト |
| リンク | <URL|テキスト> |
| インラインコード | `テキスト` |
ユーザー ID は、Slack のプロフィールから取得できます。

3. 定期実行の頻度
メッセージを投稿する頻度を設定します。特別な事情がない限り、同じ SQL を投稿するのは 1 日数回程度にしておいてください。

設定は、unix-cron 形式で行います。(分) (時) (日) (月) (曜日) みたいな感じです。必ず半角で入力してください。
| unix-cron | 頻度 |
|---|---|
30 8 * * * | 毎日 8 時 30 分 |
0,30 * * * * | 毎時 0 分と 30 分 |
0 0 1 * * | 毎月 1 日の 0 時 0 分 |
0 9 * * 1-5 | 毎週月〜金の 9 時 0 分 |
4. チャンネル ID
投稿する Slack のパブリックチャンネルを指定します。DM やプライベートチャンネルには対応していません。
チャンネル ID は、Slack のチャンネル情報から取得できます。

5. 作成者
ジョブを作成者を登録します。選択式になっているので該当ユーザーを選んでください。

6. SQL
概要で説明したので、詳細は割愛します。
BigQuery で正常に動作することを確認し、コードを貼り付けてください。

7. 差分の表示形式(オプション)
delta 列を使用している場合、差分の表示形式を [int, float, percent] の中から選ぶことができます。


それぞれの表示形式の変換イメージは次の通りです。
| int | float | percent | |
|---|---|---|---|
1 | 1 | 1.00 | 100.00% |
0.5987600002 | 1 | 0.60 | 59.88% |
テスト
フォームの入力が終わったら、『作成』を押す前に『テスト』を押してください。

問題がなければ、エフェメラルメッセージ(※他の人には見えないメッセージ)が投稿されます。

メッセージが来なかった場合は、何かしらの設定をミスしている可能性が高いので、トラブルシューティングよろしくお願いします。
作成
エフェメラルメッセージを確認したら、『作成』を押してジョブを作成してください。


ジョブの更新(修正)
変更したいジョブを hover すると、編集ボタンが表示されるので、それを押します。

編集のモーダルウィンドウが表示されるので、修正したい箇所を適宜変更してください。

あとは、ジョブの作成と同様なので割愛します。
ジョブの強制実行
ジョブを unix-cron で設定した時間にではなく、直ちにジョブを実行したい場合は、強制実行ボタンを押します。

アラートダイアログの OK を押すとエフェメラルメッセージではなく、通常のメッセージとして投稿されます。


ジョブの削除
ジョブを削除したい場合は、削除ボタンを押します。

アラートダイアログの OK を押すとジョブが削除されます。


enjoy !