Halaman ini menjelaskan cara bekerja dengan 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 berubah-ubah atau tidak terdefinisi dengan jelas. Namun, pengoptimal kueri mengandalkan model relasional untuk memfilter, menggabungkan, mengagregasi, 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 yang dinormalisasi dari dokumen JSON input.
- JSON dapat bertingkat hingga maksimum 80 level.
- 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 seperti aslinya.
- Nilai jenis angka dipertahankan, tetapi representasi
tekstualnya dapat berubah sebagai akibat dari proses normalisasi. Misalnya, angka input 10000 mungkin memiliki representasi yang dinormalisasi 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] akan dipertahankan.
- Nilai ganda yang dapat di-roundtrip dari string ke ganda ke string tanpa kehilangan presisi akan dipertahankan. Jika nilai ganda tidak dapat
melakukan round trip dengan cara ini, transaksi atau kueri akan gagal.
- Misalnya,
SELECT JSON '2.2412421353246235436'
gagal. - Solusi fungsionalnya 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 mengimplementasikan karakter kutipan dan pelepasan yang diperlukan.
Ukuran maksimum dokumen yang dinormalisasi 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 null.
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 mengupdate 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. Spanner tidak mendukung penggunaan kolom jenis JSON sebagai kunci dalam indeks sekunder.
Menggunakan indeks sekunder
Indeks sekunder berguna saat memfilter nilai skalar dalam dokumen JSON. Untuk menggunakan indeks sekunder dengan JSON, buat kolom yang dihasilkan yang mengekstrak data skalar yang relevan dan mengonversi 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 dijalankan terhadap kolom yang dihasilkan.
Dalam contoh berikut, Anda membuat indeks VenuesByCapacity
yang digunakan database untuk menemukan tempat dengan kapasitas lebih dari 1.000. Daripada
memeriksa setiap baris, 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 bervariasi. Tidak seperti indeks sekunder, Anda dapat membuat indeks penelusuran di atas dokumen JSON apa pun yang disimpan dalam kolom JSON. Indeks penelusuran otomatis beradaptasi 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 operasional. Daripada 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: