Kueri indeks sekunder asinkron

Dokumen ini memberikan contoh pola kueri umum untuk membuat indeks sekunder asinkron di Bigtable. Contoh ini menggunakan ID dan nilai yang serupa dengan yang ada di Data untuk contoh dan Anda dapat membuat tabel pengujian untuk menguji kueri.

Sebelum membaca halaman ini, pahami Membuat indeks sekunder asinkron dan GoogleSQL untuk Bigtable.

Contoh kueri

Contoh berikut menunjukkan cara membuat indeks sekunder asinkron menggunakan kueri GoogleSQL yang berbeda.

Membuat indeks terbalik berdasarkan kualifikasi dan nilai kolom

Kueri berikut membuat indeks terbalik dengan mengekstrak semua pasangan nilai kunci dari grup kolom yang memiliki skema fleksibel. Fungsi ini menggunakan MAP_ENTRIES untuk mendapatkan array semua data yang disimpan oleh grup kolom stats_summary, lalu UNNEST untuk mengubah setiap pasangan nilai kunci menjadi baris terpisah. Indeks yang dihasilkan memungkinkan pencarian cepat berdasarkan stat_description dan stat_value. Jika Anda menambahkan jenis statistik baru ke tabel sumber, Bigtable akan menyertakannya dalam indeks asinkron secara otomatis.

SELECT
 stats.key as stat_description,
 stats.value as stat_value,
 _key as original_key,
 cell_plan as cell_plan
FROM test_table
CROSS JOIN UNNEST(MAP_ENTRIES(stats_summary)) stats
ORDER BY stat_description, stat_value, original_key

Membuat kunci baris baru berdasarkan data yang ada

Contoh berikut membuat kunci indeks baru, total_plan_capacity, dengan mengategorikan paket data yang disimpan oleh grup kolom cell_plan. Kueri menggunakan MAP_KEYS untuk mendapatkan semua kunci di cell_plan dan ARRAY_INCLUDES_ANY untuk memfilter kunci paket data tertentu. Pernyataan CASE kemudian menentukan logika untuk menetapkan kategori total_plan_capacity yang didasarkan pada keberadaan dan nilai paket data ini. Hal ini memungkinkan pencarian yang efisien berdasarkan kapasitas paket data gabungan.

SELECT
 CASE
    WHEN
     cell_plan['data_plan_01gb'] = "true"
     AND (cell_plan['data_plan_05gb'] = "false" OR cell_plan['data_plan_05gb'] IS NULL)
     AND (cell_plan['data_plan_10gb'] = "false" OR cell_plan['data_plan_10gb'] IS NULL)
   THEN 'x-small'

   WHEN
     cell_plan['data_plan_01gb'] = "true"
     AND (cell_plan['data_plan_05gb'] = "true")
     AND (cell_plan['data_plan_10gb'] = "false" OR cell_plan['data_plan_10gb'] IS NULL)
   THEN 'small'

   WHEN
     cell_plan['data_plan_01gb'] = "true"
     AND (cell_plan['data_plan_05gb'] = "false" OR cell_plan['data_plan_05gb'] IS NULL)
     AND (cell_plan['data_plan_10gb'] = "true")
   THEN 'medium'

   WHEN
     (cell_plan['data_plan_01gb'] = "false" OR cell_plan['data_plan_01gb'] IS NULL)
     AND (cell_plan['data_plan_05gb'] = "true")
     AND (cell_plan['data_plan_10gb'] = "true")
   THEN 'large'

   WHEN
     cell_plan['data_plan_01gb'] = "true"
     AND (cell_plan['data_plan_05gb'] = "true")
     AND (cell_plan['data_plan_10gb'] = "true")
   THEN 'x-large'
 END as total_plan_capacity,
 _key as original_key,
 stats_summary
FROM test_table
WHERE ARRAY_INCLUDES_ANY(MAP_KEYS(cell_plan), ["data_plan_01gb", "data_plan_05gb","data_plan_10gb"])
ORDER BY total_plan_capacity, original_key

Membuat indeks berbasis deret waktu

Bigtable menyimpan setiap nilai sel dan stempel waktu terkaitnya. Dengan menggunakan tanda WITH_HISTORY=>TRUE dalam klausa FROM, Anda dapat mengambil semua versi data dan stempel waktunya. Fungsi tabel UNPACK kemudian memperluas hasil kueri sehingga setiap nilai yang diberi stempel waktu muncul di barisnya sendiri dengan kolom _timestamp terpisah. Dengan demikian, Anda dapat membuat indeks sekunder asinkron dengan kunci baris baru berdasarkan nilai stempel waktu ini, sehingga memungkinkan pencarian cepat berdasarkan rentang waktu.

SELECT
 _timestamp as stats_timestamp,
 _key as original_key,
 stats_summary
FROM UNPACK((
 select
   _key,
   stats_summary
  FROM
 test_table (WITH_HISTORY=>TRUE)
))
ORDER BY stats_timestamp, original_key

Membuat entri indeks untuk item dan nilai dalam sel JSON

Bigtable sering digunakan sebagai penyimpanan key-value untuk beban kerja skala besar, termasuk data dalam format seperti JSON. Contoh berikut menunjukkan cara membuat indeks sekunder asinkron untuk pencarian cepat data yang disimpan JSON. Kueri menggunakan JSON_EXTRACT untuk mengekstrak store_id dari string JSON dalam grup kolom transaction_information dalam tabel bernama sales. Indeks ini memungkinkan pengambilan cepat transaksi penjualan menurut ID toko tertentu.

SELECT
JSON_EXTRACT(transaction_information["json"], "$.store_id") as store_id,
_key as original_key,
transaction_information
from sales
ORDER BY store_id, original_key;

Langkah berikutnya