표준 SQL의 데이터 제어 언어(DCL) 문

BigQuery 데이터 제어 언어(DCL) 문을 사용하면 표준 SQL 쿼리 구문으로 BigQuery 리소스를 설정하고 제어할 수 있습니다.

액세스 제어 문

이러한 문을 사용하여 BigQuery 리소스에 대한 액세스 권한을 부여하거나 삭제합니다.

특정 BigQuery 리소스의 액세스 제어에 대한 자세한 내용은 다음을 참조하세요.

권한 필요

GRANTREVOKE 문을 실행하려면 다음 권한이 필요합니다.

리소스 유형 권한
데이터 세트 bigquery.datasets.update
테이블 bigquery.tables.setIamPolicy
bigquery.tables.setIamPolicy

GRANT

사용자에게 BigQuery 리소스에 대한 역할을 부여합니다.

구문

GRANT role_list
  ON resource_type resource_name
  TO user_list

각 항목의 의미는 다음과 같습니다.

  • role_list는 부여하려는 권한이 포함된 역할이나 쉼표로 구분된 역할 목록입니다. 사용 가능한 역할 유형에 대한 자세한 내용은 역할 이해를 참조하세요.

  • resource_type은 역할이 적용되는 리소스 유형입니다. 지원되는 값은 SCHEMA(데이터 세트와 같음), TABLE, VIEW입니다.

  • resource_name은 권한을 부여하려는 리소스의 이름입니다.

  • user_list는 역할이 부여된 사용자를 쉼표로 구분한 목록입니다.

user_list

다음 형식을 사용하여 사용자를 지정합니다.

User Type 구문 예시
Google 계정 user:$user@$domain user:first.last@example.com
Google 그룹 group:$group@$domain group:my-group@example.com
서비스 계정 serviceAccount:$user@$project.iam.gserviceaccount.com serviceAccount:robot@example.iam.gserviceaccount.com
Google 도메인 domain:$domain domain:example.com
모든 Google 계정 specialGroup:allAuthenticatedUsers specialGroup:allAuthenticatedUsers
모든 사용자 specialGroup:allUsers specialGroup:allUsers

테이블의 각 사용자 유형에 대한 자세한 내용은 ID와 관련된 개념을 참조하세요.

예시

다음 예시에서는 이름이 my_dataset인 데이터 세트에서 tom@example.comsara@example.com 사용자에게 bigquery.dataViewer 역할을 부여합니다.

GRANT `roles/bigquery.dataViewer` ON SCHEMA `mycompany`.revenue
TO "user:tom@example.com", "user:sara@example.com"

REVOKE

BigQuery 리소스의 사용자 목록에서 역할을 삭제합니다.

구문

REVOKE role_list
  ON {SCHEMA | TABLE | VIEW} resource_name
  FROM user_list

각 항목의 의미는 다음과 같습니다.

  • role_list는 삭제하려는 권한이 포함된 역할이나 쉼표로 구분된 역할 목록입니다. 사용 가능한 역할 유형에 대한 자세한 내용은 역할 이해를 참조하세요.

  • resource type은 역할을 삭제하려는 리소스의 유형입니다. 지원되는 값은 SCHEMA(데이터 세트와 같음), TABLE, VIEW입니다.

  • resource_name은 역할을 취소하려는 리소스의 이름입니다.

  • user_list는 역할이 취소되는 사용자를 쉼표로 구분한 목록입니다.

예시

다음 예시에서는 example-team@example.com 그룹과 서비스 계정에서 myProject.myDataset 데이터 세트에 대한 bigquery.admin 역할을 삭제합니다.

REVOKE `roles/bigquery.admin` ON SCHEMA myProject.myDataset
FROM "group:example-team@example.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"

예약 문

이러한 문을 사용하여 용량 약정, 예약, 예약 할당을 생성하고 삭제합니다. 자세한 내용은 예약 소개를 참조하세요.

CREATE CAPACITY

새 용량 약정을 만들어 슬롯을 구매합니다.

CREATE CAPACITY
project_id.location_id.commitment_id
AS JSON
capacity_json_object

각 항목의 의미는 다음과 같습니다.

  • project_id는 이 약정의 소유권을 유지할 관리 프로젝트의 프로젝트 ID입니다.
  • location_id는 프로젝트의 위치입니다.
  • commitment_id는 약정 ID입니다. 값은 프로젝트 및 위치에서 고유해야 합니다. 소문자 또는 숫자로 시작하고 끝나야 하며 소문자, 숫자, 대시만 포함할 수 있습니다.
  • capacity_json_object는 용량 약정을 설명하는 JSON 문자열입니다.

capacity_json_object

다음 필드가 포함된 JSON 객체를 지정합니다.

NAME TYPE 세부정보
plan 문자열 구매할 약정 요금제입니다. 지원되는 값은 FLEX, MONTHLY, ANNUAL입니다. 자세한 내용은 약정 요금제를 참조하세요.
renewal_plan 문자열 약정 갱신 요금제입니다. planANNUAL인 경우에만 적용됩니다. 자세한 내용은 약정 갱신을 참조하세요.
slot_count 정수 이 약정의 슬롯 수입니다.

예시

다음 예시에서는 region-us 리전에 있고 admin_project 프로젝트에서 관리하는 100개의 가변 슬롯의 용량 약정을 만듭니다.

CREATE CAPACITY `admin_project.region-us.my-commitment`
AS JSON """{
 "slot_count": 100,
 "plan": "FLEX"
}"""

CREATE RESERVATION

예약을 만듭니다.

CREATE RESERVATION
project_id.location_id.reservation_id
AS JSON
reservation_json_object

각 항목의 의미는 다음과 같습니다.

  • project_id는 용량 약정이 생성된 관리 프로젝트의 프로젝트 ID입니다.
  • location_id는 프로젝트의 위치입니다.
  • reservation_id는 예약 ID입니다.
  • reservation_json_object는 예약을 설명하는 JSON 문자열입니다.

reservation_json_object

다음 필드가 포함된 JSON 객체를 지정합니다.

NAME TYPE 세부정보
ignore_idle_slots 부울 값이 true면 예약은 프로비저닝된 슬롯만 사용합니다. 기본값은 false입니다. 자세한 내용은 유휴 슬롯을 참조하세요.
slot_capacity 정수 이 예약에 할당할 슬롯 수입니다.

예시

다음 예시에서는 admin_project 프로젝트에 슬롯 100개 예약을 만듭니다.

CREATE RESERVATION `admin_project.region-us.prod`
AS JSON """{
 "slot_capacity": 100
}"""

CREATE ASSIGNMENT

프로젝트, 폴더, 조직을 예약에 할당합니다.

CREATE ASSIGNMENT
project_id.location_id.reservation_id.assignment_id
AS JSON
assignment_json_object

각 항목의 의미는 다음과 같습니다.

  • project_id는 예약이 생성된 관리 프로젝트의 프로젝트 ID입니다.
  • location_id는 프로젝트의 위치입니다.
  • reservation_id는 예약 ID입니다.
  • assignment_id는 할당의 ID입니다. 값은 프로젝트 및 위치에서 고유해야 합니다. 소문자 또는 숫자로 시작하고 끝나야 하며 소문자, 숫자, 대시만 포함할 수 있습니다.
  • assignment_json_object는 할당을 설명하는 JSON 문자열입니다.

예약에서 프로젝트를 삭제하고 주문형 결제를 대신 사용하려면 reservation_idnone으로 설정합니다.

assignment_json_object

다음 필드가 포함된 JSON 객체를 지정합니다.

NAME TYPE 세부정보
assignee 문자열 예약에 할당할 프로젝트, 폴더 또는 조직의 ID입니다.
job_type 문자열 예약에 할당할 작업 유형입니다. 지원되는 값은 QUERY, PIPELINE, ML_EXTERNAL입니다. 자세한 내용은 할당을 참조하세요.

예시

다음 예시에서는 my_project 프로젝트를 쿼리 작업의 prod 예약에 할당합니다.

CREATE ASSIGNMENT `admin_project.region-us.prod.my_assignment`
AS JSON """{
 "assignee": "projects/my_project",
 "job_type": "QUERY"
}"""

다음 예시에서는 로드 및 내보내기 작업과 같은 파이프라인 작업의 prod 예약에 조직을 할당합니다.

CREATE ASSIGNMENT `admin_project.region-us.prod.my_assignment`
AS JSON """{
 "assignee": "organizations/1234",
 "job_type": "PIPELINE"
}"""

DROP CAPACITY

용량 약정을 삭제합니다.

DROP CAPACITY [IF EXISTS]
project_id.location_id.capacity-commitment-id

각 항목의 의미는 다음과 같습니다.

  • IF EXISTS: 이 절을 포함하고 약정이 없는 경우, 아무런 조치를 취하지 않아도 문이 성공합니다. 이 절을 생략하고 약정이 없으면 문이 오류를 반환합니다.
  • project_id는 예약이 생성된 관리 프로젝트의 프로젝트 ID입니다.
  • location_id는 프로젝트의 위치입니다.
  • capacity-commitment-id는 용량 약정 ID입니다.

INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT 테이블을 쿼리하면 용량 약정 ID를 찾을 수 있습니다.

예시

다음 예시에서는 용량 약정을 삭제합니다.

DROP RESERVATION `admin_project.region-us.1234`

DROP RESERVATION

예약을 삭제합니다.

DROP RESERVATION [IF EXISTS]
project_id.location_id.reservation_id

각 항목의 의미는 다음과 같습니다.

  • IF EXISTS: 이 절을 포함하고 예약이 없는 경우, 아무런 조치를 취하지 않아도 문이 성공합니다. 이 절을 생략하고 예약이 없으면 문이 오류를 반환합니다.
  • project_id는 예약이 생성된 관리 프로젝트의 프로젝트 ID입니다.
  • location_id는 프로젝트의 위치입니다.
  • reservation_id는 예약 ID입니다.

예시

다음 예시에서는 prod 예약을 삭제합니다.

DROP RESERVATION `admin_project.region-us.prod`

DROP ASSIGNMENT

예약 할당을 삭제합니다.

DROP ASSIGNMENT [IF EXISTS]
project_id.location_id.reservation_id.assignment_id

각 항목의 의미는 다음과 같습니다.

  • IF EXISTS: 이 절을 포함하고 할당이 없는 경우, 아무런 조치를 취하지 않아도 문이 성공합니다. 이 절을 생략하고 할당이 없으면 문이 오류를 반환합니다.
  • project_id는 예약이 생성된 관리 프로젝트의 프로젝트 ID입니다.
  • location_id는 프로젝트의 위치입니다.
  • reservation_id는 예약 ID입니다.
  • assignment_id는 할당 ID입니다.

INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT 테이블을 쿼리하면 할당 ID를 찾을 수 있습니다.

예시

다음 예시에서는 prod라는 예약에서 할당을 삭제합니다.

DROP ASSIGNMENT `admin_project.region-us.prod.1234`