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.

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.

Programmierer 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 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.

Die VS-Code Extension „Polyglot Notebooks“.
Die VS-Code Extension „Polyglot Notebooks“.

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

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.

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.

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.

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.

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.

Das Aktivieren des KQL-Supports.
Das Aktivieren des KQL-Supports.

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

Verbinden mit dem Kusto-Demos-Cluster von Microsoft.
Verbinden mit dem Kusto-Demos-Cluster von Microsoft.

Hier weiterlesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.