Tampilan JOBS

Tampilan INFORMATION_SCHEMA.JOBS berisi metadata yang mendekati real-time tentang semua tugas BigQuery dalam project saat ini.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk membuat kueri tampilan INFORMATION_SCHEMA.JOBS, minta administrator untuk memberi Anda peran IAM BigQuery Resource Viewer (roles/bigquery.resourceViewer) di project Anda. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran yang telah ditentukan ini berisi izin bigquery.jobs.listAll, yang diperlukan untuk membuat kueri tampilan INFORMATION_SCHEMA.JOBS.

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Untuk mengetahui informasi selengkapnya tentang izin BigQuery, lihat Kontrol akses dengan IAM.

Skema

Data pokok dipartisi oleh kolom creation_time serta dikelompokkan menurut project_id dan user_email. Kolom query_info berisi informasi tambahan tentang tugas kueri Anda.

Tampilan INFORMATION_SCHEMA.JOBS memiliki skema berikut:

Nama kolom Data type Nilai
bi_engine_statistics RECORD Jika project dikonfigurasi untuk menggunakan Antarmuka BI Engine SQL, maka kolom ini berisi BiEngineStatistics. Atau NULL.
cache_hit BOOLEAN Apakah hasil kueri tugas ini berasal dari cache. Jika Anda memiliki tugas pernyataan multi-kueri, cache_hit untuk kueri induk Anda adalah NULL.
creation_time TIMESTAMP (Kolom partisi) Waktu pembuatan tugas ini. Partisi didasarkan pada waktu UTC stempel waktu ini.
destination_table RECORD Tabel tujuan untuk hasil, jika ada.
end_time TIMESTAMP Waktu berakhir tugas ini, dalam milidetik sejak epoch. Kolom ini menunjukkan waktu saat tugas memasuki status DONE.
error_result RECORD Detail error sebagai objek ErrorProto.
job_creation_reason.code STRING Menentukan alasan tingkat tinggi mengapa tugas dibuat.
Nilai yang mungkin adalah:
  • REQUESTED: pembuatan tugas diminta.
  • LONG_RUNNING: permintaan kueri berjalan melebihi waktu tunggu yang ditentukan sistem yang ditentukan oleh kolom timeoutMs di QueryRequest. Akibatnya, operasi ini dianggap sebagai operasi yang berjalan lama yang tugasnya dibuat.
  • LARGE_RESULTS: hasil dari kueri tidak dapat muat dalam respons inline.
  • OTHER: sistem telah menentukan bahwa kueri perlu dieksekusi sebagai tugas.
job_id STRING ID tugas jika tugas dibuat. Jika tidak, ID kueri dari kueri yang menggunakan mode kueri singkat. Misalnya, bquxjob_1234.
job_stages RECORD Tahap kueri tugas.

Catatan: Nilai kolom ini kosong untuk kueri yang membaca dari tabel dengan kebijakan akses tingkat baris. Untuk mengetahui informasi selengkapnya, lihat praktik terbaik untuk keamanan tingkat baris di BigQuery.

job_type STRING Jenis tugas. Dapat berupa QUERY, LOAD, EXTRACT, COPY, atau NULL. Nilai NULL menunjukkan tugas internal, seperti evaluasi pernyataan tugas skrip atau pemuatan ulang tampilan terwujud.
labels RECORD Array label yang diterapkan ke tugas sebagai pasangan nilai kunci.
parent_job_id STRING ID tugas induk, jika ada.
priority STRING Prioritas tugas ini. Nilai yang valid mencakup INTERACTIVE, dan BATCH.
project_id STRING (Kolom pengelompokkan) ID project.
project_number INTEGER Nomor project.
query STRING Teks kueri SQL. Hanya tampilan JOBS_BY_PROJECT yang memiliki kolom kueri.
referenced_tables RECORD Array tabel yang direferensikan oleh tugas. Hanya diisi untuk tugas kueri yang bukan hit cache.
reservation_id STRING Nama reservasi utama yang ditetapkan untuk tugas ini, dalam format RESERVATION_ADMIN_PROJECT:RESERVATION_LOCATION.RESERVATION_NAME.
Dalam output ini:
  • RESERVATION_ADMIN_PROJECT: nama project Google Cloud yang mengelola reservasi
  • RESERVATION_LOCATION: lokasi pemesanan
  • RESERVATION_NAME: nama pemesanan
edition STRING Edisi yang terkait dengan reservasi yang ditetapkan ke tugas ini. Untuk mengetahui informasi selengkapnya tentang edisi, lihat Pengantar edisi BigQuery.
session_info RECORD Detail tentang sesi tempat tugas ini dijalankan, jika ada.
start_time TIMESTAMP Waktu mulai tugas ini, dalam milidetik sejak epoch. Kolom ini menunjukkan waktu saat tugas bertransisi dari status PENDING ke RUNNING atau DONE.
state STRING Status tugas yang berjalan. Status yang valid mencakup PENDING, RUNNING, dan DONE.
statement_type STRING Jenis pernyataan kueri. Misalnya, DELETE, INSERT, SCRIPT, SELECT, atau UPDATE. Lihat QueryStatementType untuk mengetahui daftar nilai yang valid.
timeline RECORD Linimasa kueri tugas. Berisi snapshot eksekusi kueri.
total_bytes_billed INTEGER Jika project dikonfigurasi untuk menggunakan harga sesuai permintaan, maka kolom ini berisi total byte yang ditagih untuk tugas tersebut. Jika project dikonfigurasi untuk menggunakan harga tetap, Anda tidak akan dikenai biaya untuk byte dan kolom ini hanya bersifat informasi.

Catatan: Nilai kolom ini kosong untuk kueri yang membaca dari tabel dengan kebijakan akses tingkat baris. Untuk mengetahui informasi selengkapnya, lihat praktik terbaik untuk keamanan tingkat baris di BigQuery.

total_bytes_processed INTEGER

Total byte yang diproses oleh tugas.

Catatan: Nilai kolom ini kosong untuk kueri yang membaca dari tabel dengan kebijakan akses tingkat baris. Untuk mengetahui informasi selengkapnya, lihat praktik terbaik untuk keamanan tingkat baris di BigQuery.

total_modified_partitions INTEGER Jumlah total partisi yang diubah oleh tugas. Kolom ini diisi untuk tugas LOAD dan QUERY.
total_slot_ms INTEGER Masukkan milidetik untuk tugas selama keseluruhan durasinya dalam status RUNNING, termasuk percobaan ulang.
transaction_id STRING ID transaksi tempat tugas ini berjalan, jika ada. (Pratinjau)
user_email STRING (Kolom pengelompokan) Alamat email atau akun layanan pengguna yang menjalankan tugas.
query_info.resource_warning STRING Pesan peringatan yang muncul jika penggunaan resource selama pemrosesan kueri berada di atas ambang batas internal sistem.
Tugas kueri yang berhasil dapat mengisi kolom resource_warning. Dengan resource_warning, Anda akan mendapatkan titik data tambahan untuk mengoptimalkan kueri dan menyiapkan pemantauan tren performa kumpulan kueri yang setara menggunakan query_hashes.
query_info.query_hashes.normalized_literals STRING Berisi hash kueri. normalized_literals adalah hash STRING heksadesimal yang mengabaikan komentar, parameter value, UDF, dan literal. Nilai hash akan berbeda saat tampilan yang mendasarinya berubah, atau jika kueri secara implisit mereferensikan kolom, seperti SELECT *, dan skema tabel berubah.
Kolom ini muncul untuk kueri GoogleSQL yang berhasil dan tidak menemukan cache.
query_info.performance_insights RECORD Insight performa untuk tugas.
query_info.optimization_details STRUCT Pengoptimalan berbasis histori untuk tugas.
transferred_bytes INTEGER Total byte yang ditransfer untuk kueri lintas-cloud, seperti tugas transfer lintas-cloud BigQuery Omni.
materialized_view_statistics RECORD Statistik tampilan terwujud yang dipertimbangkan dalam tugas kueri. (Pratinjau)

Saat Anda membuat kueri INFORMATION_SCHEMA.JOBS untuk menemukan ringkasan biaya tugas kueri, kecualikan jenis pernyataan SCRIPT. Jika tidak, beberapa nilai mungkin akan dihitung dua kali. Baris SCRIPT menyertakan nilai ringkasan untuk semua tugas turunan yang dijalankan sebagai bagian dari tugas ini.

Tugas kueri multi-pernyataan

Tugas kueri multi-pernyataan adalah tugas kueri yang menggunakan bahasa prosedural. Tugas kueri multi-pernyataan sering kali menentukan variabel dengan DECLARE atau memiliki pernyataan alur kontrol seperti IF atau WHILE. Saat membuat kueri INFORMATION_SCHEMA.JOBS, Anda mungkin perlu mengenali perbedaan antara tugas kueri multi-pernyataan dan tugas lainnya. Tugas kueri multi-pernyataan memiliki karakteristik berikut:

  • statement_type = SCRIPT
  • reservation_id = NULL
  • Tugas turunan. Setiap tugas turunan dari tugas kueri multi-pernyataan memiliki parent_job_id yang mengarah ke tugas kueri multi-pernyataan itu sendiri. Ini termasuk nilai ringkasan untuk semua tugas turunan yang dijalankan sebagai bagian dari tugas ini. Oleh karena itu, jika Anda membuat kueri INFORMATION_SCHEMA.JOBS untuk menemukan biaya ringkasan tugas kueri, Anda harus mengecualikan jenis pernyataan SCRIPT. Jika tidak, beberapa nilai seperti total_slot_ms mungkin akan dihitung dua kali.

Retensi data

Tabel virtual ini berisi tugas yang sedang berjalan dan histori tugas selama 180 hari terakhir.

Cakupan dan sintaksis

Kueri terhadap tabel virtual ini harus menyertakan penentu region. Tabel berikut menjelaskan cakupan region untuk tabel virtual ini:

Nama tabel virtual Cakupan resource Cakupan region
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS[_BY_PROJECT] Level project REGION
Ganti kode berikut:

  • Opsional: PROJECT_ID: ID project Google Cloud Anda. Jika tidak ditentukan, project default akan digunakan.

  • REGION: nama region set data apa pun. Misalnya, `region-us`.

  • Contoh

    Untuk menjalankan kueri terhadap project selain project default Anda, tambahkan project ID dalam format berikut:

    `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    Ganti kode berikut:

    • PROJECT_ID: ID project.
    • REGION_NAME: region untuk project Anda.

    Misalnya, `myproject`.`region-us-central1`.INFORMATION_SCHEMA.JOBS.

    Membandingkan penggunaan tugas on demand dengan data penagihan

    Untuk project yang menggunakan harga on-demand, Anda dapat menggunakan tampilan INFORMATION_SCHEMA.JOBS untuk meninjau biaya komputasi selama jangka waktu tertentu.

    Untuk project yang menggunakan harga berbasis kapasitas (slot), Anda dapat menggunakan INFORMATION_SCHEMA.RESERVATIONS_TIMELINE untuk meninjau tagihan komputasi selama jangka waktu tertentu.

    Kueri berikut menghasilkan estimasi agregat harian TiB yang ditagih dan tagihan yang dihasilkan. Bagian batasan menjelaskan kapan estimasi ini mungkin tidak cocok dengan tagihan Anda.

    Khusus untuk contoh ini, variabel tambahan berikut harus ditetapkan. Anda dapat mengeditnya di sini agar mudah digunakan.

    • START_DATE: tanggal paling awal untuk digabungkan (inklusif).
    • END_DATE: tanggal terbaru untuk digabungkan (inklusif).
    • PRICE_PER_TIB: harga sesuai permintaan per TiB yang digunakan untuk estimasi tagihan.
    CREATE TEMP FUNCTION isBillable(error_result ANY TYPE)
    AS (
      -- You aren't charged for queries that return an error.
      error_result IS NULL
      -- However, canceling a running query might incur charges.
      OR error_result.reason = 'stopped'
    );
    
    -- BigQuery hides the number of bytes billed on all queries against tables with
    -- row-level security.
    CREATE TEMP FUNCTION isMaybeUsingRowLevelSecurity(
      job_type STRING, tib_billed FLOAT64, error_result ANY TYPE)
    AS (
      job_type = 'QUERY'
      AND tib_billed IS NULL
      AND isBillable(error_result)
    );
    
    WITH
      query_params AS (
        SELECT
          date 'START_DATE' AS start_date,  -- inclusive
          date 'END_DATE' AS end_date,  -- inclusive
      ),
      usage_with_multiplier AS (
        SELECT
          job_type,
          error_result,
          creation_time,
          -- Jobs are billed by end_time in PST8PDT timezone, regardless of where
          -- the job ran.
          EXTRACT(date FROM end_time AT TIME ZONE 'PST8PDT') billing_date,
          total_bytes_billed / 1024 / 1024 / 1024 / 1024 total_tib_billed,
          CASE statement_type
            WHEN 'SCRIPT' THEN 0
            WHEN 'CREATE_MODEL' THEN 50 * PRICE_PER_TIB
            ELSE PRICE_PER_TIB
            END AS multiplier,
        FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
      )
    SELECT
      billing_date,
      sum(total_tib_billed * multiplier) estimated_charge,
      sum(total_tib_billed) estimated_usage_in_tib,
      countif(isMaybeUsingRowLevelSecurity(job_type, total_tib_billed, error_result))
        AS jobs_using_row_level_security,
    FROM usage_with_multiplier, query_params
    WHERE
      1 = 1
      -- Filter by creation_time for partition pruning.
      AND date(creation_time) BETWEEN date_sub(start_date, INTERVAL 2 day) AND end_date
      AND billing_date BETWEEN start_date AND end_date
      AND isBillable(error_result)
    GROUP BY billing_date
    ORDER BY billing_date;

    Batasan

    • BigQuery menyembunyikan beberapa statistik untuk kueri pada tabel dengan keamanan tingkat baris. Kueri yang diberikan menghitung jumlah tugas yang terpengaruh sebagai jobs_using_row_level_security, tetapi tidak memiliki akses ke penggunaan yang dapat ditagih.

    • Harga BigQuery ML untuk kueri sesuai permintaan bergantung pada jenis model yang dibuat. INFORMATION_SCHEMA.JOBS tidak melacak jenis model yang dibuat, sehingga kueri yang diberikan mengasumsikan semua pernyataan CREATE_MODEL membuat jenis model yang ditagih lebih tinggi.

    • Prosedur Apache Spark menggunakan model harga yang serupa, tetapi tagihan dilaporkan sebagai SKU bayar sesuai penggunaan edisi BigQuery Enterprise. INFORMATION_SCHEMA.JOBS melacak penggunaan ini sebagai total_bytes_billed, tetapi tidak dapat menentukan SKU mana yang diwakili oleh penggunaan tersebut.

    Menghitung penggunaan slot rata-rata

    Contoh berikut menghitung penggunaan slot rata-rata untuk semua kueri selama 7 hari terakhir untuk project tertentu. Perlu diperhatikan bahwa penghitungan ini paling akurat untuk project yang memiliki penggunaan slot yang konsisten sepanjang minggu. Jika project Anda tidak memiliki penggunaan slot yang konsisten, jumlah ini mungkin lebih rendah dari yang diperkirakan.

    Untuk menjalankan kueri:

    SELECT
      SUM(total_slot_ms) / (1000 * 60 * 60 * 24 * 7) AS avg_slots
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
      -- Filter by the partition column first to limit the amount of data scanned.
      -- Eight days allows for jobs created before the 7 day end_time filter.
      creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 8 DAY) AND CURRENT_TIMESTAMP()
      AND job_type = 'QUERY'
      AND statement_type != 'SCRIPT'
      AND end_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP();

    Hasilnya mirip dengan berikut ini:

    +------------+
    | avg_slots  |
    +------------+
    | 3879.1534  |
    +------------+
    

    Anda dapat memeriksa penggunaan untuk reservasi tertentu dengan WHERE reservation_id = "…". Hal ini dapat membantu untuk menentukan persentase penggunaan reservasi selama jangka waktu tertentu. Untuk tugas skrip, tugas induk juga melaporkan total penggunaan slot dari tugas turunannya. Untuk menghindari penghitungan ganda, gunakan WHERE statement_type != "SCRIPT" untuk mengecualikan tugas induk.

    Jika Anda ingin memeriksa penggunaan slot rata-rata untuk setiap tugas, gunakan total_slot_ms / TIMESTAMP_DIFF(end_time, start_time, MILLISECOND).

    Menghitung kueri aktif terbaru berdasarkan prioritas kueri

    Contoh berikut menampilkan jumlah kueri, yang dikelompokkan berdasarkan prioritas (interaktif atau batch) yang dimulai dalam 7 jam terakhir:

    SELECT
      priority,
      COUNT(*) active_jobs
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
      creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 hour)
      AND job_type = 'QUERY'
    GROUP BY priority;

    Hasilnya mirip dengan berikut ini:

    +-------------+-------------+
    | priority    | active_jobs |
    +-------------+-------------+
    | INTERACTIVE |           2 |
    | BATCH       |           3 |
    +-------------+-------------+
    

    Kolom priority menunjukkan apakah kueri adalah INTERACTIVE atau BATCH.

    Melihat histori tugas pemuatan

    Contoh berikut mencantumkan semua pengguna atau akun layanan yang mengirimkan tugas pemuatan batch untuk project tertentu. Karena tidak ada batas waktu yang ditentukan, kueri ini akan memindai semua histori yang tersedia.

    SELECT
      user_email AS user,
      COUNT(*) num_jobs
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
      job_type = 'LOAD'
    GROUP BY
      user_email;

    Hasilnya mirip dengan berikut ini:

    +--------------+
    | user         |
    +--------------+
    | abc@xyz.com  |
    +--------------+
    | def@xyz.com  |
    +--------------+
    

    Mendapatkan jumlah tugas pemuatan untuk menentukan kuota tugas harian yang digunakan

    Contoh berikut menampilkan jumlah tugas menurut hari, set data, dan tabel, sehingga Anda dapat menentukan berapa banyak kuota tugas harian yang digunakan.

    SELECT
        DATE(creation_time) as day,
        destination_table.project_id as project_id,
        destination_table.dataset_id as dataset_id,
        destination_table.table_id as table_id,
        COUNT(job_id) AS load_job_count
     FROM
       `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
     WHERE
        creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 8 DAY) AND CURRENT_TIMESTAMP()
        AND job_type = "LOAD"
    GROUP BY
        day,
        project_id,
        dataset_id,
        table_id
    ORDER BY
        day DESC;

    Mendapatkan 10 tugas yang gagal terakhir

    Contoh berikut menunjukkan 10 tugas terakhir yang gagal:

    SELECT
       job_id,
      creation_time,
      user_email,
       error_result
     FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY
    WHERE
      error_result.reason != "Null"
    ORDER BY
      creation_time DESC
    LIMIT 10;

    Hasilnya akan terlihat seperti berikut:

    +---------------+--------------------------+------------------+-------------------------------------+
    | job_id        | creation_time            | user_email       | error_result                        |
    +---------------+--------------------------+------------------+-------------------------------------+
    | examplejob_1  | 2020-10-10 00:00:00 UTC  | bob@example.com  | Column 'col1' has mismatched type...|
    | examplejob_2  | 2020-10-11 00:00:00 UTC  | bob@example.com  | Column 'col1' has mismatched type...|
    +---------------+--------------------------+------------------+-------------------------------------+
    

    Membuat kueri daftar tugas yang berjalan lama

    Contoh berikut menampilkan daftar tugas yang berjalan lama yang berada dalam status RUNNING atau PENDING selama lebih dari 30 menit:

    SELECT
      job_id,
      job_type,
      state,
      creation_time,
      start_time,
      user_email
     FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
     WHERE
      state!="DONE" AND
      creation_time <= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 MINUTE)
    ORDER BY
      creation_time ASC;

    Hasilnya mirip dengan berikut ini:

    +--------+----------+---------+--------------------------------+--------------------------------+------------------+
    | job_id | job_type | state   | creation_time                  | start_time                     | user_email       |
    +--------+----------+---------+--------------------------------+--------------------------------+------------------+
    | job_1  | QUERY    | RUNNING | 2023-05-03 05:07:22.818000 UTC | 2023-05-03 05:07:22.905000 UTC | abc@example.com  |
    | job_2  | QUERY    | PENDING | 2023-05-01 02:05:47.925000 UTC | 2023-05-01 02:05:47.998000 UTC | xyz@example.com  |
    +--------+----------+---------+--------------------------------+--------------------------------+------------------+
    

    Kueri yang menggunakan mode pengoptimalan kueri singkat

    Contoh berikut menunjukkan daftar kueri yang dieksekusi dalam mode kueri singkat yang dioptimalkan, yang tidak dibuat oleh BigQuery.

    SELECT
     job_id,
    FROM
     `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
     TIMESTAMP_TRUNC(creation_time, DAY) = '2024-06-12'
     AND job_creation_reason.code IS NULL
    LIMIT 10;

    Hasilnya akan terlihat seperti berikut:

    +------------------------------------------+
    | job_id                                   |
    +------------------------------------------+
    | 2Lm09bHxDEsoVK8zwzWJomLHU_Ud%1910479b151 |
    | j9_GVQf28jW2M1_RfTYGRPX1vq--!191047a135f | 
    +------------------------------------------+
    

    Contoh berikut menunjukkan informasi tentang kueri yang dijalankan dalam mode kueri singkat yang dioptimalkan, yang tidak dibuat oleh BigQuery.

    SELECT
     job_id,
     statement_type,
     priority,
     cache_hit,
     job_creation_reason.code AS job_creation_reason_code,
     total_bytes_billed,
     total_bytes_processed,
     total_slot_ms,
     state,
     error_result.message AS error_result_message,
    FROM
     `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
     TIMESTAMP_TRUNC(creation_time, DAY) = '2024-06-12'
     AND job_id = '2Lm09bHxDEsoVK8zwzWJomLHU_Ud%1910479b151' -- queryId

    Catatan: Kolom job_id berisi queryId kueri saat tugas tidak dibuat untuk kueri ini.

    Hasilnya akan terlihat seperti berikut:

    +------------------------------------------+----------------+-------------+-----------+--------------------------+--------------------+-----------------------+---------------+-------+----------------------+
    | job_id                                   | statement_type | priority    | cache_hit | job_creation_reason_code | total_bytes_billed | total_bytes_processed | total_slot_ms | state | error_result_message |
    +------------------------------------------+----------------+-------------+-----------+--------------------------+--------------------+-----------------------+---------------+-------+----------------------+
    | 2Lm09bHxDEsoVK8zwzWJomLHU_Ud%1910479b151 | SELECT         | INTERACTIVE | false     | null                     | 161480704          | 161164718             | 3106          | DONE  | null                 |
    +------------------------------------------+----------------+-------------+-----------+--------------------------+--------------------+-----------------------+---------------+-------+----------------------+
    

    Contoh berikut menunjukkan daftar kueri yang dieksekusi dalam mode kueri singkat yang dioptimalkan, yang membuat BigQuery membuat tugas.

    SELECT
     job_id,
     job_creation_reason.code AS job_creation_reason_code
    FROM
     `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
     TIMESTAMP_TRUNC(creation_time, DAY) = '2024-06-12'
     AND job_creation_reason.code IS NOT NULL
     AND job_creation_reason.code != 'REQUESTED'
    LIMIT
     10

    Hasilnya akan terlihat seperti berikut:

    +----------------------------------+--------------------------+
    | job_id                           | job_creation_reason_code |
    +----------------------------------+--------------------------+
    | job_LxOEwrJEffcOfjK7GBwWjO3RroOI | LARGE_RESULTS            |
    +----------------------------------+--------------------------+
    

    Byte yang diproses per identitas pengguna

    Contoh berikut menunjukkan total byte yang ditagih untuk tugas kueri per pengguna:

    SELECT
      user_email,
      SUM(total_bytes_billed) AS bytes_billed
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
      job_type = 'QUERY'
      AND statement_type != 'SCRIPT'
    GROUP BY
      user_email;

    Catatan: Lihat peringatan untuk kolom total_bytes_billed dalam dokumentasi skema untuk tampilan JOBS.

    Hasilnya akan terlihat seperti berikut:

    +---------------------+--------------+
    | user_email          | bytes_billed |
    +---------------------+--------------+
    | bob@example.com     | 2847932416   |
    | alice@example.com   | 1184890880   |
    | charles@example.com | 10485760     |
    +---------------------+--------------+
    

    Perincian byte yang diproses per jam

    Contoh berikut menampilkan total byte yang ditagih untuk tugas kueri, dalam interval per jam:

    SELECT
      TIMESTAMP_TRUNC(end_time, HOUR) AS time_window,
      SUM(total_bytes_billed) AS bytes_billed
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
      job_type = 'QUERY'
      AND statement_type != 'SCRIPT'
    GROUP BY
      time_window
    ORDER BY
      time_window DESC;

    Hasilnya mirip dengan berikut ini:

    +-------------------------+--------------+
    | time_window             | bytes_billed |
    +-------------------------+--------------+
    | 2022-05-17 20:00:00 UTC | 1967128576   |
    | 2022-05-10 21:00:00 UTC | 0            |
    | 2022-04-15 20:00:00 UTC | 10485760     |
    | 2022-04-15 17:00:00 UTC | 41943040     |
    +-------------------------+--------------+
    

    Tugas kueri per tabel

    Contoh berikut menunjukkan berapa kali setiap tabel yang dikueri dalam my_project direferensikan oleh tugas kueri:

    SELECT
      t.project_id,
      t.dataset_id,
      t.table_id,
      COUNT(*) AS num_references
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS, UNNEST(referenced_tables) AS t
    GROUP BY
      t.project_id,
      t.dataset_id,
      t.table_id
    ORDER BY
      num_references DESC;

    Hasilnya mirip dengan berikut ini:

    +------------+------------+----------+----------------+
    | project_id | dataset_id | table_id | num_references |
    +------------+------------+----------+----------------+
    | my_project | dataset1   | orders   | 58             |
    | my_project | dataset1   | products | 40             |
    | my_project | dataset2   | sales    | 30             |
    | other_proj | dataset1   | accounts | 12             |
    +------------+------------+----------+----------------+
    

    Jumlah partisi yang diubah oleh tugas kueri dan pemuatan per tabel

    Contoh berikut menunjukkan jumlah partisi yang diubah oleh kueri dengan pernyataan DML dan tugas pemuatan, per tabel. Perhatikan bahwa kueri ini tidak menampilkan total_modified_partitions untuk tugas penyalinan.

    SELECT
      destination_table.table_id,
      SUM(total_modified_partitions) AS total_modified_partitions
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
      DATE(creation_time, "America/Los_Angeles") = CURRENT_DATE()
    GROUP BY
      table_id
    ORDER BY
      total_modified_partitions DESC

    Kueri paling mahal berdasarkan project

    Contoh berikut mencantumkan kueri paling mahal di my_project menurut waktu penggunaan slot:

    SELECT
     job_id,
     query,
     user_email,
     total_slot_ms
    FROM `my_project`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE EXTRACT(DATE FROM  creation_time) = current_date()
    ORDER BY total_slot_ms DESC
    LIMIT 4

    Anda juga dapat mencantumkan kueri paling mahal berdasarkan data yang diproses dengan contoh berikut:

    SELECT
     job_id,
     query,
     user_email,
     total_bytes_processed
    FROM `my_project`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE EXTRACT(DATE FROM  creation_time) = current_date()
    ORDER BY total_bytes_processed DESC
    LIMIT 4

    Hasil untuk kedua contoh tersebut mirip dengan yang berikut:

    +--------------+---------------------------------+-----------------------+---------------+
    | job_id       | query                           | user_email            | total_slot_ms |
    +--------------+---------------------------------+--------------------------+------------+
    | examplejob_1 | SELECT ... FROM dataset.table1  | bob@example.com       | 80,000        |
    | examplejob_2 | SELECT ... FROM dataset.table2  | alice@example.com     | 78,000        |
    | examplejob_3 | SELECT ... FROM dataset.table3  | charles@example.com   | 75,000        |
    | examplejob_4 | SELECT ... FROM dataset.table4  | tina@example.com      | 72,000        |
    +--------------+---------------------------------+-----------------------+---------------+
    

    Mendapatkan detail tentang peringatan resource

    Jika menerima pesan error Resource terlampaui, Anda dapat menanyakan tentang kueri dalam jangka waktu tertentu:

    SELECT
      query,
      query_info.resource_warning
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
     creation_time BETWEEN TIMESTAMP("2022-12-01")
     AND TIMESTAMP("2022-12-08")
     AND query_info.resource_warning IS NOT NULL
    LIMIT 50;

    Memantau peringatan resource yang dikelompokkan berdasarkan tanggal

    Jika mendapatkan pesan error Resource exceeded, Anda dapat memantau jumlah total peringatan resource yang dikelompokkan berdasarkan tanggal untuk mengetahui apakah ada perubahan pada workload:

    WITH resource_warnings AS (
      SELECT
        EXTRACT(DATE FROM creation_time) AS creation_date
      FROM
        `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
      WHERE
        creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 14 DAY)
        AND query_info.resource_warning IS NOT NULL
    )
    SELECT
      creation_date,
      COUNT(1) AS warning_counts
    FROM
      resource_warnings
    GROUP BY creation_date
    ORDER BY creation_date DESC;

    Memperkirakan penggunaan slot dan biaya untuk kueri

    Contoh berikut menghitung slot rata-rata dan slot maksimum untuk setiap tugas menggunakan estimated_runnable_units.

    Harga reservation_id adalah NULL jika Anda tidak memiliki reservasi.

    SELECT
      project_id,
      job_id,
      reservation_id,
      EXTRACT(DATE FROM creation_time) AS creation_date,
      TIMESTAMP_DIFF(end_time, start_time, SECOND) AS job_duration_seconds,
      job_type,
      user_email,
      total_bytes_billed,
    
      -- Average slot utilization per job is calculated by dividing total_slot_ms by the millisecond duration of the job
    
      SAFE_DIVIDE(job.total_slot_ms,(TIMESTAMP_DIFF(job.end_time, job.start_time, MILLISECOND))) AS job_avg_slots,
      query,
    
      -- Determine the max number of slots used at ANY stage in the query.
      -- The average slots might be 55. But a single stage might spike to 2000 slots.
      -- This is important to know when estimating number of slots to purchase.
    
      MAX(SAFE_DIVIDE(unnest_job_stages.slot_ms,unnest_job_stages.end_ms - unnest_job_stages.start_ms)) AS jobstage_max_slots,
    
      -- Check if there's a job that requests more units of works (slots). If so you need more slots.
      -- estimated_runnable_units = Units of work that can be scheduled immediately.
      -- Providing additional slots for these units of work accelerates the query,
      -- if no other query in the reservation needs additional slots.
    
      MAX(unnest_timeline.estimated_runnable_units) AS estimated_runnable_units
    FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS AS job
      CROSS JOIN UNNEST(job_stages) as unnest_job_stages
      CROSS JOIN UNNEST(timeline) AS unnest_timeline
    WHERE project_id = 'my_project'
      AND statement_type != 'SCRIPT'
      AND DATE(creation_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND CURRENT_DATE()
    GROUP BY 1,2,3,4,5,6,7,8,9,10
    ORDER BY job_id;

    Melihat insight performa untuk kueri

    Contoh berikut menampilkan semua tugas kueri yang memiliki insight performa dari project Anda dalam 30 hari terakhir, beserta URL yang tertaut ke grafik eksekusi kueri di Konsol Google Cloud.

    SELECT
      `bigquery-public-data`.persistent_udfs.job_url(
        project_id || ':us.' || job_id) AS job_url,
      query_info.performance_insights
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
      DATE(creation_time) >= CURRENT_DATE - 30 -- scan 30 days of query history
      AND job_type = 'QUERY'
      AND state = 'DONE'
      AND error_result IS NULL
      AND statement_type != 'SCRIPT'
      AND EXISTS ( -- Only include queries which had performance insights
        SELECT 1
        FROM UNNEST(
          query_info.performance_insights.stage_performance_standalone_insights
        )
        WHERE slot_contention OR insufficient_shuffle_quota
        UNION ALL
        SELECT 1
        FROM UNNEST(
          query_info.performance_insights.stage_performance_change_insights
        )
        WHERE input_data_change.records_read_diff_percentage IS NOT NULL
      );

    Melihat tugas pembaruan metadata

    Contoh berikut mencantumkan tugas pembaruan metadata:

    SELECT
     *
    FROM
     `region-aws-us-east-1.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
    WHERE
     job_id LIKE '%metadata_cache_refresh%'
     AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR)
    ORDER BY start_time desc
    LIMIT 10;

    Menganalisis performa dari waktu ke waktu untuk kueri yang identik

    Contoh berikut menampilkan 10 tugas paling lambat selama 7 hari terakhir yang menjalankan kueri yang sama:

    DECLARE querytext STRING DEFAULT(
      SELECT query
      FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
      WHERE job_id = 'JOB_ID'
      LIMIT 1
    );
    
    SELECT
      start_time,
      end_time,
      project_id,
      job_id,
      TIMESTAMP_DIFF(end_time, start_time, SECOND) AS run_secs,
      total_bytes_processed / POW(1024, 3) AS total_gigabytes_processed,
      query
    FROM
      `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
      query = querytext
      AND total_bytes_processed > 0
      AND creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
    ORDER BY 5 DESC
    LIMIT 10;

    Ganti JOB_ID dengan job_id apa pun yang menjalankan kueri yang Anda analisis.

    Mencocokkan perilaku penggunaan slot dari diagram resource administratif

    Untuk mempelajari perilaku penggunaan slot yang mirip dengan informasi dalam diagram resource administratif, buat kueri tampilan INFORMATION_SCHEMA.JOBS_TIMELINE.