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