Notebooks en SQL

Dit hoofdstuk laat zien hoe je met de data werkt: in een Python- en Spark-notebook in JupyterHub, en met SQL. De voorbeelden volgen het dataproduct uit Data engineer-traject: de catalogus finance en de tabel finance.facturen.regels.

Inloggen bij JupyterHub

  1. Open https://<customer>.dataprocessing.datafoundation.eu en kies Sign in with OAuth 2.0.

    De inlogpagina van JupyterHub met de knop Sign in with OAuth 2.0
  2. Log in met je platformaccount (zie Inleiding). JupyterHub start je eigen notebookserver. De eerste keer duurt dat een paar minuten: de pagina zegt Your server is starting up en opent zelf JupyterLab zodra het klaar is.

    De JupyterHub-pagina met de tekst Your server is starting up
  3. JupyterLab opent met links de bestandsbrowser en rechts de launcher. Kies Python 3 (ipykernel) onder Notebook om een nieuw notebook te starten.

    JupyterLab met de launcher en de bestandsbrowser

Notitie

Je notebookserver stopt vanzelf na een uur zonder activiteit. Je notebooks blijven in je eigen thuismap staan en zijn er weer als de server opnieuw start. Het aantal servers dat tegelijk draait is beperkt: zegt JupyterHub dat het vol zit, probeer het dan over een paar minuten opnieuw. Om je server zelf te stoppen kies je File > Hub Control Panel > Stop My Server.

Je Spark-sessie

In elk notebook staat een Spark-sessie met de naam spark klaar; die start de eerste keer dat je hem gebruikt. De sessie kent de catalogi die je mag gebruiken al, dus je verwijst naar data met de naam in drie delen catalogus.schema.tabel. Zonder catalogus gebruikt Spark main.

Notitie

Je notebook heeft geen directe toegang tot de bestanden van de datalake. Spark leest en schrijft ze via het platform, dat voor elk bestand nagaat of jouw team het mag gebruiken. Je hoeft de lake nooit zelf te openen.

Een schema en een tabel aanmaken

Als je een catalogus bezit, of de rol writer erop hebt, kun je er met Spark schema’s en tabellen in maken. Maak eerst het schema en dan de tabel. Schrijf tabellen altijd in het formaat Delta:

spark.sql("CREATE SCHEMA IF NOT EXISTS finance.facturen")

rijen = [
    (1, "Gemeente Noordwijk", "noord", 1250.00, "inkoop.noord@demo.invalid"),
    (2, "Waterschap De Delta", "zuid", 980.50, "inkoop.zuid@demo.invalid"),
]
df = spark.createDataFrame(rijen, ["factuur_id", "klant", "regio", "bedrag", "email"])
df.write.format("delta").saveAsTable("finance.facturen.regels")

spark.table("finance.facturen.regels").show()

Voer een cel uit met Shift+Enter, of het hele notebook met Run > Run All Cells.

Een notebook dat het schema finance.facturen en de tabel regels aanmaakt en de rijen toont

De tabel staat nu in de catalogusboom van Security Center, met jouw team als eigenaar (ververs de pagina als je hem nog niet ziet). Voor inladen met het metadata-gedreven framework schrijven Platform().write_to_table en upsert_table naar dezelfde tabellen, zie Scamander MDIF.

Waarschuwing

Zonder .format("delta") probeert Spark een Parquet-tabel te maken en weigert het platform dat met de melding “Unity Catalog does not support non-Delta managed table”. Zie Problemen oplossen en veelgestelde vragen.

Notitie

Een catalogus of schema dat iemand aanmaakt terwijl je notebook draait, is nog niet bekend in je sessie. Herstart de kernel (Kernel > Restart Kernel) om het te zien.

Data lezen waarvoor je gefilterde toegang hebt

Een tabel waarvoor je team alleen een gefilterde rol heeft, lees je precies zoals elke andere tabel. Het platform past het rijfilter en het kolommasker voor je toe. In dit voorbeeld heeft het team Marketing de rol regio_noord: alleen de rijen van de regio noord, met de kolom email gemaskeerd.

spark.table("finance.facturen.regels").show(truncate=False)

spark.sql("""
    SELECT regio, count(*) AS facturen, round(sum(bedrag), 2) AS totaal
    FROM finance.facturen.regels
    GROUP BY regio
""").show()
Een notebook dat de tabel leest als lid van Team Marketing: twee rijen van de regio noord, de kolom email leeg

Totalen en aantallen tellen alleen de rijen die je mag zien. Naar een tabel waarvoor je een gefilterde rol hebt, kun je niet schrijven.

SQL met Trino en BI-tools

BI-tools en andere SQL-clients verbinden met het Trino-adres van je organisatie met je platformaccount. Ze zien dezelfde catalogi en dezelfde toegangsregels als jij. In een notebook is Trino ook beschikbaar als Spark-catalogi met alleen-lezen toegang waarvan de naam met trino begint.

De verbindingsgegevens staan in Security Center: kies de tegel Trino op het dashboard. Het venster Verbinden met Trino toont de host, de poort, de standaardcatalogus, een JDBC-URL en een Python-voorbeeld, elk met een kopieerknop.

Om te bevragen vanuit een SQL-client op je eigen computer gebruik je een client met een Trino-driver, bijvoorbeeld DBeaver:

  1. Installeer DBeaver Community.

  2. Kies Database > New Database Connection en kies Trino.

  3. Kies URL en plak de JDBC-URL uit het venster Verbinden met Trino. Vul je platformgebruikersnaam in en laat het wachtwoord leeg. DBeaver downloadt de eerste keer de driver.

  4. Kies Test Connection of Finish. Er opent een browser: meld je aan met je platformaccount. Daarna verschijnen de catalogi in de navigator, met dezelfde toegang als in Security Center.

De Trino CLI werkt op dezelfde manier: trino --server https://<customer>.trino.datafoundation.eu --external-authentication.

SQL Server Management Studio (SSMS) en Azure Data Studio kunnen niet verbinden: die praten alleen met Microsoft SQL Server, en Trino is geen SQL Server. Een ODBC-driver voor Trino installeren verandert dat niet: SSMS kan geen andere drivers gebruiken. De webpagina van Trino (https://<customer>.trino.datafoundation.eu) toont de queries die draaien, niet de catalogi en tabellen; gebruik een SQL-client om die te bekijken. Vraag voor Power BI je beheerder.

Geplande notebooks met Airflow

Om een notebook volgens een planning te laten draaien gebruik je Apache Airflow met de SparkNotebookOperator, zie Airflow. Een geplande notebook draait als een eigen service-identiteit, die toegang tot de data nodig heeft zoals elk team. Airflow is een optioneel product; vraag je beheerder naar het adres en of het voor jouw organisatie draait.

  1. Open Airflow en kies Sign In with keycloak. Je logt in met hetzelfde platformaccount als overal.

    De inlogpagina van Airflow met de knop Sign In with keycloak
  2. Dags toont de workflows die Airflow kent. Een nieuwe Dag begint gepauzeerd: zet hem aan met de schakelaar aan het begin van de rij. De lijst toont standaard de Active Dags; kies All om ook de gepauzeerde te zien. Een rood getal naast het aantal Dags betekent dat sommige bestanden niet konden worden geladen; open het om te lezen waarom.

    De pagina Dags van Airflow met veertien Dags in een tabel