Crear una vista autorizada

En este tutorial, creará una vista autorizada en BigQuery que usarán sus analistas de datos. Las vistas autorizadas te permiten compartir resultados de consultas con usuarios y grupos concretos sin darles acceso a los datos de origen subyacentes. Se da acceso a la vista a los datos de origen en lugar de a un usuario o grupo. También puede usar la consulta SQL de la vista para excluir columnas y campos de los resultados de la consulta.

Otra opción para usar una vista autorizada sería configurar controles de acceso a nivel de columna en los datos de origen y, a continuación, dar 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 concreta.

Crea un conjunto de datos para almacenar los datos de origen

Empieza creando un conjunto de datos para almacenar los datos de origen.

Para crear el conjunto de datos de origen, elija una de las siguientes opciones:

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón destacado del panel Explorador.

    Si no ves el panel de la izquierda, haz clic en Ampliar panel de la izquierda para abrirlo.

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

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

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

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

    3. En Multirregión, elige EE. UU. o UE. Todos los recursos que crees en este tutorial deben estar en la misma ubicación multirregional.

    4. Haz clic en Crear conjunto de datos.

SQL

Usa la declaración de DDL CREATE SCHEMA:

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    CREATE SCHEMA github_source_data;

  3. Haz clic en Ejecutar.

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

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

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

Python

Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

from google.cloud import bigquery
from google.cloud.bigquery.enums import EntityTypes

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

Crear una tabla y cargar los datos de origen

Después de crear el conjunto de datos de origen, rellena una tabla guardando los resultados de una consulta SQL en una tabla de destino. La consulta recupera datos del conjunto de datos público de GitHub.

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

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

    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 la consulta.

  4. En Destino, selecciona Definir una tabla de destino para los resultados de las consultas.

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

    Sustituye PROJECT_ID por el ID del proyecto.

  6. En ID de tabla, introduce github_contributors.

  7. Haz clic en Guardar.

  8. Haz clic en Ejecutar.

  9. Cuando se complete la consulta, en el panel Explorador, haga clic en Conjuntos de datos y, a continuación, en el conjunto de datos github_source_data.

  10. Haga clic en Resumen > Tablas y, a continuación, en la tabla github_contributors.

  11. Para comprobar que los datos se han escrito en la tabla, haga clic en la pestaña Vista previa.

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de 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 Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de 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
"""
client.query_and_wait(
    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 and waits for query to finish

Crear un conjunto de datos para almacenar la vista autorizada

Después de crear el conjunto de datos de origen, crea otro conjunto de datos independiente para almacenar la vista autorizada que compartes con tus analistas de datos. En un paso posterior, concederás a la vista autorizada acceso a los datos del conjunto de datos de origen. De esta forma, tus analistas de datos tendrán acceso a la vista autorizada, pero no a los datos de origen.

Las vistas autorizadas deben crearse en un conjunto de datos diferente al de los datos de origen. De esta forma, los propietarios de los datos pueden dar acceso a los usuarios a la vista autorizada sin conceder acceso simultáneamente a los datos subyacentes. El conjunto de datos de origen y el conjunto de datos de la vista autorizada deben estar en la misma ubicación regional.

Para crear un conjunto de datos en el que almacenar la vista, elija una de las siguientes opciones:

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón destacado del panel Explorador.

  3. En el panel Explorador, selecciona el proyecto en el que quieras crear el conjunto de datos.

  4. Abre la opción Ver acciones y haz clic en Crear conjunto de datos.

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

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

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

    3. En Multirregión, elige EE. UU. o UE. Todos los recursos que crees en este tutorial deben estar en la misma ubicación multirregional.

    4. Haz clic en Crear conjunto de datos.

SQL

Usa la declaración de DDL CREATE SCHEMA:

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    CREATE SCHEMA shared_views;

  3. Haz clic en Ejecutar.

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

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

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

Python

Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de 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 nuevo conjunto de datos

En el nuevo conjunto de datos, crea la vista que quieras 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 quieres que vean los analistas de datos.

La tabla de origen github_contributors contiene dos campos de tipo RECORD: author y committer. En este tutorial, la vista autorizada excluye todos los datos del autor, excepto su nombre, y todos los datos del colaborador, excepto su nombre.

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

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

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

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

    Sustituye PROJECT_ID por el ID del proyecto.

  3. Haz clic en Guardar > Guardar vista.

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

    1. En Proyecto, comprueba que esté seleccionado el proyecto.

    2. En Conjunto de datos, introduce shared_views.

    3. En Tabla, escribe github_analyst_view.

    4. Haz clic en Guardar.

SQL

Usa la declaración de DDL CREATE VIEW:

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    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`
    );

    Sustituye PROJECT_ID por el ID del proyecto.

  3. Haz clic en Ejecutar.

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

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de 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 Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de 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

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

Para consultar la vista, tus analistas de datos necesitan el permiso bigquery.jobs.create para poder ejecutar trabajos de consulta y deben tener acceso a la vista. En esta sección, asignará el rol bigquery.user a sus analistas de datos. El rol bigquery.user incluye el permiso bigquery.jobs.create. En un paso posterior, concederá permiso a sus analistas de datos para acceder a la vista.

Para asignar el grupo de analistas de datos al rol bigquery.user a nivel de proyecto, siga estos pasos:

  1. En la consola de Google Cloud , ve a la página Gestión de identidades y accesos.

    Ir a IAM

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

  3. Haz clic en Conceder acceso.

  4. En el cuadro de diálogo Conceder acceso a, haz lo siguiente:

    1. En el campo Nuevos principales, introduce el grupo que contiene a tus analistas de datos. Por ejemplo, data_analysts@example.com.

    2. En el campo Selecciona un rol, busca el rol Usuario de BigQuery y selecciónalo.

    3. Haz clic en Guardar.

Conceder permiso a los analistas de datos para consultar la vista autorizada

Para que tus analistas de datos puedan consultar la vista, deben tener el rol bigquery.dataViewer a nivel de conjunto de datos o de vista. Si asignas este rol a nivel de conjunto de datos, tus analistas tendrán acceso a todas las tablas y vistas del conjunto de datos. Como el conjunto de datos creado en este tutorial contiene una sola vista autorizada, estás concediendo acceso a nivel de conjunto de datos. Si tienes una colección de vistas autorizadas a las que necesitas conceder acceso, te recomendamos que uses un conjunto de datos autorizado.

El rol bigquery.user que concedió a sus analistas de datos anteriormente les da los permisos necesarios para crear trabajos de consulta. Sin embargo, no podrán consultar la vista correctamente a menos que también tengan acceso bigquery.dataViewer a la vista autorizada o al conjunto de datos que contiene la vista.

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

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón destacado del panel Explorador.

  3. En el panel Explorador, haga clic en Conjuntos de datos y, a continuación, seleccione el conjunto de datos shared_views para abrir la pestaña Detalles.

  4. Haz clic en Compartir > Permisos.

  5. En el panel Compartir permisos, haz clic en Añadir principal.

  6. En Nuevos principales, introduce el grupo que contiene a tus analistas de datos. Por ejemplo, data_analysts@example.com.

  7. Haz clic en Seleccionar un rol y selecciona BigQuery > Lector de datos de BigQuery.

  8. Haz clic en Guardar.

  9. Haz clic en Cerrar.

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de 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 Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

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

Autorizar la vista para acceder al conjunto de datos de origen

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

Para conceder a la vista autorizada acceso a los datos de origen, elija una de estas opciones:

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón destacado del panel Explorador.

  3. En el panel Explorador, haga clic en Conjuntos de datos y, a continuación, seleccione el conjunto de datos github_source_data para abrir la pestaña Detalles.

  4. Haz clic en Compartir > Autorizar vistas.

  5. En el panel Vistas autorizadas, en Vista autorizada, introduce PROJECT_ID.shared_views.github_analyst_view.

    Sustituye PROJECT_ID por el ID del proyecto.

  6. Haz clic en Añadir autorización.

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de 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 Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

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

Verificar la configuración

Cuando haya completado la configuración, un miembro de su grupo de analistas de datos (por ejemplo, data_analysts) podrá verificarla consultando la vista.

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

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    SELECT
      *
    FROM
      `PROJECT_ID.shared_views.github_analyst_view`;

    Sustituye PROJECT_ID por el ID del proyecto.

  3. Haz clic en Ejecutar.

Los resultados de la consulta son similares a los siguientes. En los resultados solo se muestran el nombre del autor y el nombre del responsable de la confirmación.

Resultados de la consulta después de consultar la vista autorizada

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

Código fuente completo

Aquí tienes el código fuente completo del tutorial para que lo consultes.

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de 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 Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

# Create a source dataset
from google.cloud import bigquery
from google.cloud.bigquery.enums import EntityTypes

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
"""
client.query_and_wait(
    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 and waits for 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", EntityTypes.GROUP_BY_EMAIL, 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, EntityTypes.VIEW, view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ["access_entries"]
)  # API request