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

Langkah berikutnya