dashboards/system_tables/sql/reservation_utilization_week.sql (64 lines of code) (raw):

/* * Copyright 2020 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * It is assumed that the following query will be run in the administration * project where the reservations were created. If this is not the case, * prepend the project id to the table name as follows: * `{project_id}`.`region-{region_name}`.INFORMATION_SCHEMA.{table} */ /* * Reservation Utilization Report: Returns the average usage, average * capacity, current capacity, and average utilization of a reservation * for the last 7 days */ -- This table retrieves the slot capacity history of every reservation -- including the start and end time of that capacity WITH reservation_slot_capacity AS ( SELECT -- Concatenation is needed as RESERVATION_CHANGES_BY_PROJECT only -- includes reservation name but in order to join with -- JOBS_BY_ORGANIZATION, reservation id is required CONCAT("{project_id}:{location}.", reservation_name) AS reservation_id, change_timestamp AS start_time, IFNULL( LEAD(change_timestamp) OVER ( PARTITION BY reservation_name ORDER BY change_timestamp ASC), CURRENT_TIMESTAMP()) AS end_time, action, slot_capacity FROM `region-{region_name}`.INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT ), -- This table retrieves only the current slot capacity of a reservation latest_slot_capacity AS ( SELECT rcp.reservation_name, rcp.slot_capacity, CONCAT("{project_id}:{location}.", rcp.reservation_name) AS reservation_id, FROM `region-{region_name}`.INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT AS rcp WHERE -- This subquery returns the latest slot capacity for each reservation -- by extracting the reservation with the maximum timestamp (rcp.reservation_name, rcp.change_timestamp) IN ( SELECT AS STRUCT reservation_name, MAX(change_timestamp) FROM `region-{region_name}`.INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT GROUP BY reservation_name) ) -- Compute the average slot utilization and average reservation utilization SELECT jbo.reservation_id, -- Slot usage is calculated by aggregating total_slot_ms for all jobs -- in the last week and dividing by the number of milliseconds in a week SAFE_DIVIDE(SUM(jbo.total_slot_ms), (1000 * 60 * 60 * 24 * 7)) AS average_weekly_slot_usage, AVG(rsc.slot_capacity) AS average_reservation_capacity, SAFE_DIVIDE( SAFE_DIVIDE( SUM(jbo.total_slot_ms), 1000 * 60 * 60 * 24 * 7 ), AVG(rsc.slot_capacity) ) AS reservation_utilization, lsc.slot_capacity AS latest_capacity FROM `region-{region_name}`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION jbo -- Join the slot capacity history LEFT JOIN reservation_slot_capacity rsc ON jbo.reservation_id = rsc.reservation_id AND jbo.creation_time >= rsc.start_time AND jbo.creation_time < rsc.end_time -- Join the latest slot capacity LEFT JOIN latest_slot_capacity lsc ON jbo.reservation_id = lsc.reservation_id WHERE -- Includes jobs created 8 days ago but completed 7 days ago jbo.creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 8 DAY) AND CURRENT_TIMESTAMP() AND jbo.end_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP() GROUP BY reservation_id, lsc.slot_capacity ORDER BY reservation_id DESC