Declaraciones de lenguaje de control de datos en SQL estándar

Las declaraciones de lenguaje de control de datos (DCL) de BigQuery te permiten configurar y controlar los recursos de BigQuery mediante la sintaxis de consultas SQL estándar.

Declaraciones de control de acceso

Usa estas declaraciones para otorgar o quitar el acceso a los recursos de BigQuery.

Para obtener más información sobre cómo controlar el acceso a recursos específicos de BigQuery, consulta los siguientes vínculos:

Permisos necesarios

Se requieren los siguientes permisos para ejecutar las declaraciones GRANT y REVOKE.

Tipo de recurso Permisos
Conjunto de datos bigquery.datasets.update
Tabla bigquery.tables.setIamPolicy
Ver bigquery.tables.setIamPolicy

Declaración GRANT

Otorga funciones a los usuarios en los recursos de BigQuery.

Sintaxis

GRANT role_list
  ON resource_type resource_name
  TO user_list

Aquí:

  • role_list es una función o una lista de funciones separadas por comas que contiene los permisos que deseas otorgar. Para obtener más información sobre los tipos de funciones disponibles, consulta Comprende las funciones.

  • resource_type es el tipo de recurso al que se aplica la función. Los valores admitidos son SCHEMA (equivalente al conjunto de datos) TABLE y VIEW.

  • resource_name es el nombre del recurso en el que deseas otorgar el permiso.

  • user_list es una lista separada por comas de los usuarios a los que se otorga la función.

user_list

Especifica los usuarios con los siguientes formatos:

Tipo de usuario Sintaxis Ejemplo
Cuenta de Google user:$user@$domain user:first.last@example.com
Grupo de Google group:$group@$domain group:my-group@example.com
Cuenta de servicio serviceAccount:$user@$project.iam.gserviceaccount.com serviceAccount:robot@example.iam.gserviceaccount.com
Dominio de Google domain:$domain domain:example.com
Todas las Cuentas de Google specialGroup:allAuthenticatedUsers specialGroup:allAuthenticatedUsers
Todos los usuarios specialGroup:allUsers specialGroup:allUsers

Para obtener más información sobre cada tipo de usuario en la tabla, consulta Conceptos relacionados con la identidad.

Ejemplo

En el siguiente ejemplo, se otorga la función bigquery.dataViewer a los usuarios tom@example.com y sara@example.com en un conjunto de datos llamado my_dataset:

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

Declaración REVOKE

Quita funciones de una lista de usuarios en los recursos de BigQuery.

Sintaxis

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

Aquí:

  • role_list es una función o una lista de funciones separadas por comas que contiene los permisos que deseas quitar. Para obtener más información sobre los tipos de funciones disponibles, consulta Comprende las funciones.

  • resource type es el tipo de recurso del que se quitará la función. Los valores admitidos son SCHEMA (equivalente al conjunto de datos) TABLE y VIEW.

  • resource_name es el nombre del recurso en el que deseas revocar la función.

  • user_list es una lista de usuarios separados por comas desde la que se revocó la función.

Ejemplo

En el siguiente ejemplo, se quita la función bigquery.admin en el conjunto de datos myProject.myDataset del grupo example-team@example.com y una cuenta de servicio:

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

Declaraciones de reservas

Usa estas declaraciones para crear y borrar compromisos de capacidad, reservas y asignaciones de reservas. Para obtener más información, consulta Introducción a Reservations.

Declaración CREATE CAPACITY

Compra ranuras mediante la creación de un compromiso de capacidad nuevo.

CREATE CAPACITY
project_id.location_id.commitment_id
AS JSON
capacity_json_object

Aquí:

  • project_id es el ID del proyecto del proyecto de administración que mantendrá la propiedad de este compromiso.
  • location_id es la ubicación del proyecto.
  • commitment_id es el ID del compromiso. El valor debe ser único para el proyecto y la ubicación. Debe comenzar y terminar con una letra minúscula o un número, y contener solo letras minúsculas, números y guiones.
  • capacity_json_object es una string JSON que describe el compromiso de capacidad.

capacity_json_object

Especifica un objeto JSON que contiene los siguientes campos:

NAME TYPE Detalles
plan String El plan de compromiso para la compra. Entre los valores admitidos, se incluyen los siguientes: FLEX, MONTHLY, ANNUAL. Para obtener más información, consulta Planes de compromiso.
renewal_plan String El plan de renovación del compromiso. Se aplica solo cuando plan es ANNUAL. Para obtener más información, consulta Renueva compromisos.
slot_count Entero La cantidad de ranuras en el compromiso.

Ejemplo

En el siguiente ejemplo, se crea un compromiso de capacidad de 100 ranuras flexibles que se encuentran en la región region-us y están administradas por un proyecto admin_project:

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

Declaración CREATE RESERVATION

Crea una reserva.

CREATE RESERVATION
project_id.location_id.reservation_id
AS JSON
reservation_json_object

Aquí:

  • project_id es el ID del proyecto del proyecto de administración en el que se creó el compromiso de capacidad.
  • location_id es la ubicación del proyecto.
  • reservation_id es el ID de reserva.
  • reservation_json_object es una string JSON que describe la reserva.

reservation_json_object

Especifica un objeto JSON que contiene los siguientes campos:

NAME TYPE Detalles
ignore_idle_slots Booleano Si el valor es true, la reserva solo usa las ranuras que se le aprovisionan. El valor predeterminado es false. Para obtener más información, consulta Ranuras inactivas.
slot_capacity Entero La cantidad de ranuras que asignarás a la reserva.

Ejemplo

En el siguiente ejemplo, se crea una reserva de 100 ranuras en el proyecto admin_project:

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

Declaración CREATE ASSIGNMENT

Asigna un proyecto, una carpeta o una organización a una reserva.

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

Aquí:

  • project_id es el ID del proyecto del proyecto de administración en el que se creó la reserva.
  • location_id es la ubicación del proyecto.
  • reservation_id es el ID de reserva.
  • assignment_id es el ID de la asignación. El valor debe ser único para el proyecto y la ubicación. Debe comenzar y terminar con una letra minúscula o un número, y contener solo letras minúsculas, números y guiones.
  • assignment_json_object es una string JSON que describe la asignación.

Para quitar un proyecto de cualquier reserva y usar la facturación a pedido, establece reservation_id en none.

assignment_json_object

Especifica un objeto JSON que contiene los siguientes campos:

NAME TYPE Detalles
assignee String El ID del proyecto, la carpeta o la organización que se asignará a la reserva.
job_type String El tipo de trabajo que se asignará a esta reserva. Los valores admitidos son QUERY, PIPELINE y ML_EXTERNAL. Para obtener más información, consulta Asignaciones.

Ejemplo

En el siguiente ejemplo, se asigna el proyecto my_project a la reserva prod para los trabajos de consulta:

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

En el siguiente ejemplo, se asigna una organización a la reserva prod para los trabajos de canalización, como trabajos de carga y exportación:

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

Declaración DROP CAPACITY

Borra un compromiso de capacidad.

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

Aquí:

  • IF EXISTS: si incluyes esta cláusula y el compromiso no existe, la declaración se realiza correctamente sin ninguna acción. Si omites esta cláusula y el compromiso no existe, la declaración muestra un error.
  • project_id es el ID del proyecto del proyecto de administración en el que se creó la reserva.
  • location_id es la ubicación del proyecto.
  • capacity-commitment-id es el ID de compromiso de capacidad.

Para encontrar el ID del compromiso de capacidad, consulta la tabla INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT.

Ejemplo

En el siguiente ejemplo, se borra el compromiso de capacidad:

DROP RESERVATION `admin_project.region-us.1234`

Declaración DROP RESERVATION

Borra una reserva.

DROP RESERVATION [IF EXISTS]
project_id.location_id.reservation_id

Aquí:

  • IF EXISTS: si incluyes esta cláusula y la reserva no existe, la declaración se realiza correctamente sin ninguna acción. Si omites esta cláusula y la reserva no existe, la declaración muestra un error.
  • project_id es el ID del proyecto del proyecto de administración en el que se creó la reserva.
  • location_id es la ubicación del proyecto.
  • reservation_id es el ID de reserva.

Ejemplo

En el siguiente ejemplo, se borra la reserva prod:

DROP RESERVATION `admin_project.region-us.prod`

Declaración DROP ASSIGNMENT

Borra una asignación de reserva.

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

Aquí:

  • IF EXISTS: si incluyes esta cláusula y la asignación no existe, la declaración se realiza correctamente sin ninguna acción. Si omites esta cláusula y la asignación no existe, la declaración muestra un error.
  • project_id es el ID del proyecto del proyecto de administración en el que se creó la reserva.
  • location_id es la ubicación del proyecto.
  • reservation_id es el ID de reserva.
  • assignment_id es el ID de la asignación.

Para encontrar el ID de la asignación, consulta la tabla INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT.

Ejemplo

En el siguiente ejemplo, se borra una asignación de la reserva denominada prod:

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