Pengindeksan metadata untuk tabel BigQuery

BigQuery otomatis mengindeks metadata kolom untuk tabel BigQuery yang berukuran lebih dari 1 GiB dan menggunakan indeks tersebut untuk mempercepat kueri Anda. Metadata tersebut mencakup lokasi file, informasi partisi, dan atribut tingkat kolom. Secara default, pengindeksan adalah operasi latar belakang gratis, tetapi keaktualan indeks bergantung pada resource gratis yang tersedia dan tidak memiliki tujuan tingkat layanan (SLO) performa.

Jika keaktualan indeks sangat penting untuk workload Anda, Anda dapat mengalokasikan resource khusus dengan mengonfigurasi pemesanan BACKGROUND. Dokumen ini menjelaskan cara memantau keaktualan dan penggunaan indeks, menyiapkan resource pengindeksan khusus, dan mengonfigurasi pemberitahuan pengindeksan.

Melihat waktu pemuatan ulang indeks metadata

Untuk melihat waktu pemuatan ulang indeks metadata terakhir dari tabel, buat kueri kolom LAST_METADATA_INDEX_REFRESH_TIME dari tampilan INFORMATION_SCHEMA.TABLE_STORAGE. Untuk melakukannya, lakukan hal berikut:

  1. Di konsol Cloud de Confiance , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    SELECT
      project_id,
      project_number,
      table_name,
      last_metadata_index_refresh_time
    FROM
      [PROJECT_ID.]region-REGION.INFORMATION_SCHEMA.TABLE_STORAGE;

    Ganti kode berikut:

    • PROJECT_ID: ID project Cloud de Confiance by S3NS Anda. Jika tidak ditentukan, project default akan digunakan.
    • REGION: region tempat project berada—misalnya, region-us.
  3. Klik Run.

Melihat penggunaan indeks metadata kolom

Untuk melihat apakah indeks metadata kolom digunakan setelah tugas selesai, periksa properti TableMetadataCacheUsage resource Tugas. Jika kolom unusedReason kosong (tidak diisi), indeks metadata kolom akan digunakan. Jika diisi, kolom explanation yang menyertainya akan memberikan alasan mengapa indeks metadata kolom tidak digunakan.

Anda juga dapat melihat penggunaan indeks metadata kolom dengan kolom metadata_cache_statistics di tampilan INFORMATION_SCHEMA.JOBS.

Misalnya, berikut ini menampilkan penggunaan indeks metadata kolom untuk tugas my-job:

SELECT metadata_cache_statistics
FROM `region-US`.INFORMATION_SCHEMA.JOBS
WHERE job_id = 'my-job';

Sebagai contoh lain, berikut ini menampilkan jumlah tugas yang menggunakan indeks metadata kolom untuk tabel my-table:

SELECT COUNT(*)
FROM
  `region-US`.INFORMATION_SCHEMA.JOBS,
  UNNEST(metadata_cache_statistics.table_metadata_cache_usage) AS stats
WHERE
  stats.table_reference.table_id='my-table' AND
  stats.table_reference.dataset_id='my-dataset' AND
  stats.table_reference.project_id='my-project' AND
  stats.unusedReason IS NULL;

Menyiapkan resource pengindeksan khusus

Untuk menyiapkan resource untuk update pengindeksan metadata di project, Anda harus memiliki pemesanan yang ditetapkan ke project terlebih dahulu. Untuk melakukannya, lakukan hal berikut:

  1. Buat pemesanan BACKGROUND. Pemesanan BACKGROUND berbagi resource di seluruh tugas pengoptimalan latar belakang.
  2. Tetapkan project Anda ke pemesanan.

Setelah menyiapkan pemesanan, pilih salah satu metode berikut untuk menetapkan slot ke tugas pengindeksan metadata Anda. Secara default, slot yang Anda alokasikan dengan cara ini akan dibagikan ke tugas lain jika slot tidak ada aktivitas. Untuk mengetahui informasi selengkapnya, lihat Slot tidak ada aktivitas.

Konsol

  1. Di konsol Cloud de Confiance , buka halaman Workload management.

    Buka Workload management

  2. Klik Reservation actions > Create assignment.

  3. Pilih project pemesanan Anda.

  4. Tetapkan jenis pekerjaan ke Background.

  5. Klik Create.

bq

Gunakan perintah bq mk.

bq mk \
  --project_id=ADMIN_PROJECT_ID \
  --location=LOCATION \
  --reservation_assignment \
  --reservation_id=RESERVATION_NAME \
  --assignee_id=PROJECT_ID \
  --job_type=BACKGROUND \
  --assignee_type=PROJECT

Ganti kode berikut:

  • ADMIN_PROJECT_ID: project ID dari project administrasi yang memiliki resource pemesanan.
  • LOCATION: lokasi pemesanan.
  • RESERVATION_NAME: nama pemesanan.
  • PROJECT_ID: project ID yang akan ditetapkan ke pemesanan ini.

SQL

Untuk menetapkan pemesanan ke project, gunakan pernyataan DDL CREATE ASSIGNMENT.

  1. Di konsol Cloud de Confiance , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    CREATE ASSIGNMENT
    ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID
    OPTIONS (
      assignee = 'projects/PROJECT_ID',
      job_type = 'BACKGROUND');
    Ganti kode berikut:

    • ADMIN_PROJECT_ID: project ID dari project administrasi yang memiliki resource pemesanan.
    • LOCATION: lokasi pemesanan.
    • RESERVATION_NAME: nama pemesanan.
    • ASSIGNMENT_ID: ID tugas. ID harus unik untuk project dan lokasi, diawali dan diakhiri dengan huruf kecil atau angka, serta hanya berisi huruf kecil, angka, dan tanda hubung.
    • PROJECT_ID: project ID yang berisi tabel. Project ini ditetapkan ke pemesanan.
  3. Klik Run.

Melihat informasi tugas pengindeksan

Setelah menyiapkan tugas pengindeksan khusus, Anda dapat melihat informasi tentang tugas pengindeksan dengan tampilan JOBS. Contoh SQL berikut menunjukkan lima tugas refresh terbaru di PROJECT_NAME.

SELECT *
FROM
  region-us.INFORMATION_SCHEMA.JOBS
WHERE
  project_id = 'PROJECT_NAME'
  AND SEARCH(job_id, '`metadata_cache_refresh`')
ORDER BY
  creation_time DESC
LIMIT 5;

Ganti PROJECT_NAME dengan nama project yang berisi tugas pengindeksan metadata Anda.

Mengonfigurasi pemberitahuan pengindeksan metadata

Proses pemberitahuan Cloud Monitoring akan memberi tahu Anda saat performa BigQuery tidak memenuhi kriteria yang ditentukan. Untuk mengetahui informasi selengkapnya, lihat Ringkasan pemberitahuan. Dengan pengindeksan metadata, Anda dapat mengonfigurasi pemberitahuan untuk penggunaan slot dan keusangan.

Peringatan penggunaan slot

Pemberitahuan ini memberi tahu Anda saat pemesanan latar belakang melebihi persentase alokasi yang ditentukan. Nilai defaultnya adalah 95%. Anda dapat mengonfigurasi pemberitahuan ini untuk pemesanan tertentu atau untuk setiap pemesanan latar belakang. Saat pemberitahuan ini dipicu, sebaiknya Anda meningkatkan ukuran pemesanan.

Untuk mengonfigurasi pemberitahuan ini untuk setiap pemesanan latar belakang, lakukan hal berikut:

  1. Siapkan saluran notifikasi Monitoring jika Anda belum melakukannya.
  2. Buka halaman Integrations.

    Buka Integrasi

  3. Temukan integrasi BigQuery, lalu klik Lihat detail.

  4. Di tab Alerts, pilih Slot Usage - Background Metadata Cache Slot Usage Too High.

  5. Opsional: Untuk menyesuaikan pemberitahuan ini lebih lanjut, klik Show options > Customize alert policy.

  6. Untuk Configure notifications, pilih saluran notifikasi Anda.

  7. Klik Create.

Pemberitahuan keusangan

Notifikasi ini memberi tahu Anda saat keusangan indeks metadata kolom rata-rata meningkat terlalu banyak dibandingkan dengan rata-rata yang ada. Nilai minimum default adalah jika rata-rata selama 4 jam lebih dari dua kali lipat rata-rata sebelumnya selama lebih dari 30 menit. Saat pemberitahuan ini dipicu, sebaiknya Anda meningkatkan ukuran pemesanan atau membuat pemesanan latar belakang jika Anda belum memilikinya.

Untuk mengonfigurasi pemberitahuan ini, lakukan tindakan berikut:

  1. Siapkan saluran notifikasi Monitoring jika Anda belum melakukannya.
  2. Buka halaman Integrations.

    Buka Integrasi

  3. Temukan integrasi BigQuery, lalu klik Lihat detail.

  4. Di tab Alerts, pilih Column Metadata Index Staleness - Too Much Percent Increase.

  5. Opsional: Untuk menyesuaikan pemberitahuan ini lebih lanjut, klik Show options > Customize alert policy.

  6. Untuk Configure notifications, pilih saluran notifikasi Anda.

  7. Klik Create.

Pertimbangan performa

Meskipun BigQuery otomatis memangkas data menggunakan partisi dan pengelompokan, pengindeksan metadata dapat lebih mengoptimalkan kueri dengan memangkas data berdasarkan kolom yang tidak digunakan untuk partisi atau pengelompokan. Efektivitas pemangkasan ini meningkat jika ada dependensi pengurutan antara kolom filter dan kolom partisi atau pengelompokan tabel. Dalam kasus ini, Anda mungkin mengamati lebih sedikit byte yang dipindai daripada yang diharapkan, bahkan saat memfilter kolom yang tidak secara eksplisit menjadi bagian dari konfigurasi pengelompokan tabel. Jika tabel hanya dipartisi, tetapi tidak dikelompokkan, efektivitas pemangkasan akan terbatas untuk kueri on-demand, dan Anda mungkin tidak melihat pengurangan byte yang dipindai.

Batasan

Peningkatan performa kueri metadata hanya berlaku untuk pernyataan SELECT, INSERT, dan CREATE TABLE AS SELECT. Pernyataan bahasa pengolahan data (DML) tidak akan mengalami peningkatan dari pengindeksan metadata.

Langkah berikutnya