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 · Runbook

Runbook A: Bicycles 60s

Eventstream s ukázkovým zdrojem za minutu — opener bez destination
📡 Runbook · Real-Time Intelligence

Cíle kapitoly

  • Vytvořit Eventstream s ukázkovým zdrojem Bicycles během minuty
  • Ukázat live preview eventů a vysvětlit EventEnqueuedUtcTime
  • Volitelně napojit KQL DB jako destination a spustit první dotaz
16.1

Úvod

Pattern: Sample Data (MS native source) · Auth: žádná· Risk: none Fabric capacity: F2 OK

16.2

Cíl

Krátká ukázka „Eventstream existuje, vyrobíme ho za minutu, podívej se co teče". Žádný destination, žádná persistence — jen visual proof, že real-time data jsou tady.

ℹ️
Pedagogická hodnota: demystifikace Eventstreamu před tím, než publikum uvidí složitější demo B/C/D/E. Reuse mimo kurz: otevírací demo pro klientské RTI POCs (klient vidí výsledek za 60s, sníží se psychologický práh).
16.3

Story (jak to říct nahlas)

„Real-Time Intelligence v Fabricu je sada propojených komponent. Začneme úplně nejjednodušším: Eventstream s ukázkovým zdrojem. Microsoft k tomu má přibalený Bicycles dataset — simulovaná data z bike sharing systému Londýna. Za minutu uvidíme, jak data fyzicky tečou."

16.4

Kroky

1. Vytvoř Eventstream

V workspace DP600_Demo_RTI:

  1. + New item → Eventstream
  2. Name: es_a_bicycles
  3. Enable Enhanced capabilities (default in 2026)
  4. Create

2. Přidej Sample source

V Eventstream editoru:

  1. Add source → Sample data
  2. Sample data type: Bicycles
  3. Source name: bicycles_sample
  4. Add

Eventstream začne emitovat events v rytmu ~1/s. Schema:

TEXT
BikepointID: string         # "BikePoints_1", "BikePoints_2", ...
Street: string
Neighbourhood: string
Latitude: float
Longitude: float
No_Bikes: int               # bikes available
No_Empty_Docks: int
EventEnqueuedUtcTime: datetime  # auto-added by Eventstream

3. Live preview

Klikni na source node bicycles_sample → Data preview tab dole. Po ~5 sekundách začnou téct events. Refresh button vlevo dole.

Co ukázat publiku:

  • "Events jsou JSON, každý je sám o sobě validní record"
  • "EventEnqueuedUtcTime je auto-added — Fabric zná čas příchodu"
  • "Tohle je raw stream. Žádné storage. Pokud teď zavřu, data zmizí."

4. (volitelné) Přidej destination = preview only

Aby publikum vědělo, že "skutečný" demo bude mít destination:

  1. Add destination → Custom endpoint (nebo "Eventhouse" → KQL DB)
  2. Pokud KQL DB: vyber eh_rti_demo → kql_rti_demo → table a_bicycles_raw (vytvoř ji předtím přes script níže)
  3. Wire source → destination drag&drop
  4. Publish

5. (volitelné) KQL query

V KQL DB query:

KQL
a_bicycles_raw
| where EventEnqueuedUtcTime > ago(2m)
| summarize total_bikes = sum(No_Bikes), total_docks_empty = sum(No_Empty_Docks) by bin(EventEnqueuedUtcTime, 30s)
| order by EventEnqueuedUtcTime desc

Vrátí ti per-30s aggregated state Londýnské bike sítě.

6. Cleanup

Po demu stop ingestion v Eventstreamu (pravý horní roh → Pause). Necháváš Eventstream existovat pro příští demo, jen nestreamuje.

16.5

KQL setup (jen pokud chceš destination)

Spusť KQL skript (sekce níže) v kql_rti_demo.

16.6

Troubleshooting

Problém Řešení
"Sample data type Bicycles není v dropdownu" UI změna — alternativa: Yellow Taxi, Stocks. Story je stejná.
"Data preview nic neukazuje" Klikni Refresh dole. Někdy trvá 10-15s než source startne.
"Destination KQL DB chybí v dropdownu" Eventhouse + KQL DB musí existovat ve workspace. Pokud ne, vytvoř je teď (1 klik).
16.7

Metriky

Metrika Hodnota
Throughput (Bicycles sample) ~1 event/s, ~50 KB/min
F2 capacity impact < 0.1 CU/s
16.8

Reuse v jiných kontextech

  • Klientský POC opener — "ukážu vám za 60s, jak vypadá Fabric stream"
  • Workshop intro — před tím, než se ponoří do composite real datasets
  • Blog post intro — "v Fabricu real-time začíná za 60 sekund — tady je důkaz"
16.9

KQL setup skript

Kompletní obsah souboru — rozbalte a zkopírujte tlačítkem Kopírovat.

Zobrazit setup.kql▼
KQL
// Runbook A — Bicycles 60s · KQL setup
// Idempotentní, lze spustit opakovaně.
// Předpoklad: KQL DB `kql_rti_demo` v Eventhouse `eh_rti_demo`.

// ──────────────────────────────────────────────────────────────────
// 1. Bronze table — destination pro Eventstream `es_a_bicycles`
// ──────────────────────────────────────────────────────────────────

.create-merge table a_bicycles_raw (
    BikepointID: string,
    Street: string,
    Neighbourhood: string,
    Latitude: real,
    Longitude: real,
    No_Bikes: int,
    No_Empty_Docks: int,
    EventEnqueuedUtcTime: datetime
)

// Retention 7 days — data jsou demo only
.alter table a_bicycles_raw policy retention
    @'{"SoftDeletePeriod": "7.00:00:00", "Recoverability": "Disabled"}'

// ──────────────────────────────────────────────────────────────────
// 2. Sanity queries (run after Eventstream je wired)
// ──────────────────────────────────────────────────────────────────

// Latest 10 events
// a_bicycles_raw | top 10 by EventEnqueuedUtcTime desc

// Per-30s aggregates
// a_bicycles_raw
// | where EventEnqueuedUtcTime > ago(5m)
// | summarize total_bikes=sum(No_Bikes), total_empty=sum(No_Empty_Docks)
//             by bin(EventEnqueuedUtcTime, 30s)
// | order by EventEnqueuedUtcTime desc

// Top busy bikepoints (most bikes available)
// a_bicycles_raw
// | summarize arg_max(EventEnqueuedUtcTime, *) by BikepointID
// | top 10 by No_Bikes desc
// | project BikepointID, Street, Neighbourhood, No_Bikes, No_Empty_Docks