Tampilan JOBS_TIMELINE

Tampilan INFORMATION_SCHEMA.JOBS_TIMELINE berisi metadata BigQuery yang mendekati real-time berdasarkan lisensi waktu untuk semua tugas yang dikirimkan dalam project saat ini. Tampilan ini berisi tugas yang sedang berjalan dan telah selesai.

Izin yang diperlukan

Untuk membuat kueri tabel virtual INFORMATION_SCHEMA.JOBS_TIMELINE, Anda memerlukan izin Identity and Access Management (IAM) bigquery.jobs.listAll untuk project tersebut. Setiap peran IAM yang telah ditetapkan berikut menyertakan izin yang diperlukan:

  • Pemilik Project
  • BigQuery Admin

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

Skema

Saat Anda membuat kueri tabel virtual INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*, hasil kueri akan berisi satu baris untuk setiap detik eksekusi setiap tugas BigQuery. Setiap periode dimulai pada interval satu detik penuh dan berlangsung tepat satu detik.

Tabel virtual INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* memiliki skema berikut:

Nama kolom Jenis data Nilai
period_start TIMESTAMP Waktu mulai periode ini.
period_slot_ms INTEGER Slot milidetik yang terpakai dalam periode ini.
project_id STRING (Kolom pengelompokan) ID project.
project_number INTEGER Nomor project.
user_email STRING (Kolom pengelompokan) Alamat email atau akun layanan pengguna yang menjalankan tugas.
job_id STRING ID tugas. Misalnya, bquxjob_1234.
job_type STRING Jenis tugas. Dapat berupa QUERY, LOAD, EXTRACT, COPY, atau null. Jenis tugas null menunjukkan tugas internal, seperti evaluasi pernyataan tugas skrip atau pemuatan ulang tampilan terwujud.
statement_type STRING Jenis pernyataan kueri, jika valid. Misalnya, SELECT, INSERT, UPDATE, atau DELETE.
priority STRING Prioritas tugas ini. Nilai yang valid mencakup INTERACTIVE, dan BATCH.
parent_job_id STRING ID tugas induk, jika ada.
job_creation_time TIMESTAMP (Kolom partisi) Waktu pembuatan tugas ini. Partisi didasarkan pada waktu UTC stempel waktu ini.
job_start_time TIMESTAMP Waktu mulai tugas ini.
job_end_time TIMESTAMP Waktu berakhir tugas ini.
state STRING Status menjalankan tugas di akhir periode ini. Status yang valid mencakup PENDING, RUNNING, dan DONE.
reservation_id STRING Nama pemesanan utama yang ditetapkan untuk tugas ini di akhir periode ini, jika berlaku.
edition STRING Edisi yang terkait dengan reservasi yang ditetapkan ke tugas ini. Untuk mengetahui informasi selengkapnya tentang edisi, lihat Pengantar edisi BigQuery.
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.
total_bytes_processed INTEGER Total byte yang diproses oleh tugas.
error_result RECORD Detail error (jika ada) sebagai ErrorProto.
cache_hit BOOLEAN Apakah hasil kueri tugas ini berasal dari cache.
period_shuffle_ram_usage_ratio FLOAT Rasio penggunaan acak pada jangka waktu yang dipilih.
period_estimated_runnable_units INTEGER Unit tugas yang dapat langsung dijadwalkan dalam periode ini. Slot tambahan untuk unit pekerjaan ini akan mempercepat kueri Anda, asalkan tidak ada kueri lain di pemesanan yang memerlukan slot tambahan.
transaction_id STRING ID transaksi tempat tugas ini berjalan, jika ada. (Pratinjau)

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. Jika Anda tidak menentukan penentu regional, metadata akan diambil dari semua region. Tabel berikut menjelaskan cakupan region untuk tabel virtual ini:

Nama tabel virtual Cakupan resource Cakupan region
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE[_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.VIEW
    ; misalnya, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

    Contoh berikut menghitung pemakaian slot untuk setiap detik pada hari terakhir:

    SELECT
      period_start,
      SUM(period_slot_ms) AS total_slot_ms,
    FROM
      `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
    WHERE
      period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    GROUP BY
      period_start
    ORDER BY
      period_start DESC;
    Catatan: Nama tampilan `INFORMATION_SCHEMA` peka huruf besar/kecil. Hasilnya mirip dengan berikut ini:
    +---------------------+---------------+
    |    period_start     | total_slot_ms |
    +---------------------+---------------+
    | 2020-07-29 03:52:14 |     122415176 |
    | 2020-07-29 03:52:15 |     141107048 |
    | 2020-07-29 03:52:16 |     173335142 |
    | 2020-07-28 03:52:17 |     131107048 |
    +---------------------+---------------+
    

    Anda dapat memeriksa penggunaan untuk reservasi tertentu dengan WHERE reservation_id = "…". 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.

    Contoh: Jumlah tugas RUNNING dan PENDING dari waktu ke waktu

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

    `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
    ; misalnya, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

    Contoh berikut menghitung jumlah tugas RUNNING dan PENDING di setiap detik dalam sehari terakhir:

    SELECT
      period_start,
      SUM(IF(state = "PENDING", 1, 0)) as PENDING,
      SUM(IF(state = "RUNNING", 1, 0)) as RUNNING
    FROM
      `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
    WHERE
      period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    GROUP BY
      period_start;

    Hasilnya mirip dengan berikut ini:

    +---------------------+---------+---------+
    |    period_start     | PENDING | RUNNING |
    +---------------------+---------+---------+
    | 2020-07-29 03:52:14 |       7 |      27 |
    | 2020-07-29 03:52:15 |       1 |      21 |
    | 2020-07-29 03:52:16 |       5 |      21 |
    | 2020-07-29 03:52:17 |       4 |      22 |
    +---------------------+---------+---------+
    

    Contoh: Penggunaan resource oleh tugas pada titik waktu tertentu

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

    `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
    ; misalnya, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS.

    Contoh berikut menampilkan job_id dari semua tugas yang berjalan pada titik waktu tertentu bersama dengan penggunaan resource selama periode satu detik tersebut:

    SELECT
      job_id,
      period_slot_ms
    FROM
      `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT
    WHERE
      period_start = '2020-07-29 03:52:14'
      AND statement_type != 'SCRIPT';

    Hasilnya mirip dengan berikut ini:

    +------------------+
    | job_id | slot_ms |
    +------------------+
    | job_1  | 2415176 |
    | job_2  | 4417245 |
    | job_3  |  427416 |
    | job_4  | 1458122 |
    +------------------+
    

    Contoh: Mencocokkan perilaku penggunaan slot dari diagram resource administratif

    Anda dapat menggunakan diagram resource administratif untuk memantau kondisi, penggunaan slot, dan performa tugas BigQuery organisasi dari waktu ke waktu. Contoh berikut membuat kueri tampilan INFORMATION_SCHEMA.JOBS_TIMELINE untuk linimasa penggunaan slot dengan interval satu jam, mirip dengan informasi yang tersedia di diagram resource administratif.

    DECLARE
      start_time timestamp DEFAULT TIMESTAMP(START_TIME);
    DECLARE
      end_time timestamp DEFAULT TIMESTAMP(END_TIME);
    
    WITH
      snapshot_data AS (
      SELECT
        UNIX_MILLIS(period_start) AS period_start,
        IFNULL(SUM(period_slot_ms), 0) AS period_slot_ms,
        DIV(UNIX_MILLIS(period_start), 3600000 * 1) * 3600000 * 1 AS time_ms
      FROM (
        SELECT
          *
        FROM
          `PROJECT_ID.region-US`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT
        WHERE
          ((job_creation_time >= TIMESTAMP_SUB(start_time, INTERVAL 1200 MINUTE)
              AND job_creation_time < TIMESTAMP(end_time))
            AND period_start >= TIMESTAMP(start_time)
            AND period_start < TIMESTAMP(end_time))
          AND (statement_type != "SCRIPT"
            OR statement_type IS NULL)
          AND REGEXP_CONTAINS(reservation_id, "^PROJECT_ID:") )
      GROUP BY
        period_start,
        time_ms ),
      converted_percentiles_data AS (
      SELECT
        time_ms,
        100 - CAST(SAFE_DIVIDE(3600000 * 1 * 1 / 1000, COUNT(*)) AS INT64) AS converted_percentiles,
      FROM
        snapshot_data
      GROUP BY
        time_ms ),
      data_by_time AS (
      SELECT
        time_ms,
      IF
        (converted_percentiles <= 0, 0, APPROX_QUANTILES(period_slot_ms, 100)[SAFE_OFFSET(converted_percentiles)] / 1000) AS p99_slots,
        SUM(period_slot_ms) / (3600000 * 1) AS avg_slots
      FROM
        snapshot_data
      JOIN
        converted_percentiles_data AS c
      USING
        (time_ms)
      GROUP BY
        time_ms,
        converted_percentiles )
    SELECT
      time_ms,
      TIMESTAMP_MILLIS(time_ms) AS time_stamp,
      IFNULL(avg_slots, 0) AS avg_slots,
      IFNULL(p99_slots, 0) AS p99_slots,
    FROM (
      SELECT
        time_ms * 3600000 * 1 AS time_ms
      FROM
        UNNEST(GENERATE_ARRAY(DIV(UNIX_MILLIS(start_time), 3600000 * 1), DIV(UNIX_MILLIS(end_time), 3600000 * 1) - 1, 1)) AS time_ms )
    LEFT JOIN
      data_by_time
    USING
      (time_ms)
    ORDER BY
      time_ms DESC;