Importieren von JSON-Dokumenten in SQL Server
Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed Instance
In diesem Artikel wird das Importieren von JSON-Dateien in SQL Server beschrieben. JSON-Dokumente speichern viele Arten von Daten, z. B. Anwendungsprotokolle, Sensordaten usw. Es ist wichtig, in der Lage zu sein, die in Dateien gespeicherten JSON-Daten zu lesen, in SQL Server zu laden und sie zu analysieren.
Berechtigungen
Auf Instanzebene erfordert dieses Feature die Mitgliedschaft der Festen Serverrolle "Bulkadmin" oder "BULK OPERATIONS"-Berechtigungen.At the instance level, this feature requires membership of the bulkadmin fixed server role, or ADMINISTER BULK OPERATIONS permissions.
Für die Datenbankebene erfordert dieses Feature DIE BERECHTIGUNGEN "ADMINISTER DATABASE BULK OPERATIONS".
Für den Zugriff auf Azure Blob Storage ist Lese-/Schreibzugriff erforderlich.
Importieren eines JSON-Dokuments in eine einzelne Spalte
OPENROWSET(BULK)
ist eine Tabellenwertfunktion, die Daten aus einer beliebigen Datei auf dem lokalen Laufwerk oder Netzwerk lesen kann, wenn SQL Server Lesezugriff auf diesen Speicherort hat. Sie gibt eine Tabelle mit einer einzelnen Spalte zurück, die den Inhalt der Datei enthält. Es gibt verschiedene Optionen, die Sie mit der OPENROWSET(BULK)
Funktion verwenden können, z. B. Trennzeichen. Im einfachsten Fall können Sie einfach den gesamten Inhalt einer Datei als Textwert laden. (Dieser einzelne große Wert wird als ein „Single Character Large Object“ oder SINGLE_CLOB bezeichnet.)
Hier sehen Sie ein Beispiel für die OPENROWSET(BULK)
Funktion, die den Inhalt einer JSON-Datei liest und als einzelnen Wert an den Benutzer zurückgibt:
SELECT BulkColumn
FROM OPENROWSET(BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j;
OPENJSON(BULK)
liest den Inhalt der Datei und gibt sie in BulkColumn
.
Sie können auch den Inhalt der Datei in eine lokale Variable oder in eine Tabelle laden, wie im folgenden Beispiel gezeigt:
-- Load file contents into a variable
DECLARE @json NVARCHAR(MAX);
SELECT @json = BulkColumn
FROM OPENROWSET(BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j
-- Load file contents into a table
SELECT BulkColumn
INTO #temp
FROM OPENROWSET(BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j
Nachdem Sie den Inhalt der JSON-Datei geladen haben, können Sie den JSON-Text in einer Tabelle speichern.
Importieren von JSON-Dokumenten aus Azure File Storage
Sie können auch OPENROWSET(BULK)
wie oben beschrieben JSON-Dateien von anderen Dateispeicherorten lesen, auf die SQL Server zugreifen kann. Azure File Storage unterstützt z.B. das SMB-Protokoll. Daher können Sie der Azure File Storage-Freigabe mithilfe der folgenden Vorgehensweise eine virtuelle Festplatte zuordnen:
Erstellen Sie mithilfe des Azure-Portals oder Azure PowerShell ein Dateispeicherkonto (z.B.
mystorage
), eine Dateifreigabe (z.B.sharejson
) und einen Ordner in Azure File Storage.Laden Sie einige JSON-Dateien in die Dateispeicherfreigabe hoch.
Erstellen Sie auf Ihrem Computer eine ausgehende Firewallregel in Windows-Firewall, die Port 445 zulässt. Ihr Internetdienstanbieter kann diesen Port blockieren. Wenn sie im folgenden Schritt einen DNS-Fehler (Fehler 53) erhalten, haben Sie den Port 445 nicht geöffnet, oder Ihr ISP blockiert ihn.
Binden Sie die Azure File Storage-Dateifreigabe als lokales Laufwerk (z.B.
T:
) ein.Hier finden Sie die Befehlssyntax:
net use [drive letter] \\[storage name].file.core.windows.net\[share name] /u:[storage account name] [storage account access key]
Hier finden Sie ein Beispiel, in dem der lokale Laufwerkbuchstabe
T:
der Azure File Storage-Dateifreigabe zugewiesen wird:net use t: \\mystorage.file.core.windows.net\sharejson /u:myaccount hb5qy6eXLqIdBj0LvGMHdrTiygkjhHDvWjUZg3Gu7bubKLg==
Der Speicherkontoschlüssel und der primäre und sekundäre Speicherkonto-Zugriffsschlüssel befinden sich im Abschnitt „Schlüssel“ unter „Einstellungen“ im Azure-Portal.
Sie können jetzt über die Azure File Storage-Dateifreigabe auf die JSON-Dateien zugreifen, indem Sie das zugeordnete Laufwerk verwenden, wie im folgenden Beispiel gezeigt:
SELECT book.* FROM OPENROWSET(BULK N't:\books\books.json', SINGLE_CLOB) AS json CROSS APPLY OPENJSON(BulkColumn) WITH ( id NVARCHAR(100), name NVARCHAR(100), price FLOAT, pages_i INT, author NVARCHAR(100) ) AS book
Weitere Informationen zu Azure File Storage finden Sie unter File Storage.
Importieren von JSON-Dokumenten aus Azure BLOB-Speicher
Gilt für: SQL Server 2017 (14.x) und höhere Versionen und Azure SQL
Sie können Dateien direkt in Azure SQL-Datenbank aus Azure Blob Storage mit dem T-SQL BULK INSERT-Befehl oder der OPENROWSET
Funktion laden.
Erstellen Sie zunächst eine externe Datenquelle, wie im folgenden Beispiel gezeigt.
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://myazureblobstorage.blob.core.windows.net',
CREDENTIAL = MyAzureBlobStorageCredential
);
Führen Sie anschließend einen BULK INSERT-Befehl mit der Option DATA_SOURCE aus.
BULK INSERT Product
FROM 'data/product.dat'
WITH ( DATA_SOURCE = 'MyAzureBlobStorage');
Analysieren von JSON-Dokumenten in Zeilen und Spalten
Statt die gesamte JSON-Datei als einzelnen Wert zu lesen, sollten Sie sie analysieren und die Bücher in der Tabelle sowie die Eigenschaften in Reihen und Zeilen zurückgeben. Im folgenden Beispiel wird eine JSON-Datei mit einer Liste von Büchern von dieser Website verwendet.
Beispiel 1
Im einfachsten Beispiel können Sie einfach die gesamte Liste aus der Datei laden.
SELECT value
FROM OPENROWSET(BULK 'C:\JSON\Books\books.json', SINGLE_CLOB) AS j
CROSS APPLY OPENJSON(BulkColumn);
Im vorherigen OPENROWSET
Abschnitt wird ein einzelner Textwert aus der Datei gelesen. OPENROWSET
gibt den Wert als BulkColumn zurück und übergibt BulkColumn an die OPENJSON
Funktion. OPENJSON
durchläuft das Array von JSON-Objekten im BulkColumn-Array und gibt ein Buch in jeder Zeile zurück. Jede Zeile wird, wie nachfolgend gezeigt, als JSON formatiert.
{"id":"978-0641723445", "cat":["book","hardcover"], "name":"The Lightning Thief", ... }
{"id":"978-1423103349", "cat":["book","paperback"], "name":"The Sea of Monsters", ... }
{"id":"978-1857995879", "cat":["book","paperback"], "name":"Sophie's World : The Greek", ... }
{"id":"978-1933988177", "cat":["book","paperback"], "name":"Lucene in Action, Second", ... }
Beispiel 2
Die OPENJSON
Funktion kann den JSON-Inhalt analysieren und in eine Tabelle oder ein Resultset umwandeln. Im folgenden Beispiel wird der Inhalt geladen, die geladene JSON-Datei analysiert und die fünf Felder als Spalten zurückgegeben:
SELECT book.*
FROM OPENROWSET(BULK 'C:\JSON\Books\books.json', SINGLE_CLOB) AS j
CROSS APPLY OPENJSON(BulkColumn) WITH (
id NVARCHAR(100),
name NVARCHAR(100),
price FLOAT,
pages_i INT,
author NVARCHAR(100)
) AS book;
In diesem Beispiel OPENROWSET(BULK)
wird der Inhalt der Datei gelesen und dieser Inhalt mit einem definierten Schema für die Ausgabe an die OPENJSON
Funktion übergeben. OPENJSON
gleicht Eigenschaften in den JSON-Objekten mithilfe von Spaltennamen ab. Die Eigenschaft price
wird z.B. als price
-Spalte zurückgegeben und in den float-Datentyp konvertiert. Dies sind die Ergebnisse:
Id | Name | Preis | Seiten_i | Autor |
---|---|---|---|---|
978-0641723445 | The Lightning Thief (Diebe im Olymp) | 12,5 | 384 | Rick Riordan |
978-1423103349 | The Sea of Monsters (Im Bann des Zyklopen) | 6.49 | 304 | Rick Riordan |
978-1857995879 | Sophie’s World : The Greek Philosophers (Sofies Welt: Roman über die Geschichte der Philosophie) | 3.07 | 64 | Jostein Gaarder |
978-1933988177 | Lucene in Action, Zweite Auflage (nur englisch) | 30.5 | 475 | Michael McCandless |
Jetzt können Sie die Tabelle an den Benutzer zurückgeben oder die Daten in eine andere Tabelle laden.
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für