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
dilakukan perjalanan 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, baca 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, baca 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, baca 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, baca 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, baca 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, baca 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, baca 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, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
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, baca 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, baca 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, baca 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, baca 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, baca 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, baca 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, baca 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, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Pembatasan
- Kolom JSON tidak dapat digunakan dalam ORDER BY.
- Kolom jenis JSON tidak mendukung pengindeksan. Namun, indeks dapat dibuat di kolom yang dihasilkan yang mengekstrak nilai skalar dari elemen JSON.
Pada contoh di bawah, indeks VenueMisc
dibuat pada kolom yang dihasilkan
Details
yang mengekstrak nilai skalar dari elemen JSON VenueDetails
.
json_path yang dapat diedit adalah nilai STRING dalam
format JSONPath.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
DateOpened DATE,
VenueDetails JSON,
Details STRING(MAX) AS (JSON_VALUE(VenueDetails, json_path)) STORED
) PRIMARY KEY(VenueId);
CREATE INDEX VenueMisc ON Venues(Details);
Referensi
- Jenis data JSON
- Fungsi JSON
- Operator JSON: