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 untuk project atau organisasi Anda, gunakan pernyataan ALTER PROJECT SET OPTIONSatau pernyataan ALTER ORGANIZATION SET OPTIONSuntuk mengubah konfigurasi default.

  • Untuk menjalankan kueri global di region, tetapkan argumen enable_global_queries_execution ke true di region tersebut untuk project yang menjalankan kueri.
  • Untuk mengizinkan kueri global menyalin data dari region, tetapkan argumen enable_global_queries_data_access ke true di region tersebut untuk project yang berisi data.
  • Setiap kali kueri Anda mengakses tabel jarak jauh, opsi ini akan diperiksa.
  • Kueri global dapat dijalankan dalam satu project dan mengambil data dari region lain dari project lain.

Contoh: Konfigurasi lintas project

Contoh berikut menunjukkan cara menjalankan kueri dalam satu project yang mengakses tabel di project lain.

Misalnya, Anda memiliki project query_project yang menjalankan tugas di region us-central1, dan Anda ingin menjalankan kueri yang mengakses tabel data_project.dataset.my_table yang berada di region europe-west1:

SET @@location='us-central1';
SELECT
  *
FROM
  `query_project.dataset.my_table`
  JOIN `data_project.dataset.my_other_table` USING id;

Agar kueri global ini dapat dijalankan dengan berhasil, konfigurasi berikut diperlukan:

  1. Anda harus mengaktifkan eksekusi kueri global di project (query_project) di region yang menjalankan kueri global (us-central1):

    ALTER PROJECT `query_project`
    SET OPTIONS (
    `region-us-central1.enable_global_queries_execution` = TRUE
    );
  2. Anda harus mengaktifkan penyalinan data oleh kueri global dari project yang berisi data (data_project) untuk regionnya (europe-west1):

    ALTER PROJECT `data_project`
    SET OPTIONS (
    `region-europe-west1.enable_global_queries_data_access` = TRUE
    );

Untuk membuat dan menggunakan tampilan yang berisi tabel jarak jauh, prinsip yang sama berlaku: project yang menjalankan kueri harus mengaktifkan enable_global_queries_execution.

Operasi ALTER PROJECT ini harus dijalankan secara terpisah karena merujuk ke project dan region yang berbeda. Perubahan ini dapat memerlukan waktu beberapa menit agar 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:

  1. Buat peran kustom, misalnya "BigQuery global queries executor".
  2. Tambahkan bigquery.jobs.createGlobalQuery ke peran ini.
  3. Tetapkan peran ini ke 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 direferensikan oleh kueri disimpan di lebih dari satu lokasi, BigQuery akan mencoba menjalankan kueri global. Dalam beberapa kasus, BigQuery akan otomatis memilih lokasi kueri. Jika tidak, Anda harus menentukan lokasi tempat menjalankan kueri. Data yang direferensikan 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 dijalankan ditentukan secara otomatis dan tidak dapat diubah:

  • Kueri bahasa modifikasi data (pernyataan INSERT, UPDATE, DELETE) selalu dijalankan di lokasi tabel target.
  • Kueri bahasa definisi data, seperti pernyataan CREATE TABLE AS SELECT, selalu dijalankan di lokasi tempat resource dibuat atau diubah.
  • Kueri dengan tabel tujuan yang ditentukan selalu dijalankan di lokasi tempat tabel tujuan berada.

Memilih lokasi

Secara umum, Anda menentukan tempat kueri global Anda dijalankan. 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 Anda menyimpan daftar produk Anda di lokasi us-central1, tetapi transaksi di us-south1 region. Jika ada lebih banyak transaksi daripada produk dalam katalog Anda, Anda harus menjalankan kueri di region us-south1.

Memahami kueri global

Untuk menjalankan kueri global dengan cara yang efisien dan hemat biaya, penting untuk memahami mekanisme di balik eksekusinya.

Untuk menggunakan data yang berada di lokasi berbeda, data tersebut harus direplikasi ke satu lokasi. Berikut adalah abstraksi alur kerja kueri global yang dilakukan oleh BigQuery:

  1. Tentukan tempat kueri harus dijalankan, baik dari deklarasi pengguna maupun secara otomatis. Lokasi ini disebut lokasi utama, dan semua lokasi lain yang direferensikan oleh kueri adalah jarak jauh.
  2. Jalankan subkueri di setiap region jarak jauh untuk mengumpulkan data yang diperlukan untuk menyelesaikan kueri di region utama.
  3. Salin data ini dari lokasi jarak jauh ke lokasi utama.
  4. Simpan data dalam tabel sementara di lokasi utama selama 8 jam.
  5. Jalankan kueri akhir dengan semua data yang dikumpulkan di lokasi utama.
  6. Tampilkan 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 AS ke Uni Eropa. Cukup mentransfer 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 mungkin besar. Sebaiknya uji kueri global pada subset data kecil 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 region, tetapkan argumen enable_global_queries_execution ke false atau NULL di region tersebut.
  • Untuk melarang kueri global menyalin data dari region, tetapkan argumen enable_global_queries_data_access ke false atau NULL di region tersebut.

Contoh berikut menunjukkan cara menonaktifkan kueri global di tingkat project:

ALTER PROJECT PROJECT_ID
SET 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 diubah
  • REGION: nama region tempat kueri global akan dinonaktifkan

Perubahan ini dapat memerlukan waktu beberapa menit agar diterapkan.

Harga

Biaya kueri global terdiri dari komponen berikut:

  • Biaya komputasi setiap subkueri di lokasi jarak jauh, berdasarkan model harga Anda di lokasi ini
  • Biaya komputasi kueri akhir di region tempat kueri dijalankan, berdasarkan model harga Anda di region tersebut
  • Biaya penyalinan data antar-lokasi yang berbeda, sesuai dengan 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 kueri dan grafik eksekusi tidak menampilkan jumlah byte yang diproses dan ditransfer dari lokasi jarak jauh. Informasi ini muncul dalam tugas salin yang dapat Anda temukan di histori tugas. ID tugas dari tugas salin 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 mengkueri kolom jenis RANGE dengan kueri global.
  • Anda tidak dapat mengkueri kolom menggunakan nama kolom fleksibel dengan kueri global.
  • Anda tidak dapat mengkueri INFORMATION_SCHEMA tampilan dari region jarak jauh dalam kueri global.
  • Tampilan resmi global dan rutinitas resmi tidak didukung (saat tampilan atau rutinitas di satu lokasi diizinkan untuk mengakses set data di lokasi lain). Sebagai gantinya, buat tampilan resmi di region tempat data Anda berada dan kueri tampilan resmi melalui kueri global.
  • Tampilan terwujud melalui 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 kolom STRUCT dan hanya menampilkan kolom yang diperlukan sebagai kolom individual.
  • Kueri global tidak dijalankan secara atomik. Jika replikasi data berhasil, tetapi kueri keseluruhan gagal, Anda tetap akan 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 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.
  • Satu kueri global dapat mengakses hingga 10 tabel jarak jauh per region.