Skip to main content

Qron( β 版)

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

qron0

Qron を使うメリット ✨

  • Slack に投稿: 日常的なチャットツールである Slack に簡単に情報を共有・確認することができるので、データアクセスの手間を大幅に削減可能
  • 柔軟な配信スケジュール: unix-cron 形式で配信スケジュールを設定できるので、毎日のチェックを必要とする重要なデータや、特定のタイミングでしか確認しないデータなど、用途に合わせた柔軟な配信が可能

ぜひ、Qron を日々のデータ活用にご利用ください。

info

数字の正確性を担保をしたいので、本機能は Associate クラス以上の特典となっております。

現在、Beginner クラスに属していて Qron を利用したい方は、Associate クラス以上の人に SQL のチェックをしてもらった上で利用することが可能です。

概要

Qron では、決められたフォーマットに変換された SQL を Slack に通知することができます。

SQL の出力には、集計軸の dimension と指標の fact の列が必須になります。それ以外の列名では登録できません。

e.g. 全社の新規注文件数(過去 7 日間)
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 |

qron1

グループ化

SQL の出力に group_id という属性を追加すると、グルーピングした結果を通知することができるようになります。

2 つ以上ディメンションを使いたいときに利用してください。

e.g. 各社ごとの新規注文件数(過去 7 日間)
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 |

qron2

差分

SQL の出力に delta という集計列を追加すると、各行の差分を見やすくした形式で投稿することできます。

delta は、 group_id と併用可能です。

info

※差分の計算は、SQL 側で実装してください。

e.g. 全社の新規注文件数(過去 7 日間)
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 |

qron3

Retool

Qron の設定は、Retool で行います。

ジョブの作成

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

qron4

qron5

1. タイトル

アプリの表示名を設定します。

qron6

qron7

2. 説明文

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

qron8

qron9

テキストの装飾には、Slack のマークダウン記法が使えます。

よく使うのはこの辺だと思います。

用途コマンド
@channel<!channel>
@here<!here>
@ユーザー名<@user_id>
太字*テキスト*
引用>テキスト
リンク<URL|テキスト>
インラインコード`テキスト`

ユーザー ID は、Slack のプロフィールから取得できます。

qron10

3. 定期実行の頻度

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

qron11

設定は、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 のチャンネル情報から取得できます。

qron12

5. 作成者

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

qron13

6. SQL

概要で説明したので、詳細は割愛します。

BigQuery で正常に動作することを確認し、コードを貼り付けてください。

qron14

7. 差分の表示形式(オプション)

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

qron15

qron16

それぞれの表示形式の変換イメージは次の通りです。

intfloatpercent
111.00100.00%
0.598760000210.6059.88%

テスト

フォームの入力が終わったら、『作成』を押す前に『テスト』を押してください。

qron17

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

qron18

メッセージが来なかった場合は、何かしらの設定をミスしている可能性が高いので、トラブルシューティングよろしくお願いします。

作成

エフェメラルメッセージを確認したら、『作成』を押してジョブを作成してください。

qron19

qron20

ジョブの更新(修正)

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

qron21

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

qron22

あとは、ジョブの作成と同様なので割愛します。

ジョブの強制実行

ジョブを unix-cron で設定した時間にではなく、直ちにジョブを実行したい場合は、強制実行ボタンを押します。

qron23

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

qron24

qron25

ジョブの削除

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

qron26

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

qron27

qron28

enjoy !