Halaman ini menjelaskan cara menggunakan JSON menggunakan Spanner.
Jenis data JSON adalah jenis data semi-terstruktur yang digunakan untuk menyimpan data JSON (JavaScript Object Notation). Spesifikasi untuk format JSON dijelaskan dalam RFC 7159.
JSON berguna untuk melengkapi skema relasional untuk data yang jarang atau memiliki struktur yang tidak jelas atau berubah. Namun, pengoptimal kueri mengandalkan model relasional untuk memfilter, menggabungkan, menggabungkan, dan mengurutkan secara efisien dalam skala besar. Kueri melalui JSON akan memiliki lebih sedikit pengoptimalan bawaan dan lebih sedikit kemampuan untuk memeriksa dan menyesuaikan performa.
Spesifikasi
Jenis JSON Spanner menyimpan representasi ternormalisasi dari dokumen JSON input.
- JSON dapat disusun bertingkat hingga maksimum 80 tingkat.
- Spasi kosong tidak dipertahankan.
- Komentar tidak didukung. Transaksi atau kueri dengan komentar akan gagal.
- Anggota objek JSON diurutkan secara leksikografis.
- Urutan elemen array JSON dipertahankan.
- Jika objek JSON memiliki kunci duplikat, hanya kunci pertama yang dipertahankan.
- Jenis primitif (string, boolean, angka, dan null) memiliki jenis dan nilai yang dipertahankan.
- Nilai jenis string dipertahankan persis.
- Nilai jenis angka dipertahankan, tetapi representasi tekstualnya
dapat diubah sebagai hasil dari proses normalisasi. Misalnya, angka input 10.000 mungkin memiliki representasi
normalisasi 1e+4. Semantik pelestarian nilai angka adalah sebagai
berikut:
- Bilangan bulat bertanda dalam rentang [INT64_MIN, INT64_MAX] akan dipertahankan.
- Bilangan bulat tanpa tanda dalam rentang [0, UINT64_MAX] dipertahankan.
- Nilai ganda yang dapat di-roundtrip dari string ke ganda ke
string tanpa kehilangan presisi akan dipertahankan. Jika nilai ganda tidak dapat
berjalan bolak-balik dengan cara ini, transaksi atau kueri akan gagal.
- Misalnya,
SELECT JSON '2.2412421353246235436'
gagal. - Solusi fungsional adalah
PARSE_JSON('2.2412421353246235436', wide_number_mode=>'round')
, yang menampilkanJSON '2.2412421353246237'
.
- Misalnya,
- Gunakan fungsi
TO_JSON()
,JSON_OBJECT()
, danJSON_ARRAY()
untuk membuat dokumen JSON di SQL. Fungsi ini menerapkan karakter kutipan dan escape yang diperlukan.
Ukuran maksimum dokumen yang dinormalisasi yang diizinkan adalah 10 MB.
Nullability
Nilai null
JSON diperlakukan sebagai SQL non-NULL.
Contoh:
SELECT (JSON '{"a":null}').a IS NULL; -- Returns FALSE
SELECT (JSON '{"a":null}').b IS NULL; -- Returns TRUE
SELECT JSON_QUERY(JSON '{"a":null}', "$.a"); -- Returns a JSON 'null'
SELECT JSON_QUERY(JSON '{"a":null}', "$.b"); -- Returns a SQL NULL
Encoding
Dokumen JSON harus dienkode dalam UTF-8. Transaksi atau kueri dengan dokumen JSON yang dienkode dalam format lain akan menampilkan error.
Membuat tabel dengan kolom JSON
Kolom JSON dapat ditambahkan ke tabel saat tabel dibuat. Nilai jenis JSON dapat berupa nullable.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
VenueFeatures JSON,
DateOpened DATE,
) PRIMARY KEY(VenueId);
Menambahkan dan menghapus kolom JSON dari tabel yang ada
Kolom JSON juga dapat ditambahkan ke dan dihapus dari tabel yang ada.
ALTER TABLE Venues ADD COLUMN VenueDetails JSON;
ALTER TABLE Venues DROP COLUMN VenueDetails;
Contoh berikut menunjukkan cara menambahkan kolom JSON
bernama VenueDetails
ke
tabel Venues
menggunakan library klien Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Mengubah data JSON
Contoh berikut menunjukkan cara memperbarui data JSON
menggunakan
library klien Spanner.
C++
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
C#
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Go
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
PHP
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Mengindeks data JSON
Anda dapat mempercepat kueri data JSON dengan menggunakan indeks sekunder dan indeks penelusuran dengan data JSON Anda. Spanner tidak mendukung penggunaan kolom jenis JSON sebagai kunci dalam indeks sekunder.
Menggunakan indeks sekunder
Indeks sekunder berguna saat memfilter berdasarkan nilai skalar dalam dokumen JSON. Untuk menggunakan indeks sekunder dengan JSON, buat kolom yang dihasilkan yang mengekstrak data skalar yang relevan dan konversikan data ke jenis SQL yang sesuai. Kemudian, Anda dapat membuat indeks sekunder di atas kolom yang dihasilkan ini. Indeks mempercepat kueri yang memenuhi syarat yang berjalan pada kolom yang dihasilkan.
Dalam contoh berikut, Anda membuat indeks VenuesByCapacity
yang digunakan database untuk menemukan tempat dengan kapasitas lebih dari 1.000. Sebagai gantinya, Spanner menggunakan indeks untuk menemukan baris
yang relevan, yang meningkatkan performa kueri, terutama untuk tabel besar.
ALTER TABLE Venues
ADD COLUMN VenueCapacity INT64 AS (INT64(VenueDetails.capacity));
CREATE INDEX VenuesByCapacity ON Venue (VenueCapacity);
SELECT VenueName
FROM Venues
WHERE VenueCapacity > 1000;
Menggunakan indeks penelusuran
Indeks penelusuran berguna saat Anda membuat kueri terhadap dokumen JSON yang bersifat dinamis atau beragam. Tidak seperti indeks sekunder, Anda dapat membuat indeks penelusuran di dokumen JSON apa pun yang disimpan di kolom JSON. Indeks penelusuran secara otomatis menyesuaikan dengan variasi di seluruh dokumen JSON, di antara baris yang berbeda, dan dari waktu ke waktu.
Dalam contoh berikut, Anda membuat indeks penelusuran VenuesByVenueDetails
yang
digunakan database untuk menemukan tempat dengan detail tertentu seperti ukuran dan
jadwal operasi. Sebagai ganti memeriksa setiap baris, Spanner menggunakan
indeks untuk menemukan baris yang relevan, yang meningkatkan performa kueri,
terutama untuk tabel besar.
ALTER TABLE Venues
ADD COLUMN VenueDetails_Tokens TOKENLIST AS (TOKENIZE_JSON(VenueDetails)) HIDDEN;
CREATE SEARCH INDEX VenuesByVenueDetails
ON Venue (VenueDetails_Tokens);
SELECT VenueName
FROM Venues
WHERE JSON_CONTAINS(VenueDetails, JSON '{"labels": ["large"], "open": {"Friday": true}}');
Untuk mengetahui informasi selengkapnya, lihat indeks penelusuran JSON.
Membuat kueri data JSON
Contoh berikut menunjukkan cara membuat kueri data JSON
menggunakan
library klien Spanner.
C++
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
C#
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Go
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
PHP
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Spanner, lihat library klien Spanner.
Untuk melakukan autentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Pembatasan
- Anda tidak dapat menggunakan kolom JSON dalam klausa
ORDER BY
. - Anda tidak dapat menggunakan kolom jenis JSON sebagai kunci utama atau sebagai kunci dalam indeks sekunder. Untuk mengetahui informasi selengkapnya, lihat Mengindeks data JSON.
Langkah berikutnya
- Jenis data JSON
- Fungsi JSON
- Operator JSON: