Kueri global
Kueri global memungkinkan Anda menjalankan kueri SQL yang mereferensikan data yang disimpan di lebih dari satu region.
Misalnya, Anda dapat menjalankan kueri global yang menggabungkan tabel yang berada di us-central1 dengan tabel yang berada di europe-central2. Dokumen ini menjelaskan cara mengaktifkan dan menjalankan kueri global di project Anda.
Sebelum memulai
Pastikan kueri global diaktifkan untuk project Anda dan pastikan Anda memiliki izin yang diperlukan untuk menjalankan kueri global.
Mengaktifkan kueri global
Untuk mengaktifkan kueri global bagi project atau organisasi Anda, gunakan
pernyataan ALTER PROJECT SET OPTIONS
atau pernyataan ALTER ORGANIZATION SET OPTIONS
untuk mengubah konfigurasi default.
- Untuk menjalankan kueri global di suatu region, tetapkan argumen
enable_global_queries_executionketruedi region tersebut untuk project tempat kueri dijalankan. - Untuk mengizinkan kueri global menyalin data dari suatu region, tetapkan argumen
enable_global_queries_data_accessketruedi region tersebut untuk project tempat data disimpan. - Kueri global dapat dijalankan dalam satu project dan menarik data dari region lain dari project lain.
Contoh berikut menunjukkan cara mengubah setelan ini di tingkat project. Misalnya, Anda ingin menjalankan kueri global di region REGION_1 dalam project PROJECT_1_ID dan menarik data dari REGION_2 dalam project PROJECT_2_ID:
ALTER PROJECT `PROJECT_1_ID` SET OPTIONS ( `region-REGION_1.enable_global_queries_execution` = true ); ALTER PROJECT `PROJECT_2_ID` SET OPTIONS ( `region-REGION_2.enable_global_queries_data_access` = true );
Ganti kode berikut:
PROJECT_1_ID: nama project tempat kueri global akan dijalankanREGION_1: region tempat kueri global akan dijalankanPROJECT_2_ID: nama project tempat kueri global akan menarik dataREGION_2: region tempat kueri global akan mengambil data dari
Diperlukan waktu beberapa menit agar perubahan diterapkan.
Izin yang diperlukan
Untuk menjalankan kueri global, Anda harus memiliki izin bigquery.jobs.createGlobalQuery.
Peran Admin BigQuery adalah satu-satunya peran bawaan yang berisi izin ini. Untuk memberikan izin menjalankan kueri global tanpa memberikan peran Admin BigQuery, ikuti langkah-langkah berikut:
- Buat peran kustom, misalnya "BigQuery global queries executor".
- Tambahkan
bigquery.jobs.createGlobalQueryke peran ini. - Tetapkan peran ini kepada pengguna atau akun layanan yang dipilih.
Data kueri
Untuk menjalankan kueri global, Anda menulis kueri SQL seperti yang Anda lakukan jika data Anda berada di satu lokasi. Jika data yang dirujuk oleh kueri disimpan di lebih dari satu lokasi, BigQuery akan mencoba menjalankan kueri global. Dalam beberapa kasus, BigQuery memilih lokasi kueri secara otomatis. Jika tidak, Anda harus menentukan lokasi tempat menjalankan kueri. Data yang dirujuk oleh kueri yang tidak berada di lokasi yang dipilih akan disalin ke lokasi tersebut.
Contoh berikut dijalankan sebagai kueri global yang menggabungkan tabel dari dua set data berbeda yang disimpan di dua lokasi berbeda:
SELECT id, tr_date, product_id, price FROM us_dataset.transactions
UNION ALL
SELECT id, tr_date, product_id, price FROM europe_dataset.transactions
Pemilihan lokasi otomatis
Dalam kasus berikut, lokasi tempat kueri harus dieksekusi ditentukan secara otomatis dan tidak dapat diubah:
- Kueri bahasa modifikasi data (pernyataan
INSERT,UPDATE,DELETE) selalu dieksekusi di lokasi tabel target. - Kueri bahasa definisi data, seperti pernyataan
CREATE TABLE AS SELECT, selalu dieksekusi di lokasi tempat resource dibuat atau diubah. - Kueri dengan tabel tujuan yang ditentukan selalu dieksekusi di lokasi tempat tabel tujuan berada.
Pilih lokasi
Secara umum, Anda memutuskan tempat kueri global Anda dieksekusi. Untuk membuat keputusan tersebut, pertimbangkan hal berikut:
Kueri global menyalin data dari satu lokasi ke lokasi lain untuk sementara. Jika organisasi Anda memiliki persyaratan residensi data, dan Anda tidak ingin data Anda dari lokasi A keluar dari lokasi A, tetapkan lokasi kueri ke A.
Untuk meminimalkan jumlah data yang ditransfer antar-lokasi dan mengurangi biaya kueri, jalankan kueri Anda di region tempat sebagian besar data yang dikueri disimpan.
Bayangkan Anda memiliki toko online dan menyimpan daftar produk di lokasi
us-central1, tetapi transaksi di wilayah us-south1. Jika ada lebih banyak transaksi daripada produk di katalog Anda, Anda harus menjalankan kueri di region us-south1.
Memahami kueri global
Untuk menjalankan kueri global secara efisien dan hemat biaya, penting untuk memahami mekanisme di balik eksekusinya.
Untuk menggunakan data yang berada di lokasi yang berbeda, data tersebut harus direplikasi ke satu lokasi. Berikut adalah abstraksi alur kerja kueri global yang dilakukan oleh BigQuery:
- Tentukan tempat kueri harus dieksekusi, baik dari deklarasi pengguna atau secara otomatis). Lokasi ini disebut lokasi utama, dan semua lokasi lain yang dirujuk oleh kueri adalah jarak jauh.
- Jalankan sub-kueri di setiap wilayah jarak jauh untuk mengumpulkan data yang diperlukan untuk menyelesaikan kueri di wilayah utama.
- Salin data ini dari lokasi jarak jauh ke lokasi utama.
- Simpan data dalam tabel sementara di lokasi utama selama 8 jam.
- Jalankan kueri akhir dengan semua data yang dikumpulkan di lokasi utama.
- Menampilkan hasil kueri.
BigQuery mencoba meminimalkan jumlah data yang ditransfer antar-region. Perhatikan contoh berikut:
SET @@location = 'EU';
SELECT
t1.col1, t2.col2
FROM
eu_dataset.table1 t1
JOIN us_dataset.table2 t2 using col3
WHERE
t2.col4 = 'ABC'
BigQuery tidak perlu mereplikasi semua tabel t2 dari Amerika Serikat ke Uni Eropa.
Anda cukup mentransfer hanya kolom yang diminta (col2 dan col3)
dan hanya baris yang cocok dengan kondisi WHERE (t2.col4 = 'ABC').
Namun, mekanisme ini, yang dikenal sebagai pushdown, bergantung pada struktur kueri
dan terkadang jumlah data yang ditransfer bisa besar.
Sebaiknya uji kueri global pada subset kecil data dan pastikan data hanya ditransfer jika diperlukan.
Kemampuan observasi
Untuk melihat teks kueri yang dikirim ke region jarak jauh, periksa histori tugas. Tugas jarak jauh memiliki ID tugas yang sama dengan kueri asli dengan akhiran _xregion tambahan.
Menonaktifkan kueri global
Untuk menonaktifkan kueri global untuk project atau organisasi Anda, gunakan
ALTER PROJECT SET OPTIONS statement
atau ALTER ORGANIZATION SET OPTIONS statement
untuk mengubah konfigurasi default.
- Untuk menonaktifkan kueri global di suatu region, tetapkan argumen
enable_global_queries_executionkefalseatauNULLdi region tersebut. - Untuk melarang kueri global menyalin data dari suatu region, tetapkan argumen
enable_global_queries_data_accesskefalseatauNULLdi region tersebut.
Contoh berikut menunjukkan cara menonaktifkan kueri global di tingkat project:
ALTER PROJECTPROJECT_IDSET OPTIONS ( `region-REGION.enable_global_queries_execution` = false, `region-REGION.enable_global_queries_data_access` = false );
Ganti kode berikut:
PROJECT_ID: nama project yang akan diubahREGION: nama region tempat kueri global akan dinonaktifkan
Diperlukan waktu beberapa menit agar perubahan diterapkan.
Harga
Biaya kueri global terdiri dari komponen berikut:
- Biaya komputasi setiap subkueri di lokasi jarak jauh, berdasarkan model harga Anda di lokasi tersebut
- Biaya komputasi kueri akhir di wilayah tempat kueri dijalankan, berdasarkan model harga Anda di wilayah tersebut
- Biaya penyalinan data antar-lokasi yang berbeda, menurut Harga replikasi data
- Biaya penyimpanan data yang disalin dari region jarak jauh ke region utama (selama 8 jam), sesuai dengan Harga penyimpanan
Kuota
Untuk mengetahui informasi tentang kuota terkait kueri global, lihat Tugas kueri.
Batasan
- Detail eksekusi dan grafik eksekusi kueri tidak menampilkan jumlah byte yang diproses dan ditransfer dari lokasi jarak jauh. Informasi ini muncul dalam tugas penyalinan yang dapat Anda temukan di histori tugas Anda. ID tugas dari tugas salinan yang dibuat oleh kueri global memiliki ID tugas dari tugas kueri sebagai awalan.
- Kueri global tidak didukung dalam mode sandbox
- Kueri global menimbulkan latensi yang lebih tinggi daripada kueri satu region karena waktu yang diperlukan untuk mentransfer data antar-region.
- Kueri global tidak menggunakan cache apa pun untuk menghindari transfer data antar-region.
- Anda tidak dapat mengkueri pseudokolom, seperti
_PARTITIONTIME, dengan kueri global. - Anda tidak dapat membuat kueri kolom menggunakan nama kolom fleksibel dengan kueri global.
- Saat mereferensikan kolom tabel BigLake dalam klausa
WHERE, Anda tidak dapat menggunakan literalRANGEatauINTERVAL. - Tampilan yang diotorisasi dan rutinitas yang diotorisasi global tidak didukung (saat tampilan atau rutinitas di satu lokasi diizinkan untuk mengakses set data di lokasi lain).
- Tampilan terwujud atas kueri global tidak didukung.
- Jika kueri global Anda mereferensikan kolom
STRUCT, tidak ada pushdown yang diterapkan ke subkueri jarak jauh. Untuk mengoptimalkan performa, pertimbangkan untuk membuat tampilan di region jarak jauh yang memfilter kolomSTRUCTdan hanya menampilkan kolom yang diperlukan sebagai kolom individual. - Kueri global tidak dijalankan secara atomik. Jika replikasi data berhasil, tetapi keseluruhan kueri gagal, Anda tetap ditagih untuk replikasi data.
- Tabel sementara yang dibuat di region jarak jauh sebagai bagian dari eksekusi kueri global hanya dienkripsi menggunakan Kunci enkripsi yang dikelola pelanggan (CMEK) jika kunci CMEK yang dikonfigurasi untuk mengenkripsi hasil kueri global (baik di tingkat tabel, set data, atau project) bersifat global. Untuk memastikan bahwa tabel sementara jarak jauh selalu dilindungi menggunakan CMEK, tetapkan kunci KMS default untuk project yang menjalankan kueri global di region jarak jauh.
- Kueri global tidak didukung di Assured Workloads.
- Anda dapat membuat kueri maksimum 10 tabel per region dalam kueri global.