Halaman ini menjelaskan cara menggunakan jenis data JSONB
saat menggunakan Spanner.
JSONB
adalah jenis data PostgreSQL yang digunakan untuk menyimpan data semi-terstruktur
dalam dialek PostgreSQL Spanner. JSONB
menyimpan data
dalam format JavaScript Object Notation (JSON), yang mengikuti spesifikasi
yang dijelaskan dalam RFC 7159.
Spesifikasi
Jenis data JSONB
Spanner menyimpan representasi dokumen input yang dinormalkan. Hal ini menyiratkan hal berikut:
- Tanda kutip dan karakter spasi kosong tidak dipertahankan.
- Komentar tidak didukung. Transaksi atau kueri dengan komentar gagal.
- Kunci objek diurutkan terlebih dahulu menurut panjang kunci, lalu secara leksikografis menurut panjang kunci objek yang setara. Jika ada kunci objek duplikat, hanya kunci terakhir yang akan dipertahankan.
- Jenis primitif (
string
,boolean
,number
, dannull
) memiliki jenis dan nilainya yang dipertahankan.- Nilai jenis
string
dipertahankan dengan tepat. - Angka nol di belakangnya dipertahankan. Format output untuk nilai jenis
number
tidak menggunakan notasi ilmiah.
- Nilai jenis
Nilai
null
JSONB
diperlakukan sebagai non-NULL
SQL. Misalnya:SELECT null::jsonb IS NULL; -- Returns true SELECT 'null'::jsonb IS NULL; -- Returns false SELECT '{"a":null}'::jsonb -> 'a' IS NULL; -- Returns false SELECT '{"a":null}'::jsonb -> 'b' IS NULL; -- Returns true SELECT '{"a":null}'::jsonb -> 'a'; -- Returns a JSONB 'null' SELECT '{"a":null}'::jsonb -> 'b'; -- Returns a SQL NULL
Urutan elemen array JSONB dipertahankan.
Pembatasan
Batasan berikut berlaku dengan Spanner JSONB
:
- Argumen ke fungsi
to_jsonb
hanya dapat berasal dari jenis data PostgreSQL yang didukung Spanner. - Nilai jenis angka dapat memiliki 4.932 digit sebelum titik desimal dan 16.383 digit setelah titik desimal.
- Ukuran maksimum yang diizinkan untuk format penyimpanan yang dinormalkan adalah 10 MB.
JSONB
dokumen harus dienkode dalam UTF-8. Transaksi atau kueri dengan dokumenJSONB
yang dienkode dalam format lain akan menampilkan error.
Membuat tabel dengan kolom JSONB
Anda dapat menambahkan kolom JSONB
ke tabel saat membuat tabel.
CREATE TABLE Venues (
VenueId BIGINT PRIMARY KEY,
VenueName VARCHAR(1024),
VenueAddress VARCHAR(1024),
VenueFeatures JSONB,
DateOpened TIMESTAMPTZ
);
Contoh objek JSONB
VenueFeatures
sebagai berikut:
{
"rating": 4.5,
"capacity":"1500",
"construction":"brick",
"tags": [
"multi-cuisine",
"open-seating",
"stage",
"public address system"
]
}
Menambahkan dan menghapus kolom JSONB dari tabel yang ada
Anda dapat menambahkan kolom JSONB
dan menghapusnya menggunakan pernyataan ALTER
sebagai berikut:
ALTER TABLE Venues ADD COLUMN VenueDetails JSONB;
ALTER TABLE Venues DROP COLUMN VenueDetails;
Contoh berikut menunjukkan cara menambahkan kolom JSONB
yang disebut VenueDetails
ke
tabel Venues
menggunakan library klien Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Mengubah data JSONB
Anda dapat mengubah kolom JSONB
seperti kolom lainnya.
Contohnya sebagai berikut:
UPDATE Venues SET VenueFeatures = '{"rating": 4.5, "tags":["multi-cuisine", "open-seating"] }'
WHERE VenueId = 1;
Contoh berikut menunjukkan cara mengupdate data JSONB
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 JSONB
Anda dapat membuat kueri kolom JSONB
berdasarkan nilai kolom pokok. Contoh
berikut mengekstrak VenueId
dan VenueName
dari Venues
dengan
VenueFeatures
memiliki nilai rating
yang lebih besar dari 3.5
.
SELECT VenueId, VenueName FROM Venues WHERE (VenueFeatures->>'rating')::FLOAT8 > 3.5;
Contoh berikut menunjukkan cara membuat kueri data JSONB
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.
Fitur JSONB PostgreSQL yang tidak didukung
Fitur JSONB
PostgreSQL berikut tidak didukung di Spanner JSONB
:
- Pengurutan, perbandingan, dan agregasi
- PrimaryKey dan ForeignKey
- Pengindeksan, termasuk indeks GIN. Untuk informasi lebih lanjut, lihat Pengindeksan.
- Mengubah kolom
JSONB
ke atau dari jenis data lainnya - Menggunakan kueri berparameter dengan parameter JSONB tanpa jenis pada alat yang menggunakan protokol kabel PostgreSQL
Pemaksaan di mesin kueri. Tidak seperti PostgreSQL Standar, pemaksaan dari
JSONB
ke teks tidak didukung. Hanya stringJSON
yang valid yang dikonversi ke jenisJSONB
untuk cocok dengan tanda tangan fungsi. Contoh:SELECT concat('abc'::text, '{"key1":1}'::jsonb); -- Returns error SELECT concat('abc'::text, CAST('{"key1":1}'::jsonb AS TEXT)); -- This works
Pengindeksan
Kolom JSONB
tidak mendukung pengindeksan. Namun, Anda dapat membuat indeks pada
kolom yang dihasilkan untuk mengekstrak nilai skalar dari kolom JSONB
.
CREATE TABLE Venues (
VenueId BIGINT PRIMARY KEY,
VenueName VARCHAR(1024),
VenueAddress VARCHAR(1024),
VenueFeatures JSONB,
TotalCapacity BIGINT GENERATED ALWAYS AS ((VenueFeatures->>'capacity')::BIGINT) STORED,
DateOpened TIMESTAMPTZ
);
CREATE INDEX VenuesByCapacity ON Venues(TotalCapacity);