Mengimpor dokumen JSON ke SQL Server
Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL DatabaseAzure SQL Managed Instance yang lebih baru
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.
Izin
Pada tingkat instans, fitur ini memerlukan keanggotaan peran server tetap bulkadmin , atau mengelola izin OPERASI MASSAL.
Untuk tingkat database, fitur ini memerlukan izin ADMINISTER DATABASE BULK OPERATIONS.
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 di atas 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 Anda belum membuka port 445, atau ISP Anda memblokirnya.
Pasang berbagi Azure File Storage sebagai drive lokal (misalnya
T:
).Berikut adalah sintaks perintah:
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
T:
drive lokal ke berbagi 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 berikut menggunakan file JSON dari situs ini yang berisi daftar buku.
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 | Nama | harga | pages_i | Penulis |
---|---|---|---|---|
978-0641723445 | Pencuri Petir | 12.5 | 384 | Rick Riordan |
978-1423103349 | Laut 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.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk