Crear una vista autorizada


En este instructivo, crearás una vista autorizada en BigQuery que usen tus analistas de datos. Las vistas autorizadas te permiten compartir resultados de consultas con usuarios y grupos específicos sin darles acceso a los datos de origen subyacentes. Se le otorga acceso a los datos fuente a la vista, en lugar de a un usuario o grupo. También puedes usar la consulta en SQL de la vista para excluir columnas y campos de los resultados de la consulta.

Un enfoque alternativo para usar una vista autorizada sería configurar controles de acceso a nivel de la columna en los datos de origen y, luego, otorgarles a los usuarios acceso a una vista que consulte los datos con control de acceso. Para obtener más información sobre los controles de acceso a nivel de columna, consulta Introducción al control de acceso a nivel de columna.

Si tienes varias vistas autorizadas que acceden al mismo conjunto de datos de origen, puedes autorizar el conjunto de datos que contiene las vistas en lugar de autorizar una vista individual.

Objetivos

  • Crea un conjunto de datos que contenga tus datos fuente.
  • Ejecuta una consulta para cargar datos en una tabla de destino en el conjunto de datos de origen.
  • Crea un conjunto de datos que contenga tu vista autorizada.
  • Crea una vista autorizada a partir de una consulta de SQL que restrinja las columnas que tus analistas de datos pueden ver en los resultados de la consulta.
  • Otorga permiso a tus analistas de datos para que ejecuten trabajos de consulta.
  • Otorgar a tus analistas de datos acceso al conjunto de datos que contiene la vista autorizada
  • Otorga acceso de vista autorizada al conjunto de datos de origen.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. Make sure that billing is enabled for your Google Cloud project.

  5. Enable the BigQuery API.

    Enable the API

  6. Asegúrate de tener los permisos necesarios para realizar las tareas de este documento.

Roles obligatorios

Si creas un proyecto nuevo, eres el propietario y se te otorgan todos los permisos de IAM necesarios para completar este instructivo.

Si usas un proyecto existente, necesitas el siguiente rol.

Make sure that you have the following role or roles on the project:

Check for the roles

  1. In the Google Cloud console, go to the IAM page.

    Go to IAM
  2. Select the project.
  3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

  4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

Grant the roles

  1. In the Google Cloud console, go to the IAM page.

    Ir a IAM
  2. Selecciona el proyecto.
  3. Haz clic en Grant access.
  4. En el campo Principales nuevas, ingresa tu identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.

  5. En la lista Seleccionar un rol, elige un rol.
  6. Para otorgar funciones adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.
  7. Haz clic en Guardar.
  8. Para obtener más información sobre los roles en BigQuery, consulta Funciones predefinidas de IAM.

    Permisos necesarios

    Para crear los recursos que se usan en este instructivo, se requieren los siguientes permisos. El rol predefinido de administrador de BigQuery Studio otorga todos estos permisos.

    • bigquery.datasets.create para crear el conjunto de datos de origen y el conjunto de datos que contiene la vista autorizada.
    • bigquery.tables.create para crear la tabla que almacena los datos de origen y para crear la vista autorizada.
    • bigquery.jobs.create para ejecutar el trabajo de consulta que carga datos en la tabla fuente
    • bigquery.datasets.getIamPolicy y bigquery.datasets.get para obtener permisos de IAM para el conjunto de datos de origen y el conjunto de datos que contiene la vista autorizada.
    • bigquery.datasets.setIamPolicy y bigquery.datasets.update para actualizar los permisos de IAM del conjunto de datos de origen y del conjunto de datos que contiene la vista autorizada

    Para obtener más información sobre los permisos de IAM en BigQuery, consulta Permisos de BigQuery.

Crea un conjunto de datos para almacenar tus datos fuente

En primer lugar, debes crear un conjunto de datos para almacenar tus datos de origen.

Para crear tu conjunto de datos fuente, elige una de las siguientes opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, junto al proyecto en el que deseas crear el conjunto de datos, haz clic en Ver acciones > Crear conjunto de datos.

  3. En la página Crear conjunto de datos, haz lo siguiente:

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

    2. En Tipo de ubicación, verifica que esté seleccionada la opción Multirregión.

    3. En Multirregión, elige EE.UU. o UE. Todos los recursos que creas en este instructivo deben estar en la misma ubicación multirregión.

    4. Haz clic en Crear conjunto de datos.

SQL

Usa la declaración DDL CREATE SCHEMA:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ve a BigQuery Studio

  2. En el editor de consultas, escribe la siguiente sentencia:

    CREATE SCHEMA github_source_data;

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Create a source dataset to store your table.
Dataset sourceDataset = bigquery.create(DatasetInfo.of(sourceDatasetId));

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = "github_source_data"
source_dataset_id_full = "{}.{}".format(client.project, source_dataset_id)


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

Crea una tabla y carga tus datos de origen

Después de crear el conjunto de datos fuente, propaga una tabla en él guardando los resultados de una consulta de SQL en una tabla de destino. La consulta recupera datos del conjunto de datos públicos de GitHub.

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ingresa la consulta siguiente:

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

  4. En Destino, selecciona Establecer una tabla de destino para los resultados de la consulta.

  5. En Conjunto de datos, ingresa PROJECT_ID.github_source_data.

    Reemplaza PROJECT_ID con el ID del proyecto.

  6. En ID de tabla, ingresa github_contributors.

  7. Haz clic en Guardar.

  8. Haz clic en Ejecutar.

  9. Cuando se complete la consulta, en el panel Explorador, expande github_source_data y, luego, haz clic en github_contributors.

  10. Para verificar que los datos se hayan escrito en la tabla, haz clic en la pestaña Vista previa.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Populate a source table
String tableQuery =
    "SELECT commit, author, committer, repo_name"
        + " FROM `bigquery-public-data.github_repos.commits`"
        + " LIMIT 1000";
QueryJobConfiguration queryConfig =
    QueryJobConfiguration.newBuilder(tableQuery)
        .setDestinationTable(TableId.of(sourceDatasetId, sourceTableId))
        .build();
bigquery.query(queryConfig);

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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 para almacenar tu vista autorizada

Después de crear tu conjunto de datos fuente, crearás un conjunto de datos nuevo y separado para almacenar la vista autorizada que compartirás con tus analistas de datos. En un paso posterior, otorgarás acceso de vista autorizado a los datos en el conjunto de datos fuente. Tus analistas de datos tendrán acceso a la vista autorizada, pero no al acceso directo a los datos de origen.

Las vistas autorizadas se deben crear en un conjunto de datos diferente a partir de los datos de origen. De esta manera, los propietarios de datos pueden otorgar a los usuarios acceso a la vista autorizada sin otorgar acceso simultáneo a los datos subyacentes. El conjunto de datos de origen y el de vista autorizada deben estar en la misma ubicación regional.

Para crear un conjunto de datos que almacene tu vista, elige una de las siguientes opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, selecciona el proyecto en el que deseas crear el conjunto de datos.

  3. Expande la opción Ver acciones y haz clic en Crear conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

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

    2. En Tipo de ubicación, verifica que esté seleccionada la opción Multirregión.

    3. En Multirregión, elige EE.UU. o UE. Todos los recursos que creas en este instructivo deben estar en la misma ubicación multirregión.

    4. Haz clic en Crear conjunto de datos.

SQL

Usa la declaración DDL CREATE SCHEMA:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ve a BigQuery Studio

  2. En el editor de consultas, escribe la siguiente sentencia:

    CREATE SCHEMA shared_views;

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Create a separate dataset to store your view
Dataset sharedDataset = bigquery.create(DatasetInfo.of(sharedDatasetId));

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

shared_dataset_id = "shared_views"
shared_dataset_id_full = "{}.{}".format(client.project, shared_dataset_id)


shared_dataset = bigquery.Dataset(shared_dataset_id_full)
shared_dataset.location = "US"
shared_dataset = client.create_dataset(shared_dataset)  # API request

Crea la vista autorizada 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 con una consulta de SQL que excluye las columnas que no deseas que vean los analistas de datos.

La tabla de origen github_contributors contiene dos campos de tipo RECORD: author y committer. Para este instructivo, tu vista autorizada excluye todos los datos del autor, excepto su nombre, y todos los datos del confirmador, excepto su nombre.

Para crear la vista en el conjunto de datos nuevo, elige una de las siguientes opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ingresa la siguiente consulta.

    SELECT
    commit,
    author.name AS author,
    committer.name AS committer,
    repo_name
    FROM
    `PROJECT_ID.github_source_data.github_contributors`;

    Reemplaza PROJECT_ID con el ID del proyecto.

  3. Haz clic en Guardar > Guardar vista.

  4. En el cuadro de diálogo Guardar vista, haz lo siguiente:

    1. Para Proyecto, verifica que tu proyecto esté seleccionado.

    2. En Conjunto de datos, ingresa shared_views.

    3. En Tabla, ingresa github_analyst_view.

    4. Haz clic en Guardar.

SQL

Usa la declaración DDL CREATE VIEW:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ve a BigQuery Studio

  2. En el editor de consultas, escribe la siguiente sentencia:

    CREATE VIEW shared_views.github_analyst_view
    AS (
      SELECT
        commit,
        author.name AS author,
        committer.name AS committer,
        repo_name
      FROM
        `PROJECT_ID.github_source_data.github_contributors`
    );

    Reemplaza PROJECT_ID con el ID del proyecto.

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Create the view in the new dataset
String viewQuery =
    String.format(
        "SELECT commit, author.name as author, committer.name as committer, repo_name FROM %s.%s.%s",
        projectId, sourceDatasetId, sourceTableId);

ViewDefinition viewDefinition = ViewDefinition.of(viewQuery);

Table view =
    bigquery.create(TableInfo.of(TableId.of(sharedDatasetId, sharedViewId), viewDefinition));

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

Otorga permiso a tus analistas de datos para ejecutar trabajos de consulta

Para consultar la vista, los analistas de datos necesitan el permiso bigquery.jobs.create para poder ejecutar trabajos de consulta. El rol de bigquery.studioUser incluye el permiso bigquery.jobs.create. El rol bigquery.studioUser no otorga a los usuarios permiso para ver ni consultar la vista autorizada. En un paso posterior, otorgas permiso a los analistas de datos para acceder a la vista.

Para asignar el grupo de analistas de datos al rol bigquery.studioUser a nivel del proyecto, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página IAM.

    Ir a IAM

  2. Asegúrate de que tu proyecto esté seleccionado en el selector de proyectos.

  3. Haz clic en Otorgar acceso.

  4. En el diálogo Otorgar acceso a, haz lo siguiente:

    1. En el campo Principales nuevos, ingresa el grupo que contiene a tus analistas de datos. Por ejemplo, data_analysts@example.com

    2. En el campo Seleccionar una función, busca el rol Usuario de BigQuery Studio y selecciónalo.

    3. Haz clic en Guardar.

Otorga permiso a tus analistas de datos para consultar la vista autorizada

Para que los analistas de datos consulten la vista, se les debe otorgar el rol bigquery.dataViewer a nivel del conjunto de datos o de la vista. Si otorgas este rol a nivel del conjunto de datos, tus analistas tendrán acceso a todas las tablas y vistas del conjunto de datos. Debido a que el conjunto de datos creado en este instructivo contiene una sola vista autorizada, otorgas acceso a nivel del conjunto de datos. Si tienes una colección de vistas autorizadas a las que necesitas otorgar acceso, considera usar un conjunto de datos autorizado.

El rol bigquery.studioUser que otorgaste a tus analistas de datos anteriormente les otorga los permisos necesarios para crear trabajos de consulta. Sin embargo, no pueden consultar la vista de forma correcta, a menos que también tengan acceso bigquery.dataViewer a la vista autorizada o al conjunto de datos que contiene la vista.

Para otorgar a los analistas de datos el acceso bigquery.dataViewer al conjunto de datos que contiene la vista autorizada, haz lo siguiente:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, selecciona el conjunto de datos shared_views.

  3. Haz clic en Compartir > Permisos.

  4. En el panel Compartir permisos, haz clic en Agregar principal.

  5. En Principales nuevos, ingresa el grupo que contiene a tus analistas de datos, por ejemplo, data_analysts@example.com.

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

  7. Haz clic en Guardar.

  8. Haz clic en Cerrar.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Assign access controls to the dataset containing the view
List<Acl> viewAcl = new ArrayList<>(sharedDataset.getAcl());
viewAcl.add(Acl.of(new Acl.Group("example-analyst-group@google.com"), Acl.Role.READER));
sharedDataset.toBuilder().setAcl(viewAcl).build().update();

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

# 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

Después de crear controles de acceso para el conjunto de datos que contiene la vista autorizada, otorgas acceso a la vista autorizada al conjunto de datos fuente. Esta autorización le otorga a la vista, pero no al grupo de analistas de datos, acceso a los datos de origen.

Para otorgar acceso a los datos fuente a la vista autorizada, elige una de estas opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, selecciona el conjunto de datos github_source_data.

  3. Haz clic en Compartir > Autorizar vistas.

  4. En el panel Vistas autorizadas, en Vista autorizada, ingresa PROJECT_ID.shared_views.github_analyst_view.

    Reemplaza PROJECT_ID con el ID del proyecto.

  5. Haz clic en Agregar autorización.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Authorize the view to access the source dataset
List<Acl> srcAcl = new ArrayList<>(sourceDataset.getAcl());
srcAcl.add(Acl.of(new Acl.View(view.getTableId())));
sourceDataset.toBuilder().setAcl(srcAcl).build().update();

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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 de tu grupo de analistas de datos (por ejemplo, data_analysts) puede realizar una consulta en la vista para verificar la configuración.

Para verificar la configuración, un analista de datos debe ejecutar la siguiente consulta:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ingresa la siguiente sentencia:

    SELECT
      *
    FROM
      `PROJECT_ID.shared_views.github_analyst_view`;

    Reemplaza PROJECT_ID con el ID del proyecto.

  3. Haz clic en Ejecutar.

Los resultados de la consulta son similares a los siguientes. Solo se muestran el nombre del autor y el del remitente en los resultados.

Los resultados de la consulta después de consultar la vista autorizada

Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

Código fuente completo

Aquí se muestra el código fuente completo del instructivo a modo de referencia.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Create a source dataset to store your table.
Dataset sourceDataset = bigquery.create(DatasetInfo.of(sourceDatasetId));

// Populate a source table
String tableQuery =
    "SELECT commit, author, committer, repo_name"
        + " FROM `bigquery-public-data.github_repos.commits`"
        + " LIMIT 1000";
QueryJobConfiguration queryConfig =
    QueryJobConfiguration.newBuilder(tableQuery)
        .setDestinationTable(TableId.of(sourceDatasetId, sourceTableId))
        .build();
bigquery.query(queryConfig);

// Create a separate dataset to store your view
Dataset sharedDataset = bigquery.create(DatasetInfo.of(sharedDatasetId));

// Create the view in the new dataset
String viewQuery =
    String.format(
        "SELECT commit, author.name as author, committer.name as committer, repo_name FROM %s.%s.%s",
        projectId, sourceDatasetId, sourceTableId);

ViewDefinition viewDefinition = ViewDefinition.of(viewQuery);

Table view =
    bigquery.create(TableInfo.of(TableId.of(sharedDatasetId, sharedViewId), viewDefinition));

// Assign access controls to the dataset containing the view
List<Acl> viewAcl = new ArrayList<>(sharedDataset.getAcl());
viewAcl.add(Acl.of(new Acl.Group("example-analyst-group@google.com"), Acl.Role.READER));
sharedDataset.toBuilder().setAcl(viewAcl).build().update();

// Authorize the view to access the source dataset
List<Acl> srcAcl = new ArrayList<>(sourceDataset.getAcl());
srcAcl.add(Acl.of(new Acl.View(view.getTableId())));
sourceDataset.toBuilder().setAcl(srcAcl).build().update();

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

# Create a source dataset
from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = "github_source_data"
source_dataset_id_full = "{}.{}".format(client.project, source_dataset_id)


source_dataset = bigquery.Dataset(source_dataset_id_full)
# 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_id_full = "{}.{}".format(client.project, shared_dataset_id)


shared_dataset = bigquery.Dataset(shared_dataset_id_full)
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

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

Console

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Borra los recursos individuales

Como alternativa, para quitar los recursos individuales que se usan en este instructivo, haz lo siguiente:

  1. Borra la vista autorizada.

  2. Borra el conjunto de datos que contiene la vista autorizada.

  3. Borra la tabla en el conjunto de datos de origen.

  4. Borra el conjunto de datos de origen.

Como creaste los recursos que se usaron en este instructivo, no se requieren permisos adicionales para borrarlos.

¿Qué sigue?