INFORMATION_SCHEMA를 사용하여 예약 메타데이터 가져오기
INFORMATION_SCHEMA
는 데이터 세트, 루틴, 테이블, 뷰, 작업, 예약, 데이터 스트리밍에 대한 메타데이터에 액세스할 수 있는 일련의 뷰입니다.
INFORMATION_SCHEMA
예약 뷰를 쿼리하여 BigQuery 예약에 대한 실시간 메타데이터를 검색할 수 있습니다. 이러한 뷰에는 예약 타임라인과 함께 예약, 할당, 용량 약정 변경사항 목록이 포함됩니다.
시작하기 전에
사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다.
필수 권한
INFORMATION_SCHEMA
테이블을 사용하여 예약 메타데이터를 검색하려면 다음 IAM 권한이 필요합니다.
RESERVATION_CHANGES_BY_PROJECT
및RESERVATIONS_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_PROJECT
및CAPACITY_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_PROJECT
및ASSIGNMENTS_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 입니다. RECORD 는 code 와 message 로 구성됩니다. |
renewal_plan |
STRING |
이 용량 약정은 commitment_end_time 이 지난 후에 전환됩니다. 요금제를 변경하면 약정 요금제에 따라 약정 기간이 연장됩니다. ANNUAL 및 TRIAL 약정에만 적용됩니다. 그렇지 않으면 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_id
에 reservation-admin-project:reservation-location.reservation-name
형식이 사용됩니다.
예약 뷰와 작업 뷰 사이를 조인하려면 작업 뷰 열 reservation_id
와 예약 뷰 열 project_id
및 reservation_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_PROJECT
를 JOBS_TIMELINE_BY_PROJECT
와 조인하여 작업 시간 구획을 예약 정보와 연결합니다.
다음 단계
INFORMATION_SCHEMA
개요는 BigQueryINFORMATION_SCHEMA
소개를 참조하세요.INFORMATION_SCHEMA
를 사용하여 작업 메타데이터를 가져오는 방법 알아보기INFORMATION_SCHEMA
를 사용하여 스트리밍 메타데이터를 가져오는 방법 알아보기INFORMATION_SCHEMA
를 사용하여 데이터 세트 메타데이터를 가져오는 방법 알아보기INFORMATION_SCHEMA
를 사용하여 테이블 메타데이터를 가져오는 방법을 알아보세요.INFORMATION_SCHEMA
를 사용하여 뷰 메타데이터를 가져오는 방법을 알아보세요.