Import dokumentů JSON do SQL Serveru
platí pro: SQL Server 2016 (13.x) a novější
azure SQL Database
azure SQL Managed Instance
Tento článek popisuje, jak importovat soubory JSON do SQL Serveru. Dokumenty JSON ukládají mnoho typů dat, například aplikační protokoly, data snímačů atd. Je důležité, abyste mohli číst data JSON uložená v souborech, načítat data do SQL Serveru a analyzovat je.
Příklady v tomto článku používají soubor JSON z ukázkového GitHubu obsahující seznam knih.
Dovolení
Na úrovni instance tato funkce vyžaduje členství bulkadmin pevnou roli serveru nebo ADMINISTER BULK OPERATIONS
oprávnění.
Pro úroveň databáze tato funkce vyžaduje ADMINISTER DATABASE BULK OPERATIONS
oprávnění.
Přístup ke službě Azure Blob Storage vyžaduje přístup pro čtení i zápis.
Import dokumentu JSON do jednoho sloupce
OPENROWSET(BULK)
je funkce s hodnotou tabulky, která může číst data z libovolného souboru na místní jednotce nebo síti, pokud má SQL Server přístup ke čtení do daného umístění. Vrátí tabulku s jedním sloupcem, který obsahuje obsah souboru. S funkcí OPENROWSET(BULK)
můžete použít různé možnosti, například oddělovače. V nejjednodušším případě ale stačí načíst celý obsah souboru jako textovou hodnotu. (Tato velká hodnota je známá jako jeden znakový velký objekt neboli "SINGLE_CLOB.")
Tady je příklad funkce OPENROWSET(BULK)
, která čte obsah souboru JSON a vrací ho uživateli jako jednu hodnotu:
SELECT BulkColumn
FROM OPENROWSET(BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j;
OPENJSON(BULK)
přečte obsah souboru a vrátí ho v BulkColumn
.
Obsah souboru můžete také načíst do místní proměnné nebo do tabulky, jak je znázorněno v následujícím příkladu:
-- 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
Po načtení obsahu souboru JSON můžete text JSON uložit do tabulky.
Import dokumentů JSON ze služby Azure File Storage
Můžete také použít OPENROWSET(BULK)
, jak je popsáno výše, ke čtení souborů JSON z jiných umístění souborů, ke kterým má SQL Server přístup. Azure File Storage například podporuje protokol SMB. V důsledku toho můžete pomocí následujícího postupu namapovat místní virtuální jednotku na sdílenou složku Azure File Storage:
Vytvořte účet úložiště souborů (například
mystorage
), sdílenou složku (napříkladsharejson
) a složku ve službě Azure File Storage pomocí webu Azure Portal nebo Azure PowerShellu.Nahrajte některé soubory JSON do sdílené složky úložiště souborů.
Na počítači vytvořte odchozí pravidlo brány Windows Firewall, které umožní přístup přes port 445. Tento port může blokovat váš poskytovatel internetových služeb. Pokud se v následujícím kroku zobrazí chyba DNS (chyba 53), port 445 není otevřený nebo ho váš poskytovatele internetových služeb blokuje.
Připojte sdílenou složku Azure File Storage jako místní disk (například
T:
).Tady je syntaxe příkazu:
net use [drive letter] \\[storage name].file.core.windows.net\[share name] /u:[storage account name] [storage account access key]
Tady je příklad, který přiřadí písmeno místního disku
T:
sdílené složce Azure File Storage:net use t: \\mystorage.file.core.windows.net\sharejson /u:myaccount hb5qy6eXLqIdBj0LvGMHdrTiygkjhHDvWjUZg3Gu7bubKLg==
Klíč účtu úložiště a primární nebo sekundární přístupový klíč účtu úložiště najdete v části Klíče nastavení na webu Azure Portal.
Teď můžete přistupovat ke svým souborům JSON ze sdílené složky Azure File Storage pomocí namapované jednotky, jak je znázorněno v následujícím příkladu:
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
Další informace o službě Azure File Storage najdete v tématu File Storage.
Import dokumentů JSON ze služby Azure Blob Storage
platí pro: SQL Server 2017 (14.x) a novější verze a Azure SQL
Soubory můžete načíst přímo do Služby Azure SQL Database ze služby Azure Blob Storage pomocí příkazu T-SQL BULK INSERT nebo funkce OPENROWSET
.
Nejprve vytvořte externí zdroj dat, jak je znázorněno v následujícím příkladu.
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://myazureblobstorage.blob.core.windows.net',
CREDENTIAL = MyAzureBlobStorageCredential
);
Potom spusťte příkaz BULK INSERT s možností DATA_SOURCE.
BULK INSERT Product
FROM 'data/product.dat'
WITH ( DATA_SOURCE = 'MyAzureBlobStorage');
Parsování dokumentů JSON do řádků a sloupců
Místo čtení celého souboru JSON jako jedné hodnoty ho můžete chtít analyzovat a vrátit knihy v souboru a jejich vlastnosti v řádcích a sloupcích.
Příklad 1
V nejjednodušším příkladu stačí načíst celý seznam ze souboru.
SELECT value
FROM OPENROWSET(BULK 'C:\JSON\Books\books.json', SINGLE_CLOB) AS j
CROSS APPLY OPENJSON(BulkColumn);
Předchozí OPENROWSET
přečte jednu textovou hodnotu ze souboru.
OPENROWSET
vrátí hodnotu jako BulkColumn a předá bulkColumn funkci OPENJSON
.
OPENJSON
iteruje polem objektů JSON v poli BulkColumn a vrátí jednu knihu v každém řádku. Každý řádek je formátovaný jako JSON, který je zobrazený dále.
{"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", ... }
Příklad 2
Funkce OPENJSON
může analyzovat obsah JSON a transformovat ho do tabulky nebo sady výsledků. Následující příklad načte obsah, parsuje načtený JSON a vrátí pět polí jako sloupce:
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;
V tomto příkladu OPENROWSET(BULK)
přečte obsah souboru a předá tento obsah funkci OPENJSON
s definovaným schématem pro výstup.
OPENJSON
odpovídá vlastnostem v objektech JSON pomocí názvů sloupců. Například vlastnost price
je vrácena jako price
sloupec a převedena na datový typ float. Tady jsou výsledky:
Id | Jméno | cena | pages_i | Autor |
---|---|---|---|---|
978-0641723445 | Zloděj blesku | 12.5 | 384 | Rick Riordan |
978-1423103349 | Moře monstra | 6.49 | 304 | Rick Riordan |
978-1857995879 | Sophie's World : Řecké filozofie | 3.07 | 64 | Jostein Gaarder |
978-1933988177 | Lucene v Akci, druhé vydání | 30.5 | 475 | Michael McCandless |
Teď můžete tuto tabulku vrátit uživateli nebo načíst data do jiné tabulky.