INFORMATION_SCHEMA를 사용하여 예약 메타데이터 가져오기

INFORMATION_SCHEMA는 데이터 세트, 루틴, 테이블, 뷰, 작업, 예약, 데이터 스트리밍에 대한 메타데이터에 액세스할 수 있는 일련의 뷰입니다.

INFORMATION_SCHEMA 예약 뷰를 쿼리하여 BigQuery 예약에 대한 실시간 메타데이터를 검색할 수 있습니다. 이러한 뷰에는 예약 타임라인과 함께 예약, 할당, 용량 약정 변경사항 목록이 포함됩니다.

시작하기 전에

사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다.

필수 권한

INFORMATION_SCHEMA 테이블을 사용하여 예약 메타데이터를 검색하려면 다음 IAM 권한이 필요합니다.

  • RESERVATION_CHANGES_BY_PROJECTRESERVATIONS_BY_PROJECT에는 다음이 필요합니다.

    • 프로젝트에 대한 bigquery.reservations.list 권한

      다음과 같이 사전 정의된 각 IAM 역할에는 위의 권한이 포함되어 있습니다.

      • roles/bigquery.resourceAdmin
      • roles/bigquery.resourceEditor
      • roles/bigquery.resourceViewer
      • roles/bigquery.user
      • roles/bigquery.admin
  • CAPACITY_COMMITMENT_CHANGES_BY_PROJECTCAPACITY_COMMITMENTS_BY_PROJECT에는 다음이 필요합니다.

    • 프로젝트에 대한 bigquery.capacityCommitments.list 권한

      다음과 같이 사전 정의된 각 IAM 역할에는 위의 권한이 포함되어 있습니다.

      • roles/bigquery.resourceAdmin
      • roles/bigquery.resourceEditor
      • roles/bigquery.resourceViewer
      • roles/bigquery.user
      • roles/bigquery.admin
  • ASSIGNMENT_CHANGES_BY_PROJECTASSIGNMENTS_BY_PROJECT에는 다음이 필요합니다.

    • 프로젝트에 대한 bigquery.reservationAssignments.list

      다음과 같이 사전 정의된 각 IAM 역할에는 위의 권한이 포함되어 있습니다.

      • roles/bigquery.resourceAdmin
      • roles/bigquery.resourceEditor
      • roles/bigquery.resourceViewer
      • roles/bigquery.user
      • roles/bigquery.admin

세분화된 BigQuery 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

스키마

INFORMATION_SCHEMA 예약 뷰를 쿼리하면 결과에 BigQuery 예약에 대한 정보가 포함됩니다. BigQuery 예약에 대한 자세한 내용은 예약 개념 페이지를 참조하세요.

  • INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT에는 관리 프로젝트의 예약에 대한 모든 변경사항 목록이 포함됩니다. 각 행은 단일 예약에 대한 변경사항을 나타냅니다.
  • INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT에는 관리 프로젝트의 모든 현재 예약 목록이 포함됩니다. 각 행은 단일 현재 예약을 나타냅니다. 현재 예약은 삭제되지 않은 예약입니다.
  • INFORMATION_SCHEMA.CAPACITY_COMMITMENT_CHANGES_BY_PROJECT에는 관리 프로젝트의 용량 약정에 대한 모든 변경사항 목록이 포함됩니다. 각 행은 단일 용량 약정에 대한 단일 변경사항을 나타냅니다.
  • INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT에는 관리 프로젝트 내의 모든 현재 용량 약정 목록이 포함됩니다. 각 행은 단일 현재 용량 약정을 나타냅니다. 현재 용량 약정이 대기 중이거나 활성 상태이며 삭제되지 않았습니다.
  • INFORMATION_SCHEMA.ASSIGNMENT_CHANGES_BY_PROJECT에는 관리 프로젝트의 할당에 대한 모든 변경사항 목록이 포함됩니다. 각 행은 단일 할당에 대한 단일 변경사항을 나타냅니다.
  • INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT에는 관리 프로젝트의 모든 현재 할당 목록이 포함됩니다. 각 행은 단일 현재 할당을 나타냅니다. 현재 할당은 대기 중이거나 활성 상태이며 삭제되지 않았습니다.

INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT 뷰에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
change_timestamp TIMESTAMP 변경사항이 발생한 시간입니다.
project_id STRING 관리 프로젝트의 ID입니다.
project_number INTEGER 관리 프로젝트의 번호입니다.
reservation_name STRING 사용자가 제공하는 예약 이름입니다.
ignore_idle_slots BOOL false이면 이 예약을 사용하는 모든 쿼리는 다른 용량 약정의 사용되지 않는 유휴 슬롯을 사용할 수 있습니다.
action STRING 예약과 함께 발생한 이벤트의 유형입니다. CREATE, UPDATE, DELETE일 수 있습니다.
slot_capacity INTEGER 예약과 관련된 슬롯 용량입니다.
user_email STRING 변경이 생긴 사용자의 이메일 주소입니다. Google이 변경한 경우는 google입니다. 이메일 주소를 모르는 경우는 NULL입니다.

INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT 뷰에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
ddl STRING 이 예약을 만드는 데 사용되는 DDL 문입니다.
project_id STRING 관리 프로젝트의 ID입니다.
project_number INTEGER 관리 프로젝트의 번호입니다.
reservation_name STRING 사용자가 제공하는 예약 이름입니다.
ignore_idle_slots BOOL false이면 이 예약을 사용하는 모든 쿼리는 다른 용량 약정의 사용되지 않는 유휴 슬롯을 사용할 수 있습니다.
slot_capacity INTEGER 예약과 관련된 슬롯 용량입니다.

INFORMATION_SCHEMA.CAPACITY_COMMITMENT_CHANGES_BY_PROJECT 뷰에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
change_timestamp TIMESTAMP 변경사항이 발생한 시간입니다.
project_id STRING 관리 프로젝트의 ID입니다.
project_number INTEGER 관리 프로젝트의 번호입니다.
capacity_commitment_id STRING 용량 약정을 고유하게 식별하는 ID입니다.
commitment_plan STRING 용량 약정의 약정 계획입니다.
state STRING 용량 약정이 있는 상태입니다. PENDING 또는 ACTIVE일 수 있습니다.
slot_count INTEGER 용량 약정과 관련된 슬롯 수입니다.
action STRING 용량 약정과 함께 발생한 이벤트의 유형입니다. CREATE, UPDATE, DELETE일 수 있습니다.
user_email STRING 변경이 생긴 사용자의 이메일 주소입니다. Google이 변경한 경우는 google입니다. 이메일 주소를 모르는 경우는 NULL입니다.
commitment_start_time TIMESTAMP 현재 약정 기간의 시작 시점입니다. ACTIVE 용량 약정에만 적용됩니다. 그렇지 않으면 NULL입니다.
commitment_end_time TIMESTAMP 현재 약정 기간의 종료 시점입니다. ACTIVE 용량 약정에만 적용됩니다. 그렇지 않으면 NULL입니다.
failure_status RECORD FAILED 약정 요금제의 경우 실패 이유를 제공합니다. 그렇지 않으면 NULL입니다. RECORDcodemessage로 구성됩니다.
renewal_plan STRING 이 용량 약정은 commitment_end_time이 지난 후에 전환됩니다. 요금제를 변경하면 약정 요금제에 따라 약정 기간이 연장됩니다. ANNUALTRIAL 약정에만 적용됩니다. 그렇지 않으면 NULL입니다.

INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT 뷰에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
ddl STRING 이 용량 약정을 만드는 데 사용되는 DDL 문입니다.
project_id STRING 관리 프로젝트의 ID입니다.
project_number INTEGER 관리 프로젝트의 번호입니다.
capacity_commitment_id STRING 용량 약정을 고유하게 식별하는 ID입니다.
commitment_plan STRING 용량 약정의 약정 계획입니다.
state STRING 용량 약정이 있는 상태입니다. PENDING 또는 ACTIVE일 수 있습니다.
slot_count INTEGER 용량 약정과 관련된 슬롯 수입니다.

INFORMATION_SCHEMA.ASSIGNMENT_CHANGES_BY_PROJECT 뷰에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
change_timestamp TIMESTAMP 변경사항이 발생한 시간입니다.
project_id STRING 관리 프로젝트의 ID입니다.
project_number INTEGER 관리 프로젝트의 번호입니다.
assignment_id STRING 할당을 고유하게 식별하는 ID입니다.
reservation_name STRING 할당이 사용할 예약 이름입니다.
job_type STRING 예약을 사용할 수 있는 작업 유형입니다. PIPELINE 또는 QUERY일 수 있습니다.
assignee_id STRING 할당된 리소스를 고유하게 식별하는 ID입니다.
assignee_number INTEGER 할당된 리소스를 고유하게 식별하는 번호입니다.
assignee_type STRING 할당된 담당자 리소스의 유형입니다. organization, folder, project일 수 있습니다.
action STRING 할당과 함께 발생한 이벤트의 유형입니다. CREATE 또는 DELETE일 수 있습니다.
user_email STRING 변경이 생긴 사용자의 이메일 주소입니다. Google이 변경한 경우는 google입니다. 이메일 주소를 모르는 경우는 NULL입니다.
state STRING 할당의 상태입니다. PENDING 또는 ACTIVE일 수 있습니다.

INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT 뷰에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
ddl STRING 이 할당을 만드는 데 사용되는 DDL 문입니다.
project_id STRING 관리 프로젝트의 ID입니다.
project_number INTEGER 관리 프로젝트의 번호입니다.
assignment_id STRING 할당을 고유하게 식별하는 ID입니다.
reservation_name STRING 할당이 사용할 예약 이름입니다.
job_type STRING 예약을 사용할 수 있는 작업 유형입니다. PIPELINE 또는 QUERY일 수 있습니다.
assignee_id STRING 할당된 리소스를 고유하게 식별하는 ID입니다.
assignee_number INTEGER 할당된 리소스를 고유하게 식별하는 번호입니다.
assignee_type STRING 할당된 담당자 리소스의 유형입니다. organization, folder, project일 수 있습니다.

데이터 보관

현재 예약, 용량 약정, 할당은 삭제되기 전까지 예약 뷰에 보관됩니다. 삭제된 예약, 용량 약정, 할당은 최대 41일 동안 각각 RESERVATION_CHANGES_BY_PROJECT, CAPACITY_COMMITMENT_CHANGES_BY_PROJECT, ASSIGNMENT_CHANGES_BY_PROJECT 뷰에 보관되며, 이후에는 뷰에서 삭제됩니다.

리전성

BigQuery INFORMATION_SCHEMA 예약 뷰는 리전화됩니다. 이러한 뷰를 쿼리하려면 리전 한정자를 사용해야 합니다.

예약 뷰와 작업 뷰 간 조인

작업 뷰에는 reservation_id 열이 포함됩니다. 예약이 할당된 프로젝트에서 작업이 실행된 경우 reservation_idreservation-admin-project:reservation-location.reservation-name 형식이 사용됩니다.

예약 뷰와 작업 뷰 사이를 조인하려면 작업 뷰 열 reservation_id와 예약 뷰 열 project_idreservation_name 사이를 조인할 수 있습니다. 이 예시를 참조하세요.

예시

다음 예시에서는 예약 뷰의 다양한 사용을 보여줍니다.

프로젝트의 현재 예약 할당

다음 예시에서는 프로젝트에 현재 할당된 예약과 슬롯 용량을 가져옵니다. 이 정보는 프로젝트의 슬롯 사용량을 해당 프로젝트에 할당된 예약의 슬롯 용량과 비교하여 작업 성능을 디버깅하는 데 유용합니다.

SELECT
  reservation.reservation_name,
  reservation.slot_capacity
FROM
  `reservation-admin-project.region-us`.
  INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT assignment
INNER JOIN
  `reservation-admin-project.region-us`.
  INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT AS reservation
ON
  (assignment.reservation_name = reservation.reservation_name)
WHERE
   assignment.assignee_id = "my-project"
  AND job_type = "QUERY";

예약 기록

다음 예시에서는 지정된 예약의 변경 기록을 가져옵니다. 예약 생성 또는 삭제 등 특정 예약의 변경사항 목록을 보려면 이 정보를 사용하세요.

SELECT
  *
FROM
  `reservation-admin-project.region-us`.
  INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT
WHERE
  reservation_name = "my-reservation"
ORDER BY
  change_timestamp DESC;

시간 경과에 따른 슬롯 사용량

다음 예시에서는 지난 1시간 동안 예약 할당이 있는 프로젝트의 슬롯 사용량, 슬롯 용량, 할당된 예약을 보여줍니다. 슬롯 사용량은 초당 슬롯 밀리초 단위로 제공됩니다.

WITH
  job_data AS (
  SELECT
    job.period_start,
    job.reservation_id,
    job.period_slot_ms,
    job.job_id,
    job.job_type
  FROM
    `my-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT AS job
  WHERE
    job.period_start > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR))
SELECT
  reservation.reservation_name AS reservation_name,
  job.period_start,
  reservation.slot_capacity,
  job.period_slot_ms,
  job.job_id,
  job.job_type
FROM
  job_data AS job
INNER JOIN
  `reservation-admin-project.region-us`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT AS reservation
ON
  (job.reservation_id = CONCAT(reservation.project_id, ":", "US", ".", reservation.reservation_name));

출력은 다음과 비슷합니다.

+------------------+---------------------+---------------+----------------+------------------+----------+
| reservation_name |    period_start     | slot_capacity | period_slot_ms |           job_id | job_type |
+------------------+---------------------+---------------+----------------+------------------+----------+
| my_reservation   | 2021-04-30 17:30:54 |           100 |          11131 | bquxjob_66707... | QUERY    |
| my_reservation   | 2021-04-30 17:30:55 |           100 |          49978 | bquxjob_66707... | QUERY    |
| my_reservation   | 2021-04-30 17:30:56 |           100 |           9038 | bquxjob_66707... | QUERY    |
| my_reservation   | 2021-04-30 17:30:57 |           100 |          17237 | bquxjob_66707... | QUERY    |

이 쿼리는 RESERVATIONS_BY_PROJECT 뷰를 사용하여 예약 정보를 가져옵니다. 예약이 이전 1시간 내에 변경된 경우 reservation_slot_capacity 열이 정확하지 않을 수 있습니다.

이 쿼리는 RESERVATIONS_BY_PROJECTJOBS_TIMELINE_BY_PROJECT와 조인하여 작업 시간 구획을 예약 정보와 연결합니다.

다음 단계