Menggunakan hasil kueri yang di-cache
BigQuery menulis semua hasil kueri ke tabel. Tabel tersebut diidentifikasi secara eksplisit oleh pengguna (tabel tujuan), atau merupakan tabel hasil sementara yang di-cache. Jika Anda menjalankan kueri yang sama persis lagi, BigQuery akan menampilkan hasil dari tabel yang di-cache, jika ada. Tabel hasil sementara yang di-cache dipertahankan per pengguna, per project. Bergantung pada edisi Anda, Anda mungkin memiliki akses ke hasil yang di-cache dari pengguna lain yang menjalankan kueri di project yang sama. Tidak ada biaya penyimpanan untuk tabel hasil kueri yang di-cache, tetapi jika Anda menulis hasil kueri ke tabel permanen, Anda akan dikenai biaya untuk menyimpan data.
Semua hasil kueri, termasuk kueri interaktif dan kueri batch, disimpan dalam cache dalam tabel sementara selama sekitar 24 jam dengan beberapa pengecualian.
Batasan
Penggunaan cache kueri tunduk pada batasan berikut:
- Saat Anda menjalankan kueri duplikat, BigQuery akan mencoba menggunakan kembali hasil yang di-cache. Untuk mengambil data dari cache, teks kueri duplikat harus sama dengan kueri aslinya.
- Agar hasil kueri tetap ada dalam tabel hasil yang di-cache, kumpulan hasil harus lebih kecil dari ukuran respons maksimum. Untuk informasi selengkapnya tentang mengelola kumpulan hasil yang besar, lihat Menampilkan hasil kueri yang besar.
- Anda tidak dapat menargetkan tabel hasil yang di-cache dengan pernyataan DML.
- Meskipun semantik saat ini mengizinkannya, penggunaan hasil yang di-cache sebagai input untuk tugas dependen tidak disarankan. Misalnya, Anda tidak boleh
mengirimkan tugas kueri yang mengambil hasil dari tabel cache. Sebagai gantinya, tulis
hasil Anda ke tabel tujuan yang telah diberi nama. Untuk menyederhanakan pembersihan, fitur seperti properti
defaultTableExpirationMs
tingkat set data dapat menghentikan masa berlaku data secara otomatis setelah durasi tertentu.
Harga dan kuota
Hasil kueri yang di-cache disimpan sebagai tabel sementara. Anda tidak akan dikenai biaya untuk penyimpanan hasil kueri yang di-cache dalam tabel sementara. Saat hasil kueri diambil dari tabel hasil yang di-cache, properti statistik tugas statistics.query.cacheHit
akan ditampilkan sebagai true
, dan Anda tidak dikenai biaya untuk kueri tersebut. Meskipun Anda tidak dikenai biaya untuk kueri yang menggunakan hasil yang di-cache, kueri tersebut tunduk pada kebijakan kuota BigQuery.
Selain mengurangi biaya, kueri yang menggunakan hasil yang di-cache jauh lebih cepat karena BigQuery tidak perlu menghitung kumpulan hasil.
Pengecualian untuk cache kueri
Hasil kueri tidak di-cache:
- Saat tabel tujuan ditentukan dalam konfigurasi tugas, konsol Google Cloud, alat command line bq, atau API.
- Jika salah satu tabel atau tampilan logis yang direferensikan telah berubah sejak hasil sebelumnya di-cache.
- Jika salah satu tabel yang dirujuk oleh kueri baru-baru ini menerima streaming insert (tabel berisi data dalam penyimpanan yang dioptimalkan untuk tulis), meskipun tidak ada baris baru yang masuk.
- Jika kueri menggunakan fungsi non-deterministik; misalnya, fungsi tanggal dan waktu seperti
CURRENT_TIMESTAMP()
danCURRENT_DATE
, serta fungsi lain sepertiSESSION_USER()
, yang menampilkan nilai yang berbeda bergantung pada kapan kueri dijalankan. - Jika Anda membuat kueri beberapa tabel menggunakan karakter pengganti.
- Jika hasil yang disimpan dalam cache telah kedaluwarsa; masa aktif cache pada umumnya adalah 24 jam, tetapi hasil yang disimpan dalam cache adalah upaya terbaik dan mungkin akan tidak valid lebih cepat.
- Apakah kueri dijalankan terhadap sumber data eksternal selain Cloud Storage. (Kueri GoogleSQL di Cloud Storage didukung oleh hasil kueri yang di-cache.)
- Jika kueri dijalankan pada tabel yang dilindungi oleh keamanan tingkat baris, hasilnya tidak akan di-cache.
- Jika kueri dijalankan pada tabel yang dilindungi oleh keamanan tingkat kolom, hasilnya mungkin tidak akan di-cache.
Cara hasil yang di-cache disimpan
Saat Anda menjalankan kueri, tabel hasil sementara yang di-cache akan dibuat dalam jenis khusus set data tersembunyi yang disebut sebagai set data anonim.
Tidak seperti set data reguler yang mewarisi izin dari model hierarki resource IAM (izin project dan organisasi), akses ke set data anonim dibatasi untuk pemilik. Pemilik set data anonim adalah pengguna yang menjalankan kueri yang menghasilkan hasil yang di-cache. Selain itu, izin bigquery.jobs.create
diperiksa pada project untuk memverifikasi bahwa pengguna memiliki akses ke project.
BigQuery tidak mendukung berbagi set data anonim. Jika Anda ingin membagikan hasil kueri, jangan gunakan hasil yang di-cache yang disimpan dalam set data anonim. Sebagai gantinya, tulis hasilnya ke tabel tujuan yang telah diberi nama.
Meskipun pengguna yang menjalankan kueri memiliki akses penuh ke set data dan tabel hasil yang di-cache, menggunakannya sebagai input untuk tugas dependen tidak disarankan.
Nama-nama set data anonim dimulai dengan garis bawah. Tindakan ini akan menyembunyikannya dari daftar set data di konsol Google Cloud. Anda dapat membuat daftar set data anonim dan mengaudit kontrol akses set data anonim menggunakan alat command line bq atau API.
Untuk mengetahui informasi selengkapnya tentang cara mencantumkan dan mendapatkan informasi tentang set data, termasuk set data anonim, lihat Mencantumkan set data.
Penyimpanan cache lintas pengguna
Jika Anda menggunakan edisi Enterprise atau Enterprise Plus dan memiliki izin yang diperlukan untuk menjalankan kueri yang di-cache di project Anda untuk pengguna lain, BigQuery akan menghasilkan hasil yang di-cache. Hasil yang di-cache akan dikopy ke set data anonim pribadi Anda dan tetap ada selama 24 jam sejak Anda menjalankan kueri. Batas dan pengecualian yang sama untuk penyimpanan dalam cache pengguna tunggal berlaku untuk penyimpanan dalam cache lintas pengguna.
Menonaktifkan pengambilan hasil yang di-cache
Opsi Gunakan hasil yang di-cache menggunakan kembali hasil dari kueri yang sama sebelumnya dijalankan kecuali jika tabel yang dikueri telah berubah. Menggunakan hasil yang di-cache hanya bermanfaat untuk kueri berulang. Untuk kueri baru, opsi Gunakan hasil yang di-cache tidak berpengaruh, meskipun diaktifkan secara default.
Saat Anda mengulangi kueri dengan opsi Gunakan hasil yang di-cache dinonaktifkan, hasil yang ada dalam cache akan ditimpa. Hal ini memerlukan BigQuery untuk menghitung hasil kueri, dan Anda akan dikenai biaya untuk kueri tersebut. Hal ini sangat berguna dalam skenario benchmark.
Jika ingin menonaktifkan pengambilan hasil yang di-cache dan memaksa evaluasi langsung atas tugas kueri, Anda dapat menetapkan properti configuration.query.useQueryCache
dari tugas kueri ke false
.
Untuk menonaktifkan opsi Gunakan hasil yang di-cache:
Konsol
Buka konsol Google Cloud.
Buka halaman BigQueryKlik Tulis Kueri Baru.
Masukkan kueri SQL yang valid di area teks Editor kueri.
Klik Lainnya dan pilih Setelan kueri.
Untuk Preferensi cache, hapus centang Gunakan hasil yang di-cache.
bq
Gunakan tanda nouse_cache
untuk menimpa cache kueri. Contoh berikut memaksa BigQuery untuk memproses kueri tanpa menggunakan hasil yang sudah ada dalam cache:
bq query \
--nouse_cache \
--batch \
'SELECT
name,
count
FROM
`my-project`.mydataset.names_2013
WHERE
gender = "M"
ORDER BY
count DESC
LIMIT
6'
API
Untuk memproses kueri tanpa menggunakan hasil yang sudah di-cache, tetapkan
properti useQueryCache
ke false
dalam konfigurasi tugas query
.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Java
Untuk memproses kueri tanpa menggunakan hasil yang sudah di-cache,
setel gunakan cache kueri
ke false
saat membuat
QueryJobConfiguration.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Node.js API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
PHP
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery PHP API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Memastikan penggunaan cache
Jika menggunakan metode jobs.insert
untuk menjalankan kueri, Anda dapat memaksa tugas kueri untuk gagal kecuali jika hasil yang di-cache dapat
digunakan dengan menyetel properti createDisposition
konfigurasi tugas query
menjadi CREATE_NEVER
.
Jika hasil kueri tidak ada di cache, error NOT_FOUND
akan ditampilkan.
bq
Gunakan flag --require_cache
untuk mewajibkan hasil dari cache kueri. Contoh berikut memaksa BigQuery untuk memproses kueri jika hasilnya ada di cache:
bq query \
--require_cache \
--batch \
'SELECT
name,
count
FROM
`my-project`.mydataset.names_2013
WHERE
gender = "M"
ORDER BY
count DESC
LIMIT
6'
API
Untuk memproses kueri dengan hasil yang ada di cache, tetapkan
properti
createDisposition
ke CREATE_NEVER
dalam konfigurasi tugas query
.
Memverifikasi penggunaan cache
Gunakan salah satu metode berikut untuk menentukan apakah BigQuery menampilkan hasil menggunakan cache:
- Menggunakan Konsol Google Cloud. Buka Hasil kueri, lalu klik Informasi Tugas. Byte yang diproses menampilkan 0 B (hasil yang di-cache).
- Gunakan BigQuery API.
Properti
cacheHit
dalam hasil kueri disetel ketrue
.
Dampak keamanan tingkat kolom
Secara default, BigQuery menyimpan hasil kueri dalam cache selama 24 jam, dengan pengecualian yang disebutkan sebelumnya. Kueri terhadap tabel yang dilindungi oleh keamanan tingkat kolom mungkin tidak di-cache. Jika BigQuery menyimpan hasilnya di cache, masa aktif cache selama 24 jam akan berlaku.
Perubahan seperti menghapus grup atau pengguna dari peran Data Catalog Fine Grained Reader yang digunakan untuk tag kebijakan tidak membatalkan cache 24 jam. Perubahan pada grup kontrol akses Data Catalog Fine Grained Reader itu sendiri akan segera diterapkan, tetapi perubahan tersebut tidak membatalkan cache.
Dampaknya adalah jika pengguna menjalankan kueri, hasil kueri tetap terlihat oleh pengguna di layar. Pengguna juga dapat mengambil hasil tersebut dari cache meskipun mereka kehilangan akses ke data dalam 24 jam terakhir.
Selama 24 jam setelah pengguna dihapus dari peran Data Catalog Fine Grained Reader untuk tag kebijakan, pengguna dapat mengakses data yang di-cache hanya untuk data yang sebelumnya telah digunakan pengguna boleh dilihat. Jika baris ditambahkan ke tabel, pengguna tidak dapat melihat baris yang ditambahkan, meskipun hasilnya di-cache.