Kapitoly kurzu
1. Obsahová mapa kurzu 2. Notebooky: PySpark vs Pure Python 3. Demo: Tři cesty a Mini Medallion 4. CU Costs a Capacity Metrics 5. SQL trojúhelník 6. Real-Time Intelligence: demo arc 7. Semantic modely, DAX a optimalizace 8. Security a administrace Fabricu 9. Zkouška DP-600: tipy
Runbooky — medallion
10. Mini Medallion ČHMÚ 11. Mini Medallion NYC Taxi 12. NYC Taxi třemi cestami 13. Mini Medallion OpenAQ 14. Big Medallion OpenAQ (2 roky)
Runbooky — RTI
15. RTI Library: architektura 16. A: Bicycles 60s 17. B: ČHMÚ HTTP polling 18. C: NDIC dopravní detektory 19. D: Camera ALPR simulátor 20. E: PID GTFS-RT 21. F: Activator alerty 22. KQL cheat sheet
🏠 Rozcestník kurzu
DP-600 · Kapitola 6

Real-Time Intelligence: demo arc

Story arc RTI bloku, architektura, rizika a příprava — rozcestník do RTI Library
🗂 Kapitola kurzu

Cíle kapitoly

  • Popsat story arc RTI bloku A → B → F a roli jednotlivých dem z RTI Library
  • Nakreslit architekturu ČHMÚ streamu: Eventstream → Eventhouse / KQL DB → dashboard → Power BI
  • Znát rizika live dema a připravené fallbacky
  • Projít pre-kurz checklist RTI části
6.1

Shrnutí rozhodnutí

Strategy shift: Z původního „2 demos pro live kurz" na reusable RTI Library s 6 demos. Demos jsou knihovna použitelná napříč kurzem, klientskými POCs, blog posty a konferenčními talky.

📁 Hlavní artefakt: RTI Library — viz runbooky 15–22 v těchto materiálech.

Demo Pattern Auth Use cases
A — Bicycles 60s Sample Data žádná RTI opener, zero-setup intro
B — ČHMÚ Polling HTTP poll → Custom Endpoint žádná Hlavní hands-on, navazuje na Days 1-2
C — NDIC Traffic HTTP poll s API key API key Auth pattern, real CZ infrastructure
D — Camera ALPR Synthetic events → Custom Endpoint žádná IoT/camera pattern, nejvíc reusable
E — PID GTFS-RT Protobuf adapter Notebook API key Adapter pattern, flagship blog material
F — Activator Alerts bolt-on k B/D M365 Detect → decide → act loop

Pro Day 4 RTI blok: doporučená sekvence A → B → F, C/D/E zmínit jako „v knihovně máte i tohle".

6.2

Day 4 — RTI blok story arc

Pozice v Day 4 dle Trainer Prep Guide: Get started with Real-Time Intelligence (deck 4 + lab consolidation). Blok má dvě části — teorie a architektura, pak demo story arc níže.

Demo story arc

Krok Co se ukáže Datový zdroj Cíl pedagogicky
Opener: 60s Eventstream New Eventstream → Sample data: Bicycles → preview events → No destination yet → Stop Sample (Bicycles) „Stream vznikne za minutu, pojď se podívat co v něm teče"
Eventhouse + KQL DB Vytvoříme Eventhouse rti_demo, KQL DB chmi_stream, prázdná tabulka air_raw — Ukázat koncept Eventhouse jako container pro KQL DBs
CZ stream: ČHMÚ HTTP poll New Eventstream → Custom endpoint (HTTP) → ČHMÚ recent CSV → Manage fields (parse CSV) → Destination = KQL DB ČHMÚ recent/data/ Stejná data jako Days 1-2, ale v eventovém modelu — proč/kdy
KQL queries (live) air_raw | take 10, summarize bin(startTime, 1h), make-series přes 24h KQL DB KQL ↔ DAX/SQL analogie pro PBI publikum
Real-Time Dashboard Pre-built dashboard: line chart per polutant, table top 10 stanic, time slicer KQL DB Sub-sekundový refresh, žádný PBI
PBI DirectQuery teaser Otevřít pre-built .pbix, ukázat DirectQuery na KQL, refresh button PBI + KQL „Když DirectQuery na KQL vs Direct Lake na Lakehouse — kdy co"

Climax pedagogiky

Stejná data, dva enginy, jeden den. Days 1-2 zpracovaly batch ČHMÚ snapshot přes Lakehouse + Warehouse (medallion). Day 4 ukáže stream ČHMÚ recent přes Eventstream + Eventhouse. Audience tak uvidí stejný dataset ze dvou úhlů → pochopí, kdy je RTI overkill a kdy nutnost.

6.3

Architektura

SCHÉMA
┌──────────────────────┐
│ Sample: Bicycles      │  (opener, MS native source)
└──────────┬───────────┘
           │
           │ (separate Eventstream, jen jako opener) 
           ▼
      [preview pane]

┌──────────────────────────────────┐
│ ČHMÚ recent CSV                   │  https://opendata.chmi.cz/air_quality/recent/data/
│ (poll 1× za 5 min přes HTTP)      │  airquality_1h_avg_CZ.csv
└──────────┬───────────────────────┘
           │
           ▼
┌──────────────────────────────────┐
│ Eventstream (Custom HTTP source)  │
│   - parse CSV → JSON events       │
│   - Manage fields (rename cols)   │
└──────────┬───────────────────────┘
           │
           ▼
┌──────────────────────────────────┐
│ Eventhouse: rti_demo              │
│   └── KQL DB: chmi_stream         │
│         ├── air_raw (ingest)      │
│         ├── air_clean (update     │
│         │   policy: dedup +       │
│         │   join s dim_*)         │
│         └── MV: last_per_station  │
└──────────┬───────────────────────┘
           │
           ├──► Real-Time Dashboard (mapa, line chart, top 10)
           │
           └──► Power BI (DirectQuery, composite model nad
                          gold layer z Days 1-2 + KQL current state)
6.4

Risk register & fallbacks

Risk Pravděpodobnost Mitigation Fallback
ČHMÚ endpoint nedostupný během demu Low Pre-cache 24h history do KQL den předem Pre-built KQL DB s 24h daty + Sample Bicycles na live část
Eventstream HTTP source nezvládá CSV Medium Otestovat 1 týden před kurzem; alternativa = Notebook poller → EventHub Notebook v F2 capacity poslal sám CSV poll → Eventstream Custom App input
F2 capacity Spark cold start kolize s Eventstream Low Eventstream běží na shared backend, ne CU —
KQL DB cold (< 1 měsíc starý) má lag Low Den předem warmup query Force refresh přes UI
Real-Time Dashboard nerenderuje mapu Medium Pre-built dashboard checked-in jako template Statický PBI map visual jako záskok
F2 → 90s lag při ingest Medium Akceptovat, vysvětlit jako story F64 trial workspace pro plynulejší demo (přepnout workspace)
6.5

Pre-kurz checklist (RTI specific)

A. Workspace

  • ☐ V DP600_Demo_CHMI workspace přidat RealTime folder
  • ☐ Vytvořit Eventhouse rti_demo
  • ☐ Vytvořit KQL DB chmi_stream uvnitř Eventhouse
  • ☐ Pre-create tabulky: air_raw, air_clean, MV last_per_station (skripty viz runbook B, sekce KQL setup)

B. Eventstreams

  • ☐ Eventstream es_bicycles_demo (Sample → preview only, žádný sink)
  • ☐ Eventstream es_chmi_recent (HTTP source → KQL DB destination, parse CSV)
  • ☐ Test pre-run: 1 hod běhu, ověřit že events tečou do air_raw

C. Pre-cached data (failsafe)

  • ☐ Den před kurzem: spustit poller na 24h, naplnit air_raw cca 11k events (467 stanic × 24h)
  • ☐ Verify: air_raw | count >= 10000

D. Real-Time Dashboard

  • ☐ Pre-built dashboard chmi_live s 4 tiles:
    • Line chart: summarize avg(value) by bin(startTime, 1h), idValueType (zoom 24h)
    • Top stations: summarize last_value=arg_max(startTime, value) by idRegistration | top 10
    • Total events: count
    • Map: pivot stanic přes lookup z dim_station (lat/lon)

E. Power BI

  • ☐ Pre-built .pbix s DirectQuery connection na KQL DB
  • ☐ Composite model: KQL DB (current) + Lakehouse Direct Lake (historical gold)
  • ☐ Performance Analyzer screenshot pro srovnání DirectQuery/Direct Lake

F. Lectorské

  • ☐ KQL cheat sheet vytištěný / sdílený (handout)
6.6

Reusable po kurzu

  • Reusable workspace — DP600_Demo_RTI zůstává jako showcase pro klienty
  • Konferenční talk — material navazuje na Days 1-2 story (batch vs stream nad stejnými daty)
6.7

Appendix A — Proč PID GTFS-RT není v hlavním arcu

Hidden costs, které dělají PID GTFS-RT špatným fitem pro live demo:

  1. Format = Protobuf. Eventstream HTTP source pošle bytes do KQL jako blob, KQL nemá nativní Protobuf decoder. Řešení = Notebook adapter (poll → decode přes gtfs-realtime-bindings → publish JSON do EventHub → Eventstream → KQL). To přidá netriviální setup a druhou službu.
  2. Auth = Golemio API klíč (operator ICT). Free tier 60 req/min, vyžaduje registraci a NDA-style ToS. Live demo s neověřeným klíčem = riziko 401/429.
  3. F2 capacity stress. GTFS-RT snapshot = ~3000 vehicles × 100 bytes = 300KB každých 20s. Notebook adapter na F2 (spark cold start 1-2 min) je per definice nestabilní.

Přesto stojí za ukázku (viz runbook E):

  • Architektura: Notebook (Pure Python, polars + gtfs-realtime-bindings) → REST API loop → JSON events → Eventstream Custom App input → KQL DB → Real-Time Dashboard s mapou.
  • Story arc: „Co Microsoft Fabric out-of-the-box neumí (Protobuf), ale 50 řádků Pythonu vyřeší."
  • Audience: praktici, kteří chtějí vidět real-real-time CZ data.