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 renggang atau memiliki struktur yang didefinisikan secara longgar atau berubah. Namun, pengoptimal kueri bergantung pada model relasional untuk memfilter, menggabungkan, menggabungkan, dan mengurutkan pada skala besar secara efisien. Kueri melalui JSON akan memiliki lebih sedikit pengoptimalan bawaan dan lebih sedikit kemampuan untuk memeriksa dan menyesuaikan performa.
Spesifikasi
Jenis JSON Spanner menyimpan representasi dokumen JSON input yang dinormalkan.
- JSON dapat disarangkan hingga maksimum 80 tingkat.
- Spasi kosong tidak dipertahankan.
- Komentar tidak didukung. Transaksi atau kueri dengan komentar akan gagal.
- Anggota objek JSON diurutkan secara leksikografis.
- Elemen array JSON mempertahankan urutannya.
- Jika objek JSON memiliki kunci duplikat, hanya kunci pertama yang akan dipertahankan.
- Jenis primitif (string, boolean, angka, dan null) mempertahankan jenis
dan nilainya.
- Nilai jenis string dipertahankan dengan tepat.
- Nilai jenis angka dipertahankan, tetapi representasi tekstualnya
mungkin berubah sebagai hasil dari proses normalisasi. Misalnya, angka input 10.000 mungkin memiliki representasi 1e+4 yang dinormalisasi. Semantik pemeliharaan nilai angka adalah
sebagai berikut:
- Bilangan bulat bertanda tangan dalam rentang [INT64_MIN, INT64_MAX] dipertahankan.
- Bilangan bulat tanpa tanda dalam rentang [0, UINT64_MAX] dipertahankan.
- Nilai ganda yang dapat dibolak-balik dari string menjadi dua kali lipat menjadi string tanpa kehilangan presisi akan dipertahankan. Jika nilai double tidak dapat
bolak-balik dengan cara ini, transaksi atau kueri akan gagal.
- Misalnya,
SELECT JSON '2.2412421353246235436'
akan gagal. - Solusi fungsional adalah
PARSE_JSON('2.2412421353246235436', wide_number_mode=>'round')
, yang menampilkanJSON '2.2412421353246237'
.
- Misalnya,
Ukuran maksimum yang diizinkan untuk dokumen yang dinormalkan adalah 2621440 karakter UTF-8.
Dapat berisi nilai null
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 bersifat 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
yang disebut 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi 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 mengautentikasi ke Spanner, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Pembatasan
- Kolom JSON tidak dapat digunakan pada 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 di kolom Details
yang dihasilkan
dan 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: