Wie Microsoft .NET Interactive und Jupyter-Notebooks integriert Dynamic Kernel Picker für VS Code Polyglot Notebooks

Von Dipl. -Ing. Thomas Drilling 6 min Lesedauer

Polyglot Notebooks sind eine Erweiterung der ehemaligen .NET Interactive Notebooks in Visual Studio Code. Ende 2022 hatte Microsoft die Funktion zur dynamischen Kernelauswahl als Verbesserung bei der Unterstützung von SQL und KQL angekündigt. Diese haben wir in diesem Beitrag ausprobiert.

Die VS-Code Extension „Polyglot Notebooks“.
Die VS-Code Extension „Polyglot Notebooks“.
(Bild: Drilling / Microsoft)

Ein wenig Geschichte vorweg: Schon 2019 hatte sich Microsoft vorgenommen, .NET-Sprachen in das Jupyter-Ökosystem zu integrieren. Dazu wurde zunächst ein auf .NET-basierter (C#, F#, PowerShell) Jupyter-Kernel namens „.NET Interactive“ entwickelt. Im Laufe der Zeit wurde aber klar, dass viele Developer Workflows von Natur aus mehrsprachig sind, da Entwicklerinnen und Entwickler immer dazu tendieren, die beste Sprache für die jeweilige Aufgabe zu verwenden.

Aus dieser Entwicklerphilosophie heraus hat sich .NET Interactive zu dem entwickelt, was es heute ist – eine Engine, die mehrere Sprachen ausführen kann. Deshalb bietet sie auch vollständige Unterstützung von Sprachservern und die gemeinsame Nutzung von Variablen für die folgenden Sprachen: C#, F#, PowerShell, HTML, Mermaid, JavaScript, SQL und auch KQL, die Kusto-Abfragesprache.

Diese Funktionen und Sprachkombinationen machen .NET Interactive zu einem leistungsstarken Kernel für Jupyter-Notebooks, der unterbrechungsfreie mehrsprachige Workflows ermöglicht. Sollten Jupyter Notebooks noch kein Begriff sein, hilft der untenstehende Kasten weiter.

IPython und Jupyter Notebooks

Unter Data Scientists und Entwicklern ML-basierter Anwendungen ist Python bekanntlich die Programmiersprache der Wahl. Allein die Auswahl populärer Bibliotheken ist mit Scikit-Learn, NumPy, PyTorch, TensorFlow sehr groß und auch das Open-Source-Framework Apache MXnet bietet eine Python-Schnittstelle.

Insbesondere in den Datenwissenschaften spielt zudem die IPython eine wichtige Rolle. Die interaktive Python-Shell bringt eine Vielzahl von Funktionen mit, darunter einen Kernel für Jupyter, Unterstützung für interaktive Datenvisualisierung und die Verwendung von GUI-Toolkits. IronPython bietet zudem flexible, einbettbare Interpreter zum Laden in eigene Projekte und einfach zu bedienende, leistungsstarke Tools für paralleles Computing.

In diesem Zusammenhang fällt auch häufig der Begriff Jupyter Notebook. Bei Jupyter Notebooks handelt es sich um eine interaktive Umgebung, in der Code und Markup/Markdown kombiniert werden können. Daher ist Jupyter gerade bei Datenwissenschaftlern und -wissenschaftlerinnen beliebt, die nicht primär in der Entwicklerwelt zuhause sind.

In jeder Jupyter-Zelle lassen sich nämlich Codeausführung, Rich-Text, Mathematik, Diagramme und Rich-Media zusammenführen, was insbesondere der Dokumentation und Weitergabe (Teilen) förderlich ist. Jupyter an sich ist aber nicht auf Python beschränkt, sondern sprachunabhängig und unterstützt viele verschiedene Programmiersprachen. Allerdings ist – und hier schließt sich der Kreis – IPython der Standardkernel für Python in Jupyter Notebook.

Letztendlich handelt es sich bei Jupyter Notebook (ehemals IPython Notebooks) um eine Webanwendung, in der sich so genannte Jupyter-Notebook-Dokumente erstellen lassen. Jedes Jupyter-Notebook-Dokument ist ein JSON-Dokument, das eine Liste von Eingabe- und Ausgabezellen enthält. Jede Zelle kann dabei Code, Text und Graphen oder Diagramme (Plots) enthalten und ist versionierbar. Die Dateiendung ist „.ipynb“.

Ein Jupyter-Notebook-Dokument kann in verschiedene Formate konvertiert und ausgegeben werden, wie z. B. B. HTML, PDF, LaTeX und Folien für Präsentationen. Als Kommandozeileninterpreter zum interaktiven Arbeiten mit der Programmiersprache Python kommt IPython zum Einsatz. Jupyter Notebook unterstützt verschiedene Programmiersprachen, auch wenn Python der Standard ist. Das Tool haben wir u. a. in Tutorial-Beiträgen zu Juypter Notebooks bereits behandelt.

Programmierende können Polyglot Notebooks einfach als Extension für VS Code verwenden und z. B. eine Verbindung zu einer SQL-Datenbank herstellen und diese abfragen. Anschließend können sie das tabellarische Ergebnis an JavaScript übergeben und dann entsprechende Visualisierungen erstellen – alles im selben Tool und in derselben Notebook-Datei. Die Funktionalität und Benutzeroberfläche wurden in VS Code ursprünglich durch die Erweiterung „.NET Interactive Notebooks“ aktiviert. Dies hat Microsoft im November 2022 in „Polyglot Notebooks“ umbenannt.

Warum die Namensänderung und was sind die Konsequenzen?

Wichtig ist, dass Microsoft lediglich den Namen der VS-Code-Erweiterung geändert hat, nicht aber den Namen der Engine selbst, die weiterhin „.NET Interactive“ heißt. Folglich bleibt auch der Name der Bibliotheken unverändert, wenn die interaktive .NET-APIs verwendet wird. Das gilt auch für Paketnamen, Namespaces und die CLI (dotnet-interactive).

Die VS-Code Extension „Polyglot Notebooks“.
Die VS-Code Extension „Polyglot Notebooks“.
(Bild: Drilling / Microsoft)

Die Umbenennung schien aber trotzdem angebracht, weil der Name der alten Extension „.NET Interactive Notebooks“ mit zunehmender Anzahl der von .NET Interactive unterstützten Sprachen nicht mehr den vollen Funktionsumfang der Erweiterung widerspiegelte. Der Name Polyglot Notebooks nutzt die Mehrsprachigkeit der Verwendung von .NET Interactive als Kernel für Jupyter-Notebooks in vollem Umfang.

Wer zuvor schon die Erweiterung „.NET Interactive Notebooks“ in VS Code installiert hatte, wird lediglich feststellen, dass der Name der Erweiterung in Polyglot Notebooks aktualisiert wurde. Erstellt man jedoch ein Notebook in VS Code, wird weiterhin „.NET Interactive“ als Kernel-Option im Drop-Down-Menü angezeigt. Außerdem hat Microsoft Befehle aus der Befehlspalette aktualisiert, um die Namensänderung widerzuspiegeln. Microsoft empfiehlt, unbedingt die neuen Befehlsnamen zu verwenden, da die alten bald entfernt werden.

Weitere Verbesserungen an Polyglot Notebooks für Visual Studio Code betreffen das Upgrade auf .Net 7. So erfordert die VS-Code-Erweiterung Stand 2023 das .NET 7 SDK. Im Rahmen dieses Upgrades bieten Polyglot Notebooks jetzt auch Unterstützung für C# 11 und F# 7.

Verbesserungen beim Support für SQL und KQL mit dynamischer Kernelauswahl

Beim Erstellen eines neuen Notebook-Dokuments (*.dib) können Sie zwischen mehrere Sprachen und  Kernel wählen.
Beim Erstellen eines neuen Notebook-Dokuments (*.dib) können Sie zwischen mehrere Sprachen und Kernel wählen.
(Bild: Drilling / Microsoft)

Schauen wir uns nun die dynamische Kernelauswahl an, eine der Neuerungen im Bereich der Unterstützung für KQL. Beim Erstellen eines neuen Notebooks suchen wir in der Command-Palette nach „Polyglot Notebooks:“ Als Dateiendung können wir zwischen „.ipynb“ (für Jupyter Notebook) und „.dib“ (für Polyglot Notebooks) wählen. Wir landen dann in einer ersten Zelle eines neuen Notebooks.

Zwar ist C# immer noch der Default-Kernel, SQL und KQL werden aber ebenfalls unterstützt.
Zwar ist C# immer noch der Default-Kernel, SQL und KQL werden aber ebenfalls unterstützt.
(Bild: Drilling / Microsoft)

Rechts außen erkennen wir nun die unterstützten Sprachen, wobei csharp (C#) favorisiert ist. Beim Rechtsklick zeigen sich weitere unterstützte Sprachen. Nun zu den Neuerungen: Stellen wir beispielsweise eine Verbindung mit einem Kusto-Cluster her, gilt es, der Verbindung mithilfe des Parameters „--kernel-name“ im Kommando „#!connect …“ einen Alias zuzuweisen.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Das Aktivieren des KQL-Supports.
Das Aktivieren des KQL-Supports.
(Bild: Drilling / Microsoft)

Danach wird deklariert, welche Datenbankverbindung abgefragt werden sollen. Vor der Einführung der dynamischen Kernel-Auswahl musste man dazu ein Magic-Command mit dem Alias am Anfang jeder Zelle hinzufügen. So wurde per …

#r "nuget: Microsoft.DotNet.Interactive.Kql, *-*"

… zunächst der Support von KQL aktiviert. Zum Ausführen einer Zelle klickt man jeweils rechts außen auf eines der beiden Symbole mit dem Dreieck (Ausführen) für die Zelle oberhalb oder unterhalb der jeweiligen Position.

Verbinden mit dem Kusto-Demos-Cluster von Microsoft.
Verbinden mit dem Kusto-Demos-Cluster von Microsoft.
(Bild: Drilling / Microsoft)

Wir verbinden uns also wie folgt mit dem Kusto-Demo-Cluster von Microsoft. Hierfür gilt es zunächst, per „+ Code“ einen neuen Code-Block in einer neuen Zelle einzufügen. Der Kusto-Demo-Cluster findet sich auf der Hilfeseite zu Kusto.

Nach Eingabe des Kommandos …

#!connect kql --kernel-name samples_database --cluster "https://help.kusto.windows.net" --database "Samples"

… öffnet sich wie üblich ein neuen Browser-Fenster, um sich mit dem gewünschten Konto beim Tenant zu authentifizieren. Das Ergebnis der Ausgabe lautet dann:

Kernel added: #!kql-samples_database

Die Autovervollständigung für KQL.
Die Autovervollständigung für KQL.
(Bild: Drilling / Microsoft)

Nun können wir die KQL-Beispiel-Datenbank abfragen. Die Syntax von KQL soll hier nicht weiter erläutert werden. Wir arbeiten mit der Tabelle „Storm Events“.

#!kql-samples_database
StormEvents
| take 3
| project StartTime, EndTime, EventType, State, EventNarrative

KQL mit dem dynamischen Kernel-Picker.
KQL mit dem dynamischen Kernel-Picker.
(Bild: Drilling / Microsoft)

Mit dem dynamischen Kernel-Picker lässt sich nun unten rechts in der Zelle deklarieren, welche Datenbankverbindung abgefragt werden soll, anstatt ein Magic-Command anzusetzen. Wir fügen einfach eine neue Codezelle hinzu, nachdem die Verbindung hergestellt wurde, klicken auf die dynamische Kernelauswahl und wählen den für die entsprechende Verbindung erstellten Alias. Dann schreiben wir unseren nativen SQL- oder Kusto-Code.

KQL

Die Keyword Query Language (KQL) ist eine von Microsoft entwickelte Sprache, die initial in SharePoint zum Erstellen von Suchabfragen verwendet wurde und wird. Jede KQL-Abfrage besteht aus einem oder mehreren der Elemente „Freitext-Schlüsselwörter“, „Wörter“ oder „Ausdrücken“ sowie „Eigenschaftseinschränkungen“. KQL-Abfrageelemente lassen sich mit einem oder mehreren der verfügbaren Operatoren kombinieren.

Komplexe Abfragen entstehen durch die Kombination von mehreren Freitext-Ausdrücken mit KQL-Abfrageoperatoren. Die Kusto Query Language (KQL) kommt heute in verschiedenen Microsoft-Produkten zum Einsatz. Im Azure Data Explorer wird KQL z. B. genutzt, um Tausende von Zeitreihen in Sekunden zu erstellen und zu analysieren, um Überwachungslösungen und Workflows nahezu in Echtzeit zu ermöglichen.

Im Azure Data Studio wird KQL in Kombination mit Python verwendet, um Daten abzufragen und zu visualisieren. Kqlmagic beispielsweise ein Befehl, der die Funktionen des Python-Kernels in Azure Data Studio-Notebooks erweitert. Zu den unterstützten Datenquellen mit Kqlmagic gehören Azure Data Explorer, Application Insights und Azure-Monitor-Protokolle.

Die meisten Azure-Nutzer kommen erstmals im Zusammenhang mit der interaktivieren Analyse von Azure-Monitor-Logs in einem Log-Analytics-Workspace in Berührung – oder beim Erstellen von Abfrageregeln zur Incident-Erstellung im SIEM-System Microsoft Sentinel.

(ID:49742182)