Crea una vista autorizada

BigQuery es un almacén de datos de estadísticas a escala de petabytes que puedes usar para ejecutar consultas de SQL en grandes cantidades de datos casi en tiempo real.

Dar acceso para ver un conjunto de datos también se conoce como crear una vista autorizada en BigQuery. Una vista autorizada te permite compartir resultados de consultas con usuarios y grupos específicos sin darles acceso a las tablas subyacentes. También puedes usar la consulta de SQL de la vista para restringir las columnas (campos) que los usuarios pueden consultar. En este instructivo, crearás una vista autorizada.

Objetivos

En este instructivo podrás hacer lo siguiente:

  • Crear conjuntos de datos y aplicar controles de acceso a ellos
  • Asignar controles de acceso a tu proyecto
  • Crear una vista autorizada que restrinja los datos que los usuarios pueden consultar

Costos

BigQuery es un producto pago que generará costos de uso en este instructivo. El precio de consulta de BigQuery proporciona el primer TB por mes de forma gratuita. Para obtener más información, consulta la página Precios.

Antes de comenzar

Antes de comenzar con este instructivo, usa Google Cloud Console para crear o seleccionar un proyecto.

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En GCP Console, en la página de selección de proyecto, selecciona o crea un proyecto de GCP.

    Ir a la página de selección de proyecto

  3. BigQuery se habilita de forma automática en los proyectos nuevos. Para activar BigQuery en un proyecto existente, dirígete a Habilita lasBigQueryAPI.

    Habilita lasAPI

    .
  4. BigQuery ofrece una zona de pruebas si no deseas proporcionar una tarjeta de crédito o habilitar la facturación del proyecto. Los pasos de este tema funcionan para un proyecto, más allá de si el proyecto tiene o no habilitada la facturación. Si prefieres habilitar la facturación, consulta cómo habilitar la facturación.

Introducción

En este instructivo, crearás dos conjuntos de datos: uno para tus datos de origen y otro para tu vista autorizada. Propagarás el conjunto de datos de origen con los datos del conjunto de datos públicos de GitHub. Luego, crearás una vista que consultará una tabla en el conjunto de datos de origen.

Una vez que crees los conjuntos de datos y la vista, asigna controles de acceso al proyecto, al conjunto de datos que contiene la vista y al conjunto de datos que contiene los datos de origen.

Dar acceso a una vista al conjunto de datos de origen también se conoce como la creación de una vista autorizada. Cuando creas una vista autorizada, sigue estos pasos:

  • Crea un conjunto de datos separado para almacenar la vista.
  • Crea la vista en el conjunto de datos nuevo.
  • Asigna controles de acceso al proyecto.
  • Asigna controles de acceso al conjunto de datos que contiene la vista.
  • Autoriza la vista para acceder al conjunto de datos fuente.

Crea un conjunto de datos de origen

En primer lugar, debes crear un conjunto de datos para almacenar tus datos de origen. Para este instructivo, propaga una tabla en tu conjunto de datos fuente consultando el conjunto de datos públicos GitHub. Los datos en tu conjunto de datos fuente contienen información que no deseas que vean tus análisis de datos. Restringe el acceso a los datos usando una vista autorizada.

Para crear tu conjunto de datos de origen, sigue estos pasos:

Console

  1. Abre la IU web de BigQuery en Cloud Console.
    Ir a Cloud Console

  2. En el panel de navegación, en la sección Recursos, selecciona tu proyecto y haz clic en Crear conjunto de datos.

  3. En ID del conjunto de datos, ingresa github_source_data.

  4. Usa los valores predeterminados para el resto de la configuración y haz clic en Crear conjunto de datos.

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se incluyen en la Guía de inicio rápido de BigQuery: usa bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = 'github_source_data'

source_dataset = bigquery.Dataset(client.dataset(source_dataset_id))
# Specify the geographic location where the dataset should reside.
source_dataset.location = 'US'
source_dataset = client.create_dataset(source_dataset)  # API request

Una vez que crees el conjunto de datos de origen, propaga una tabla mediante una consulta de SQL. Esto recupera datos de consulta del conjunto de datos públicos de GitHub.

Console

  1. Abre la IU web de BigQuery en Cloud Console.
    Ir a Cloud Console

  2. Haz clic en Redactar consulta nueva.

  3. Copia y pega la siguiente consulta en el área de texto del Editor de consultas.

    SELECT
      commit,
      author,
      committer,
      repo_name
    FROM
      `bigquery-public-data.github_repos.commits`
    LIMIT
      1000
    
  4. Haz clic en Más y selecciona Configuración de consulta.

  5. En Destino, marca la casilla Establecer una tabla de destino para los resultados de la consulta.

    • En Nombre del proyecto, verifica que tu proyecto esté seleccionado.
    • En Nombre del conjunto de datos, verifica que la opción github_source_data esté seleccionada.
    • En Nombre de la tabla, ingresa github_contributors.
    • Haz clic en Guardar.

  6. Haz clic en Ejecutar.

  7. Cuando se complete la consulta, haz clic en github_contributors y, luego, en Vista previa para verificar que los datos se escribieron en la tabla.

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se incluyen en la Guía de inicio rápido de BigQuery: usa bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

source_table_id = 'github_contributors'
job_config = bigquery.QueryJobConfig()
job_config.destination = source_dataset.table(source_table_id)
sql = """
    SELECT commit, author, committer, repo_name
    FROM `bigquery-public-data.github_repos.commits`
    LIMIT 1000
"""
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish

Crea un conjunto de datos separado para almacenar tu vista

Después de crear tu conjunto de datos fuente, crearás un conjunto de datos nuevo para almacenar la vista que compartirás con tus analistas de datos. Esta vista tendrá acceso a los datos en el conjunto de datos fuente. Tus analistas de datos tendrán acceso a la vista, no a los datos fuente.

Cuando creas la vista, debe crearse en un conjunto de datos independiente de los datos de origen consultados por la vista. Debido a que puedes asignar controles de acceso solo en el nivel del conjunto de datos, si la vista se crea en el mismo conjunto de datos que los datos de fuente, tus analistas de datos tendrán acceso tanto a la vista como a los datos.

Si deseas crear un conjunto de datos para almacenar tu vista, sigue estos pasos:

Console

  1. Abre la IU web de BigQuery en Cloud Console.
    Ir a Cloud Console

  2. En el panel de navegación, en la sección Recursos, selecciona tu proyecto y haz clic en Crear conjunto de datos.

  3. En ID del conjunto de datos, ingresa shared_views.

  4. Usa los valores predeterminados para el resto de la configuración y haz clic en Crear conjunto de datos.

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se incluyen en la Guía de inicio rápido de BigQuery: usa bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

shared_dataset_id = 'shared_views'
shared_dataset = bigquery.Dataset(client.dataset(shared_dataset_id))
shared_dataset.location = 'US'
shared_dataset = client.create_dataset(shared_dataset)  # API request

Crea la vista en el conjunto de datos nuevo

En el conjunto de datos nuevo, crearás la vista que deseas autorizar. Esta es la vista que compartes con tus analistas de datos. Esta vista se crea mediante una consulta de SQL que excluye las columnas que no deseas que vean los analistas de datos.

Para este instructivo, tu vista compartida excluye toda la información del autor, excepto el nombre del autor, y toda la información del confirmador, excepto el nombre del confirmador.

Para crear la vista en el conjunto de datos nuevo, sigue estos pasos:

Console

  1. Abre la IU web de BigQuery en Cloud Console.
    Ir a Cloud Console

  2. Haz clic en Redactar consulta nueva.

  3. Copia y pega la siguiente consulta en el área de texto del Editor de consultas. Reemplaza project_id por el ID del proyecto.

    SELECT
      commit,
      author.name as author,
      committer.name as committer,
      repo_name
    FROM
      `project_id.github_source_data.github_contributors`
    
  4. Haz clic en Más y selecciona Configuración de consulta.

  5. En Dialecto de SQL, selecciona Estándar. Haz clic en Guardar para actualizar la configuración de consulta.

  6. Haz clic en Guardar vista.

  7. En el cuadro de diálogo Guardar vista, realiza los siguientes pasos:

    • En Nombre del proyecto, verifica que tu proyecto esté seleccionado.
    • En Nombre del conjunto de datos, verifica que la opción shared_views esté seleccionada.
    • En Nombre de la tabla, ingresa github_analyst_view.
    • Haz clic en Guardar.

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se incluyen en la Guía de inicio rápido de BigQuery: usa bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

shared_view_id = 'github_analyst_view'
view = bigquery.Table(shared_dataset.table(shared_view_id))
sql_template = """
    SELECT
        commit, author.name as author,
        committer.name as committer, repo_name
    FROM
        `{}.{}.{}`
"""
view.view_query = sql_template.format(
    client.project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

Asigna una función de Cloud IAM a nivel de proyecto a tus analistas de datos

A fin de consultar la vista, los analistas de datos necesitan permiso para ejecutar trabajos de consulta. La función bigquery.user incluye permisos para ejecutar trabajos, incluidos los trabajos de consulta, dentro del proyecto. Si otorgas a un usuario o grupo la función bigquery.user a nivel del proyecto, el usuario puede crear conjuntos de datos y ejecutar trabajos de consulta en las tablas de esos conjuntos de datos. La función bigquery.user no otorga permiso a los usuarios para consultar datos, ver datos de tabla o ver detalles de esquema de tabla en los conjuntos de datos que el usuario no creó.

Si asignas la función bigquery.user a nivel del proyecto a tus analistas de datos, no se les permitirá ver o consultar datos de tabla en el conjunto de datos que contiene las tablas que consulta la vista. Se debe asignar la función bigquery.user a nivel del proyecto a la mayoría de los individuos (científicos de datos, analistas de inteligencia empresarial, analistas de datos) de una empresa.

En este instructivo, los analistas de datos están en un grupo llamado data_analysts@example.com. El nombre de este grupo se usa solo como ejemplo. Cuando agregas un grupo a una función de IAM, la dirección de correo electrónico y el dominio deben estar asociados con una Cuenta de Google activa o una cuenta de Google App.

Para asignar la función bigquery.user a nivel del proyecto al grupo de analistas de datos, sigue estos pasos:

Console

  1. Abre la página IAM en Google Cloud Console.

    Abrir la página IAM

  2. Haz clic en Seleccionar un proyecto.

  3. Selecciona tu proyecto y haz clic en Abrir.

  4. En la página IAM, haz clic en Agregar.

  5. En el cuadro de diálogo Agregar miembros, realiza los siguientes pasos:

    • En Miembros, escribe el nombre del grupo: data_analysts@example.com.
    • En Funciones, haz clic en Seleccionar una función y elige BigQuery > Usuario de BigQuery.
    • Haz clic en Agregar.

Asigna controles de acceso al conjunto de datos que contiene la vista

Para que los analistas de datos consulten la vista, se les debe otorgar la función bigquery.dataViewer en el conjunto de datos que contiene la vista. La función bigquery.user otorga a los analistas de datos los permisos necesarios para crear trabajos de consulta. Sin embargo, no pueden consultar la vista de forma correcta, salvo que tengan acceso bigquery.dataViewer al conjunto de datos que contiene la vista.

Para otorgar a los analistas de datos el acceso bigquery.dataViewer al conjunto de datos, sigue estos pasos:

Console

  1. En la sección Recursos, selecciona el conjunto de datos shared_views y, luego, haz clic en Compartir conjunto de datos.

  2. En el panel Permisos del conjunto de datos, haz clic en Agregar miembros.

  3. En el cuadro de texto Miembros nuevos, ingresa data_analysts@example.com.

  4. Haz clic en Seleccionar una función y selecciona BigQuery > Visualizador de datos de BigQuery.

  5. Haz clic en Listo.

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se incluyen en la Guía de inicio rápido de BigQuery: usa bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

# analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry('READER', 'groupByEmail', analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
    shared_dataset, ['access_entries'])  # API request

Autoriza la vista para acceder al conjunto de datos fuente.

Una vez que crees los controles de acceso para el conjunto de datos que contiene la vista, agrega la vista como una vista autorizada en el conjunto de datos fuente. Esto le da a la vista acceso a los datos fuente, no a tu grupo de analistas de datos.

Para autorizar la vista a fin de acceder a los datos de origen, sigue estos pasos:

Console

  1. Selecciona el conjunto de datos github_source_data desde Recursos y haz clic en Compartir conjunto de datos.

  2. En el panel Permisos del conjunto de datos, selecciona la pestaña Vistas autorizadas.

  3. En Compartir vista autorizada, realiza los siguientes pasos:

    • En Seleccionar proyecto, verifica que tu proyecto esté seleccionado.
    • En Seleccionar conjunto de datos, elige shared_views.
    • En Seleccionar vista, ingresa el nombre de la vista: github_analyst_view.
    • Haz clic en Aceptar.

  4. Haz clic en Agregar y, luego, en Listo.

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se incluyen en la Guía de inicio rápido de BigQuery: usa bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

access_entries = source_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry(None, 'view', view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ['access_entries'])  # API request

Verifica la configuración

Cuando se completa la configuración, un miembro del grupo data_analysts puede consultar la vista para verificar la configuración.

Para verificar la configuración, sigue estos pasos:

Console

  1. Haz que un miembro del grupo data_analysts vaya a la IU web de BigQuery en Cloud Console.
    Ir a Cloud Console

  2. Haz clic en Redactar consulta nueva.

  3. Copia y pega la siguiente consulta en el área de texto del Editor de consultas.

    SELECT
      *
    FROM
      `shared_views.github_analyst_view`
    

Código fuente completo

Aquí se encuentra el código fuente completo para el instructivo y tu referencia.

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se incluyen en la Guía de inicio rápido de BigQuery: usa bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

# Create a source dataset
from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = 'github_source_data'

source_dataset = bigquery.Dataset(client.dataset(source_dataset_id))
# Specify the geographic location where the dataset should reside.
source_dataset.location = 'US'
source_dataset = client.create_dataset(source_dataset)  # API request

# Populate a source table
source_table_id = 'github_contributors'
job_config = bigquery.QueryJobConfig()
job_config.destination = source_dataset.table(source_table_id)
sql = """
    SELECT commit, author, committer, repo_name
    FROM `bigquery-public-data.github_repos.commits`
    LIMIT 1000
"""
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish

# Create a separate dataset to store your view
shared_dataset_id = 'shared_views'
shared_dataset = bigquery.Dataset(client.dataset(shared_dataset_id))
shared_dataset.location = 'US'
shared_dataset = client.create_dataset(shared_dataset)  # API request

# Create the view in the new dataset
shared_view_id = 'github_analyst_view'
view = bigquery.Table(shared_dataset.table(shared_view_id))
sql_template = """
    SELECT
        commit, author.name as author,
        committer.name as committer, repo_name
    FROM
        `{}.{}.{}`
"""
view.view_query = sql_template.format(
    client.project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

# Assign access controls to the dataset containing the view
# analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry('READER', 'groupByEmail', analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
    shared_dataset, ['access_entries'])  # API request

# Authorize the view to access the source dataset
access_entries = source_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry(None, 'view', view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ['access_entries'])  # API request

Limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo, sigue estos pasos:

  1. En GCP Console, dirígete a la página Administrar recursos.

    Ir a la página Administración de recursos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar .
  3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Próximos pasos