Kueri kunci baris terstruktur
Jika tabel memiliki skema kunci baris yang menentukan kunci baris terstruktur, Anda dapat menggunakan SQL untuk membuat kueri pada setiap segmen – atau kolom – kunci baris.
Tampilan terwujud berkelanjutan, termasuk indeks sekunder global, menghasilkan kunci baris terstruktur secara default. Anda juga dapat menentukan kunci baris terstruktur untuk tabel Bigtable yang ingin dikueri dengan SQL dengan membuat skema kunci baris untuk tabel tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengelola skema kunci baris.
Kunci
Dalam tabel Bigtable tanpa skema kunci baris terstruktur, setiap baris
diindeks oleh satu kunci baris. Saat Anda membuat kueri tabel dengan SQL, kunci baris
adalah kolom bernama _key
yang digunakan SQL sebagai kunci utama. Kolom ini bukan
pseudokolom, sehingga nilai dalam kolom _key
akan ditampilkan saat Anda menjalankan kueri
SELECT *
pada tabel.
Di sisi lain, dalam tabel yang memiliki skema kunci baris, kunci baris (kunci
utama) adalah kombinasi dari semua kolom yang diberi nama sebagai kolom dalam skema
kunci baris. Saat Anda menambahkan skema kunci baris ke tabel, kolom _key
akan menjadi
pseudokolom, yang berarti kolom tersebut tidak akan muncul dalam kueri SELECT *
, tetapi Anda dapat
memilihnya secara eksplisit dengan pernyataan SELECT _key
.
Sampel kueri
Contoh di bagian ini mengasumsikan bahwa tabel bernama sales
memiliki
skema berikut:
field {
field_name: "user_id"
type: { bytes_type { encoding { raw {} } } }
}
field {
field_name: "purchase_date"
type: { string_type { encoding { utf8_bytes {} } } }
}
field {
field_name: "order_number"
type: { string_type { encoding { utf8_bytes {} } } }
}
encoding {
delimited_bytes { delimiter "#" }
}
Tabel sales
berisi data berikut. Grup kolom product
memiliki
dua kolom.
kunci baris | produk | |
---|---|---|
product_type | product_name | |
"user1#2025-05-20#abcd1233" | "phone" (telepon) | "iPhone16_pro_max" |
"user1#2025-05-20#abcd1235" | "sepatu" | "nike_hyperdunk" |
"user2#2025-05-24#defg456" | "headphones" (headphone) | "sony_wh_1000mx5" |
Hasil kueri kunci baris terstruktur
Karena tabel sales
memiliki kunci baris terstruktur, jika Anda membuat kueri tabel dengan pernyataan
SELECT *
, kueri akan menampilkan setiap segmen kunci baris sebagai
kolom terpisah. Seperti dalam kueri SQL apa pun ke tabel Bigtable, kolom
dalam grup kolom dinyatakan sebagai peta.
SELECT * from sales
Hasilnya akan terlihat seperti berikut:
user_id | purchase_date | order_number | produk |
---|---|---|---|
pengguna1 | 2025-05-20 | "abcd1233" | { product_type: "phone", product_name: "iPhone16_pro_max" } |
pengguna1 | 2025-05-20 | "abcd1235" | { product_type: "shoes", product_name: "nike_hyperdunk" } |
pengguna2 | 2025-05-24 | "defg456" | { product_type: "headphones", product_name: "sony_wh_1000mx5" } |
Anda juga dapat menentukan kolom kunci baris dalam kueri, seperti yang ditunjukkan dalam contoh berikut:
SELECT
product[product_type] AS product_type,
product[product_name] AS product_name
FROM sales
WHERE user_id = b"user1"
Hasilnya akan terlihat seperti berikut:
product_type | product_name |
---|---|
"phone" (telepon) | "iphone16_pro_max" |
"sepatu" | "nike_hyperdunk" |
Filter
Anda dapat memfilter kolom skema kunci baris menggunakan fungsi SQL. Contoh berikut mengasumsikan bahwa CURRENT_DATE()
menampilkan 2025-05-24
:
SELECT
user_id,
product["product_name"] AS product_name
FROM
sales
WHERE
PARSE_DATE("YYYY-MM-DD", purchase_date) = CURRENT_DATE()
AND user_id = b"user2"
Hasilnya adalah sebagai berikut:
user_id | product_name |
---|---|
pengguna2 | "sony_wh_1000mx5" |
Kueri gabungan
Contoh berikut menunjukkan cara menggunakan kueri gabungan pada kolom kunci baris terstruktur:
SELECT
user_id,
product[product_type] AS product_type,
count(*) AS count
FROM sales
GROUP BY 1, 2
Hasil kuerinya adalah sebagai berikut:
user_id | product_type | jumlah |
---|---|---|
pengguna1 | telepon | 1 |
pengguna1 | sepatu | 1 |
pengguna2 | headphone | 1 |
Kunci baris asli
Untuk mengambil kunci baris asli dalam tabel dengan kunci baris terstruktur, tentukan
kolom _key
dalam kueri Anda.
SELECT
_key, user_id
FROM sales
Kueri menampilkan hal berikut:
_key | user_id |
---|---|
"user1#2025-05-20#abcd1233" | pengguna1 |
"user1#2025-05-20#abcd1235" | pengguna1 |
"user2#2025-05-24#defg456" | pengguna2 |