明日でよいか、今すぐか
大阪の物流会社では、冷蔵トラックで食品を運んでいます。
営業所長は、月末に「先月の配送件数」を知りたがります。明日の朝に分かれば十分です。
一方で、トラックの荷台の温度が上がったら、今すぐ運転手に知らせなければなりません。同じ会社のデータでも、届け方が二つ必要です。
このレッスンのゴール
メモ
データをウェアハウスに入れるときと、ストリームで流すときを見分けることができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| データウェアハウス | 分析のために、過去のデータを集めて保存する場所です。 | |
| バッチ処理 | たまったデータを、決まった時間にまとめて処理することです。 | |
| ストリーム | 届いたデータを一件ずつ、すぐに処理する流れです。 | |
| イベント | 一回の出来事を表す、一件のデータです。 | 温度 9度 |
| 遅延 | 出来事から、それが分かるまでの時間です。 |
学生が入力するセルは、このプレビューでは空白です。
ウェアハウスは、過去について答えます
データウェアハウスには、会社のいろいろなシステムのデータが集まります。多くの場合、毎晩のバッチ処理で、その日の分がまとめて入ります。
だから「先月は何件か」「去年と比べてどうか」のような、過去についての質問に向いています。
答えは、SQLで聞きます。データは前の晩までのものなので、半日ほどの遅れがあります。
ウェアハウスに聞く
-- 毎晩ウェアハウスに入る、配送の記録です。
-- 月ごとの配送件数を出します。
SELECT month, SUM(deliveries) AS total
FROM monthly_deliveries
GROUP BY month
ORDER BY month;
-- 3行の month を branch に変えて、営業所ごとの件数を出しましょう。
ストリームは、今すぐ動きます
トラックの温度計は、数十秒ごとに温度を送ってきます。この一件一件がイベントです。
ストリームでは、イベントが届いた瞬間に調べます。温度が8度を超えたら、その場で運転手に警告を送ります。
明日の朝に分かっても、食品はもう傷んでいます。待てない質問には、ストリームを使います。
温度を一件ずつ調べる
# 冷蔵トラックから、温度が一件ずつ届きます。
readings = [
{"truck": "T-01", "temp": 4},
{"truck": "T-02", "temp": 6},
{"truck": "T-01", "temp": 9},
{"truck": "T-03", "temp": 5},
{"truck": "T-02", "temp": 10},
]
limit = 8
# 届いた順に、一件ずつすぐに調べます。
for r in readings:
print(r["truck"], r["temp"], "度")
if r["temp"] > limit:
print(" 警告: 運転手に連絡します", r["truck"])
# limit を 5 に変えて、警告がどう増えるか見ましょう。
よくある間違い
注意
何でもリアルタイムにするほうがよい、と考える人が多いです。でもストリームは、作るのも動かし続けるのも費用がかかります。だれかが今すぐ動く必要があるときだけ、ストリームにします。それ以外は、夜のバッチで十分です。
どちらにするか決める
| 質問 | すぐに動く必要 | 行き先 |
|---|---|---|
| 先月の営業所別の配送件数 | ない | ウェアハウス |
| 荷台の温度が上がった | ある | ストリーム |
| 去年の同じ月との比較 | ない | ウェアハウス |
| トラックが道路で止まったまま | ある | ストリーム |
学生が入力するセルは、このプレビューでは空白です。