JSON im Microsoft SQL Server


Sarah KuhlKlassische relationale Datenmodelle bieten ein hohes Maß an Konsistenz, unterliegen damit jedoch gewissen Einschränkungen, die sie für einige Anwendungsfälle zu statisch erscheinen lassen. So sind Tabellen definiert durch eine feste Anzahl an Spalten, denen jeweils ein fester Datentyp zugeordnet ist. Die Verarbeitung von unstrukturierten Daten stellt diese Modelle auf Grund ihrer hohen Dynamik vor schwer lösbare Herausforderungen. Doch auch MS SQL Server 2016+ und Azure SQL Database unterstützen semi-strukturierte Daten im JSON-Format.

Dies ermöglicht die Kombination von relationalen und NoSQL Konzepten in der gleichen Datenbank.

Zwar existiert im SQL Server kein spezieller JSON-Datentyp, jedoch können JSON Files als gewöhnliche Strings betrachtet werden. Beim Abruf von Daten aus einer REST-API kann der zurückgegebene JSON String in einer nvarchar(max) Spalte gespeichert werden. Ist die Rückgabe nicht größer als 8 Kb, kann durch den Datentyp nvarchar(4000) eine bessere Performance erzielt werden. Um bei einer großen Anzahl an zu speichernden JSON-Dokumenten den benötigten Speicherplatz gering zu halten, empfiehlt es sich einen Clustered Columnstore Index zu verwenden.

Der SQL Server stellt eine Reihe von Befehlen zur Verfügung, die die Abfrage von JSON-Strings sehr komfortabel gestalten. So kann getestet werden, ob ein String in gültigem JSON-Format vorliegt (ISJSON). Falls ja, können einzelne skalare Werte oder Arrays und Objekte mit den Befehlen JSON_VALUE bzw. JSON_QUERY ausgelesen werden. Über die Funktion JSON_MODIFY können Änderungen an dem JSON-String vorgenommen werden.

Somit ist es möglich alle Standard T-SQL Funktionen, wie z.B. Gruppierung, Aggregationen und Filter auf Werte innerhalb des JSON – Strings anzuwenden:

Mit dem Befehl OPENJSON kann ein JSON-Array in relationale Form konvertiert werden, wobei jedes Element des Arrays in eine Zeile und die spezifizierten Informationen in Spalten gespeichert werden:

Der umgekehrte Weg, also das Konvertieren vom relationalen Format zu JSON funktioniert über den Befehl FOR JSON.

Sollten Sie Fragen zur Verwendung von JSON-Daten im MS SQL Server haben, sprechen Sie uns gerne an. Darüber hinaus unterstützen wir Sie auch gerne in allen anderen Themengebieten zu Business Intelligence, Data Warehouse und Data Analytics.