Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru
Azure SQL Database
Azure SQL Managed Instance
SQL database di Microsoft Fabric
Artikel ini menjelaskan cara mengimpor file JSON ke SQL Server. Dokumen JSON menyimpan banyak jenis data, misalnya, log aplikasi, data sensor, dan sebagainya. Penting untuk dapat membaca data JSON yang disimpan dalam file, memuat data ke SQL Server, dan menganalisisnya.
Contoh dalam artikel ini menggunakan file JSON dari sampel GitHub yang berisi daftar buku.
Permissions
Pada tingkat instans, fitur ini memerlukan keanggotaan peran server tetap dari bulkadmin, atau ADMINISTER BULK OPERATIONS izin.
Untuk tingkat database, fitur ini memerlukan ADMINISTER DATABASE BULK OPERATIONS izin.
Mengakses Azure Blob Storage memerlukan akses baca-tulis.
Mengimpor dokumen JSON ke dalam satu kolom
OPENROWSET(BULK) adalah fungsi bernilai tabel yang dapat membaca data dari file apa pun di drive atau jaringan lokal, jika SQL Server memiliki akses baca ke lokasi tersebut. Ini mengembalikan tabel dengan satu kolom yang berisi konten file. Ada berbagai opsi yang dapat Anda gunakan dengan OPENROWSET(BULK) fungsi , seperti pemisah. Tetapi dalam kasus paling sederhana, Anda hanya dapat memuat seluruh konten file sebagai nilai teks. (Nilai besar tunggal ini dikenal sebagai objek besar karakter tunggal, atau SINGLE_CLOB.)
Berikut adalah contoh OPENROWSET(BULK) fungsi yang membaca konten file JSON dan mengembalikannya kepada pengguna sebagai nilai tunggal:
SELECT BulkColumn
FROM OPENROWSET(BULK 'C:\JSON\Books\book.json', SINGLE_CLOB) as j;
OPENJSON(BULK) membaca konten file dan mengembalikannya di BulkColumn.
Anda juga dapat memuat konten file ke dalam variabel lokal atau ke dalam tabel, seperti yang ditunjukkan dalam contoh berikut:
-- 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
Setelah memuat konten file JSON, Anda dapat menyimpan teks JSON dalam tabel.
Mengimpor dokumen JSON dari Azure File Storage
Anda juga dapat menggunakan OPENROWSET(BULK) seperti yang dijelaskan sebelumnya untuk membaca file JSON dari lokasi file lain yang dapat diakses SQL Server. Misalnya, Azure File Storage mendukung protokol SMB. Akibatnya Anda dapat memetakan drive virtual lokal ke berbagi penyimpanan File Azure menggunakan prosedur berikut:
Buat akun penyimpanan file (misalnya,
mystorage), berbagi file (misalnya,sharejson), dan folder di Azure File Storage dengan menggunakan portal Azure atau Azure PowerShell.Unggah beberapa file JSON ke berbagi penyimpanan file.
Buat aturan firewall keluar di Windows Firewall pada komputer Anda yang memperbolehkan port 445. Penyedia layanan Internet Anda mungkin memblokir port ini. Jika Anda mendapatkan kesalahan DNS (kesalahan 53) di langkah berikut, maka port 445 tidak terbuka, atau ISP Anda memblokirnya.
Pasang berbagi Azure File Storage sebagai drive lokal (misalnya
T:).Berikut sintaks perintahnya:
net use [drive letter] \\[storage name].file.core.windows.net\[share name] /u:[storage account name] [storage account access key]Berikut adalah contoh yang menetapkan huruf drive lokal
T:ke pembagian berkas Azure File Storage:net use t: \\mystorage.file.core.windows.net\sharejson /u:myaccount hb5qy6eXLqIdBj0LvGMHdrTiygkjhHDvWjUZg3Gu7bubKLg==Anda dapat menemukan kunci akun penyimpanan dan kunci akses akun penyimpanan primer atau sekunder di bagian Kunci Pengaturan di portal Azure.
Sekarang Anda dapat mengakses file JSON dari berbagi Azure File Storage dengan menggunakan drive yang dipetakan, seperti yang ditunjukkan dalam contoh berikut:
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
Untuk informasi selengkapnya tentang Azure File Storage, lihat Penyimpanan file.
Mengimpor dokumen JSON dari Azure Blob Storage
Berlaku untuk: SQL Server 2017 (14.x) dan versi yang lebih baru, dan Azure SQL
Anda dapat memuat file langsung ke Azure SQL Database dari Azure Blob Storage dengan perintah T-SQL BULK INSERT atau OPENROWSET fungsi .
Pertama, buat sumber data eksternal, seperti yang ditunjukkan dalam contoh berikut.
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://myazureblobstorage.blob.core.windows.net',
CREDENTIAL = MyAzureBlobStorageCredential
);
Selanjutnya, jalankan perintah INSERT MASSAL dengan opsi DATA_SOURCE.
BULK INSERT Product
FROM 'data/product.dat'
WITH ( DATA_SOURCE = 'MyAzureBlobStorage');
Mengurai dokumen JSON ke dalam baris dan kolom
Alih-alih membaca seluruh file JSON sebagai nilai tunggal, Anda mungkin ingin mengurainya dan mengembalikan buku dalam file dan propertinya dalam baris dan kolom.
Contoh 1
Dalam contoh paling sederhana, Anda hanya dapat memuat seluruh daftar dari file.
SELECT value
FROM OPENROWSET(BULK 'C:\JSON\Books\books.json', SINGLE_CLOB) AS j
CROSS APPLY OPENJSON(BulkColumn);
Sebelumnya OPENROWSET membaca satu nilai teks dari file.
OPENROWSET mengembalikan nilai sebagai BulkColumn, dan meneruskan BulkColumn ke OPENJSON fungsi.
OPENJSON melakukan iterasi melalui array objek JSON dalam array BulkColumn, dan mengembalikan satu buku di setiap baris. Setiap baris diformat sebagai JSON, diperlihatkan berikutnya.
{"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", ... }
Contoh 2
Fungsi ini OPENJSON dapat mengurai konten JSON dan mengubahnya menjadi tabel atau kumpulan hasil. Contoh berikut memuat konten, mengurai JSON yang dimuat, dan mengembalikan lima bidang sebagai kolom:
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;
Dalam contoh ini, OPENROWSET(BULK) membaca konten file dan meneruskan konten tersebut OPENJSON ke fungsi dengan skema yang ditentukan untuk output.
OPENJSON mencocokkan properti dalam objek JSON dengan menggunakan nama kolom. Misalnya, price properti dikembalikan sebagai price kolom dan dikonversi ke jenis data float. Berikut hasilnya:
| Id | Name | price | pages_i | Author |
|---|---|---|---|---|
| 978-0641723445 | Pencuri Petir | 12.5 | 384 | Rick Riordan |
| 978-1423103349 | Laut Para Monster | 6.49 | 304 | Rick Riordan |
| 978-1857995879 | Dunia Sophie : Filsuf Yunani | 3.07 | 64 | Jostein Gaarder |
| 978-1933988177 | Lucene in Action, Edisi Kedua | 30.5 | 475 | Michael McCandless |
Sekarang Anda dapat mengembalikan tabel ini kepada pengguna, atau memuat data ke tabel lain.