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;