Menggunakan runtime tingkat lanjut BigQuery

Runtime lanjutan BigQuery adalah serangkaian peningkatan performa yang dirancang untuk mempercepat beban kerja analitis secara otomatis tanpa memerlukan tindakan pengguna atau perubahan kode. Dokumen ini menjelaskan peningkatan performa ini, termasuk pengoptimalan kueri singkat dan vektorisasi yang ditingkatkan.

Peran dan izin

Untuk mendapatkan izin yang diperlukan untuk menentukan setelan konfigurasi, minta administrator untuk memberi Anda peran IAM BigQuery Admin (roles/bigquery.admin) di project atau organisasi Anda. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Vektorisasi yang ditingkatkan

Eksekusi tervektorisasi adalah model pemrosesan kueri yang beroperasi pada kolom data dalam blok yang sesuai dengan ukuran cache CPU dan menggunakan instruksi single instruction, multiple data (SIMD). Vektorisasi yang ditingkatkan memperluas eksekusi kueri vektor di BigQuery ke aspek pemrosesan kueri berikut:

  • Dengan memanfaatkan encoding data khusus dalam format penyimpanan Capacitor, operasi evaluasi filter dapat dijalankan pada data yang dienkode.
  • Encoding khusus disebarkan melalui rencana kueri, yang memungkinkan lebih banyak data diproses saat masih dienkode.
  • Dengan menerapkan pelipatan ekspresi untuk mengevaluasi fungsi deterministik dan ekspresi konstanta, BigQuery dapat menyederhanakan predikat kompleks menjadi nilai konstanta.

Pengoptimalan kueri pendek

BigQuery biasanya menjalankan kueri di lingkungan terdistribusi menggunakan lapisan perantara shuffle. Pengoptimalan kueri singkat secara dinamis mengidentifikasi kueri yang dapat dijalankan sebagai satu tahap, sehingga mengurangi latensi dan konsumsi slot. Encoding khusus dapat digunakan secara lebih efektif saat kueri dijalankan dalam satu tahap. Pengoptimalan ini paling efektif jika digunakan dengan mode pembuatan tugas opsional, yang meminimalkan latensi startup, pemeliharaan, dan pengambilan hasil tugas.

Kelayakan untuk pengoptimalan kueri singkat bersifat dinamis dan dipengaruhi oleh faktor-faktor berikut:

  • Ukuran pemindaian data yang diprediksi.
  • Jumlah pemindahan data yang diperlukan.
  • Selektivitas filter kueri.
  • Jenis dan tata letak fisik data dalam penyimpanan.
  • Struktur kueri keseluruhan.
  • Statistik historis eksekusi kueri sebelumnya.

Mengaktifkan runtime lanjutan

Antara 15 September 2025 dan awal tahun 2026, BigQuery akan mulai menggunakan runtime lanjutan sebagai runtime default untuk semua project. Untuk mengaktifkan runtime lanjutan di project atau organisasi yang ada sekarang, gunakan pernyataan ALTER PROJECT atau ALTER ORGANIZATION untuk mengubah konfigurasi default. Dalam pernyataan, tetapkan argumen query_runtime ke 'advanced'. Contoh:

ALTER PROJECT PROJECT_NAME
SET OPTIONS (
  `region-LOCATION.query_runtime` = 'advanced'
);

Ganti kode berikut:

  • PROJECT_NAME: nama project
  • LOCATION: lokasi tempat tugas harus mencoba menggunakan runtime lanjutan

Diperlukan waktu beberapa menit agar perubahan diterapkan.

Setelah Anda mengaktifkan runtime lanjutan, kueri yang memenuhi syarat dalam project atau organisasi akan menggunakan runtime lanjutan, terlepas dari pengguna yang membuat tugas kueri.

Memperkirakan dampak runtime lanjutan

Untuk memperkirakan dampak runtime lanjutan, Anda dapat menggunakan kueri SQL berikut untuk mengidentifikasi kueri project dengan perkiraan peningkatan terbesar pada waktu eksekusi:

WITH
  jobs AS (
    SELECT
      *,
      query_info.query_hashes.normalized_literals AS query_hash,
      TIMESTAMP_DIFF(end_time, start_time, MILLISECOND) AS elapsed_ms,
      EXISTS(
        SELECT 1
        FROM UNNEST(JSON_QUERY_ARRAY(query_info.optimization_details.optimizations)) AS o
        WHERE JSON_VALUE(o, '$.enhanced_vectorization') = 'applied'
      ) AS has_advanced_runtime
    FROM region-LOCATION.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE EXTRACT(DATE FROM creation_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
  ),
  most_recent_jobs_without_advanced_runtime AS (
    SELECT *
    FROM jobs
    WHERE NOT has_advanced_runtime
    QUALIFY ROW_NUMBER() OVER (PARTITION BY query_hash ORDER BY end_time DESC) = 1
  )
SELECT
  job.job_id,
  100 * SAFE_DIVIDE(
    original_job.elapsed_ms - job.elapsed_ms,
    original_job.elapsed_ms) AS percent_execution_time_saved,
  job.elapsed_ms AS new_elapsed_ms,
  original_job.elapsed_ms AS original_elapsed_ms,
FROM jobs AS job
INNER JOIN most_recent_jobs_without_advanced_runtime AS original_job
  USING (query_hash)
WHERE
  job.has_advanced_runtime
  AND original_job.end_time < job.start_time
ORDER BY percent_execution_time_saved DESC
LIMIT 10;

Ganti kode berikut:

  • LOCATION: lokasi tempat performa tugas harus diukur

Jika runtime lanjutan diaktifkan dan diterapkan, hasil kueri ini mungkin mirip dengan berikut ini:

/*--------------+----------------------------+----------------+---------------------*
 |    job_id    | percent_elapsed_time_saved | new_elapsed_ms | original_elapsed_ms |
 +--------------+----------------------------+----------------+---------------------+
 | sample_job1  |         45.38834951456311  |            225 |                 412 |
 | sample_job2  |         45.19480519480519  |            211 |                 385 |
 | sample_job3  |         33.246753246753244 |            257 |                 385 |
 | sample_job4  |         29.28802588996764  |           1311 |                1854 |
 | sample_job5  |         28.18181818181818  |           1027 |                1430 |
 | sample_job6  |         25.804195804195807 |           1061 |                1430 |
 | sample_job7  |         25.734265734265733 |           1062 |                1430 |
 | sample_job8  |         25.454545454545453 |           1066 |                1430 |
 | sample_job9  |         25.384615384615383 |           1067 |                1430 |
 | sample_job10 |         25.034965034965033 |           1072 |                1430 |
 *--------------+----------------------------+----------------+---------------------*/

Hasil kueri ini hanyalah perkiraan dampak runtime lanjutan. Banyak faktor yang dapat memengaruhi performa kueri, termasuk, tetapi tidak terbatas pada ketersediaan slot, perubahan data dari waktu ke waktu, definisi tampilan atau UDF, dan perbedaan nilai parameter kueri.

Jika hasil kueri ini kosong, berarti tidak ada tugas yang menggunakan runtime lanjutan, atau semua tugas dioptimalkan lebih dari 30 hari yang lalu.

Kueri ini dapat diterapkan ke metrik performa kueri lainnya seperti total_slot_ms dan total_bytes_billed. Untuk mengetahui informasi selengkapnya, lihat skema untuk INFORMATION_SCHEMA.JOBS_BY_PROJECT.