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.

Objetivos

  • Crea un conjunto de datos que contenga los datos de origen.
  • Ejecuta una consulta para cargar datos en una tabla de destino del 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 pueden ver tus analistas de datos en los resultados de la consulta.
  • Concede permiso a tus analistas de datos para ejecutar trabajos de consulta.
  • Concede a tus analistas de datos acceso al conjunto de datos que contiene la vista autorizada.
  • Concede a la vista autorizada acceso al conjunto de datos de origen.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. Asegúrate de que tienes los permisos necesarios para realizar las tareas descritas en este documento.
  7. Crear 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 Explorador, junto al proyecto en el que quieras 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, 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, expande github_source_data y, a continuación, haz clic en github_contributors.

    10. 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 Explorador, selecciona el proyecto en el que quieras crear el conjunto de datos.

    3. Abre 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, 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, asigna el rol bigquery.user a tus 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, ve a la página Gestión de identidades y accesos. Google Cloud

      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 Explorador, selecciona el conjunto de datos shared_views para abrir la pestaña Detalles.

    3. Haz clic en Compartir > Permisos.

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

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

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

    7. Haz clic en Guardar.

    8. 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 Explorador, selecciona el conjunto de datos github_source_data para abrir la pestaña Detalles.

    3. Haz clic en Compartir > Autorizar vistas.

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

      Sustituye PROJECT_ID por el ID del proyecto.

    5. 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

    Limpieza

    Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

    Eliminar el proyecto

    Consola

    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

    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.

    Eliminar recursos concretos

    Si quieres eliminar los recursos utilizados en este tutorial, sigue estos pasos:

    1. Elimina la vista autorizada.

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

    3. Elimine la tabla del conjunto de datos de origen.

    4. Elimine el conjunto de datos de origen.

    Como has creado los recursos utilizados en este tutorial, no se necesitan permisos adicionales para eliminarlos.

    Siguientes pasos