Creare una vista autorizzata

In questo tutorial, creerai una visualizzazione autorizzata in BigQuery che viene utilizzata dai tuoi analisti dei dati. Le viste autorizzate ti consentono di condividere i risultati di una query con utenti e gruppi specifici senza concedere loro l'accesso ai dati di origine sottostanti. La visualizzazione ha accesso ai dati di origine anziché a un utente o a un gruppo. Puoi anche utilizzare la query SQL della vista per escludere colonne e campi dai risultati della query.

Un approccio alternativo all'utilizzo di una vista autorizzata consiste nel configurare controlli dell'accesso a livello di colonna sui dati di origine e quindi concedere agli utenti l'accesso a una vista che esegue query sui dati con controllo dell'accesso. Per saperne di più sui controlli di accesso a livello di colonna, consulta Introduzione al controllo dell'accesso a livello di colonna.

Se hai più viste autorizzate che accedono allo stesso set di dati di origine, puoi autorizzare il set di dati che contiene le viste anziché autorizzare una singola vista.

Obiettivi

  • Crea un set di dati che contenga i dati di origine.
  • Esegui una query per caricare i dati in una tabella di destinazione nel set di dati di origine.
  • Crea un set di dati che contenga la vista autorizzata.
  • Crea una vista autorizzata da una query SQL che limita le colonne che gli analisti dei dati possono visualizzare nei risultati della query.
  • Concedi agli analisti dei dati l'autorizzazione a eseguire job di query.
  • Concedi agli analisti dei dati l'accesso al set di dati che contiene la visualizzazione autorizzata.
  • Concedi alla vista autorizzata l'accesso al set di dati di origine.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  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 role (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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .

  5. Abilita l'API BigQuery.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin), che include l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilitare l'API

  6. Assicurati di disporre delle autorizzazioni necessarie per eseguire le attività descritte in questo documento.

Crea un set di dati per archiviare i dati di origine

Inizia creando un set di dati per archiviare i dati di origine.

Per creare il set di dati di origine, scegli una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

    Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro a sinistra per aprirlo.

  3. Nel riquadro Explorer, accanto al progetto in cui vuoi creare il set di dati, fai clic su Visualizza azioni > Crea set di dati.

  4. Nella pagina Crea set di dati, segui questi passaggi:

    1. In ID set di dati, inserisci github_source_data.

    2. Per Tipo di località, verifica che sia selezionata l'opzione Più regioni.

    3. Per Multi-regione, scegli Stati Uniti o UE. Tutte le risorse che crei in questo tutorial devono trovarsi nella stessa località multiregionale.

    4. Fai clic su Crea set di dati.

SQL

Utilizza l'istruzione DDL CREATE SCHEMA:

  1. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    CREATE SCHEMA github_source_data;

  3. Fai clic su Esegui.

Per saperne di più su come eseguire le query, consulta Eseguire una query interattiva.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Python

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Crea una tabella e carica i dati di origine

Dopo aver creato il set di dati di origine, compila una tabella salvando i risultati di una query SQL in una tabella di destinazione. La query recupera i dati dal set di dati pubblico GitHub.

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente query:

    SELECT
      commit,
      author,
      committer,
      repo_name
    FROM
      `bigquery-public-data.github_repos.commits`
    LIMIT
      1000;
    
  3. Fai clic su Altro e seleziona Impostazioni query.

  4. In Destinazione, seleziona Imposta una tabella di destinazione per i risultati della query.

  5. In Set di dati, inserisci PROJECT_ID.github_source_data.

    Sostituisci PROJECT_ID con l'ID progetto.

  6. In ID tabella, inserisci github_contributors.

  7. Fai clic su Salva.

  8. Fai clic su Esegui.

  9. Al termine della query, nel riquadro Explorer, fai clic su Set di dati, quindi fai clic sul set di dati github_source_data.

  10. Fai clic su Panoramica > Tabelle e poi sulla tabella github_contributors.

  11. Per verificare che i dati siano stati scritti nella tabella, fai clic sulla scheda Anteprima.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Crea un set di dati per archiviare la vista autorizzata

Dopo aver creato il set di dati di origine, crea un nuovo set di dati separato per archiviare la vista autorizzata che condividi con i tuoi analisti dei dati. In un passaggio successivo, concedi alla vista autorizzata l'accesso in visualizzazione ai dati nel set di dati di origine. I tuoi analisti dei dati hanno quindi accesso alla vista autorizzata, ma non diretto ai dati di origine.

Le viste autorizzate devono essere create in un set di dati diverso da quello dei dati di origine. In questo modo, i proprietari dei dati possono concedere agli utenti l'accesso alla vista autorizzata senza concedere contemporaneamente l'accesso ai dati sottostanti. Il set di dati di origine e il set di dati della vista autorizzata devono trovarsi nella stessa posizione regionale.

Per creare un set di dati in cui archiviare la visualizzazione, scegli una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

  3. Nel riquadro Explorer, seleziona il progetto in cui vuoi creare il set di dati.

  4. Espandi l'opzione Visualizza azioni e fai clic su Crea set di dati.

  5. Nella pagina Crea set di dati, segui questi passaggi:

    1. In ID set di dati, inserisci shared_views.

    2. Per Tipo di località, verifica che sia selezionata l'opzione Più regioni.

    3. Per Multi-regione, scegli Stati Uniti o UE. Tutte le risorse che crei in questo tutorial devono trovarsi nella stessa località multiregionale.

    4. Fai clic su Crea set di dati.

SQL

Utilizza l'istruzione DDL CREATE SCHEMA:

  1. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    CREATE SCHEMA shared_views;

  3. Fai clic su Esegui.

Per saperne di più su come eseguire le query, consulta Eseguire una query interattiva.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Python

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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 autorizzata nel nuovo set di dati

Nel nuovo set di dati, crea la vista che intendi autorizzare. Questa è la visualizzazione che condividi con i tuoi analisti dei dati. Questa vista viene creata utilizzando una query SQL che esclude le colonne che non vuoi che gli analisti dei dati visualizzino.

La tabella di origine github_contributors contiene due campi di tipo RECORD: author e committer. Per questo tutorial, la vista autorizzata esclude tutti i dati dell'autore, ad eccezione del nome, e tutti i dati dell'autore del commit, ad eccezione del nome.

Per creare la vista nel nuovo set di dati, scegli una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente query.

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

    Sostituisci PROJECT_ID con l'ID progetto.

  3. Fai clic su Salva > Salva visualizzazione.

  4. Nella finestra di dialogo Salva visualizzazione, procedi nel seguente modo:

    1. Per Progetto, verifica che il progetto sia selezionato.

    2. In Set di dati, inserisci shared_views.

    3. In Tabella, inserisci github_analyst_view.

    4. Fai clic su Salva.

SQL

Utilizza l'istruzione DDL CREATE VIEW:

  1. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

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

    Sostituisci PROJECT_ID con l'ID progetto.

  3. Fai clic su Esegui.

Per saperne di più su come eseguire le query, consulta Eseguire una query interattiva.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Concedi agli analisti dei dati l'autorizzazione a eseguire job di query

Per eseguire query sulla vista, gli analisti dei dati devono disporre dell'autorizzazione bigquery.jobs.create per poter eseguire job di query e devono avere accesso alla vista. In questa sezione, assegni il ruolo bigquery.user ai tuoi analisti dei dati. Il ruolo bigquery.user include l'autorizzazione bigquery.jobs.create. In un passaggio successivo, concedi agli analisti dei dati l'autorizzazione ad accedere alla visualizzazione.

Per assegnare il gruppo di analisti dei dati al ruolo bigquery.user a livello di progetto:

  1. Nella console Google Cloud vai alla pagina IAM.

    Vai a IAM

  2. Assicurati che il progetto sia selezionato nel selettore dei progetti.

  3. Fai clic su Concedi l'accesso.

  4. Nella finestra di dialogo Concedi l'accesso a:

    1. Nel campo Nuove entità, inserisci il gruppo che contiene i tuoi analisti dei dati. Ad esempio, data_analysts@example.com.

    2. Nel campo Seleziona un ruolo, cerca il ruolo Utente BigQuery e selezionalo.

    3. Fai clic su Salva.

Concedi agli analisti di dati l'autorizzazione a eseguire query sulla visualizzazione autorizzata

Per consentire agli analisti di dati di eseguire query sulla vista, è necessario concedere il ruolo bigquery.dataViewer a livello di set di dati o di vista. Se concedi questo ruolo a livello di set di dati, gli analisti avranno accesso a tutte le tabelle e le visualizzazioni nel set di dati. Poiché il set di dati creato in questo tutorial contiene una sola visualizzazione autorizzata, concedi l'accesso a livello di set di dati. Se hai una raccolta di viste autorizzate a cui devi concedere l'accesso, valuta la possibilità di utilizzare un set di dati autorizzato.

Il ruolo bigquery.user che hai concesso in precedenza agli analisti di dati fornisce loro le autorizzazioni necessarie per creare job di query. Tuttavia, non possono eseguire query sulla visualizzazione correttamente a meno che non dispongano anche dell'accesso bigquery.dataViewer alla visualizzazione autorizzata o al set di dati che contiene la visualizzazione.

Per concedere ai tuoi analisti dei dati l'accesso al set di dati che contiene la visualizzazione autorizzata, procedi nel seguente modo:bigquery.dataViewer

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

  3. Nel riquadro Explorer, fai clic su Set di dati e seleziona il set di dati shared_views per aprire la scheda Dettagli.

  4. Fai clic su Condivisione > Autorizzazioni.

  5. Nel riquadro Autorizzazioni di condivisione, fai clic su Aggiungi entità.

  6. In Nuove entità, inserisci il gruppo che contiene i tuoi analisti dei dati, ad esempio data_analysts@example.com.

  7. Fai clic su Seleziona un ruolo e seleziona BigQuery > Visualizzatore dati BigQuery.

  8. Fai clic su Salva.

  9. Fai clic su Chiudi.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

# 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

Autorizzare la visualizzazione ad accedere al set di dati di origine

Dopo aver creato i controlli dell'accesso per il set di dati che contiene la vista autorizzata, concedi l'accesso alla vista autorizzata al set di dati di origine. Questa autorizzazione concede alla visualizzazione, ma non al gruppo di analisti di dati, l'accesso ai dati di origine.

Per concedere alla vista autorizzata l'accesso in visualizzazione ai dati di origine, scegli una di queste opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

  3. Nel riquadro Explorer, fai clic su Set di dati e seleziona il set di dati github_source_data per aprire la scheda Dettagli.

  4. Fai clic su Condivisione > Autorizza visualizzazioni.

  5. Nel riquadro Visualizzazioni autorizzate, in Visualizzazione autorizzata inserisci PROJECT_ID.shared_views.github_analyst_view.

    Sostituisci PROJECT_ID con l'ID progetto.

  6. Fai clic su Aggiungi autorizzazione.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

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

Verificare la configurazione

Una volta completata la configurazione, un membro del gruppo di analisti dei dati (ad esempio data_analysts) può verificarla eseguendo una query sulla vista.

Per verificare la configurazione, un analista dei dati deve eseguire la seguente query:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    SELECT
      *
    FROM
      `PROJECT_ID.shared_views.github_analyst_view`;

    Sostituisci PROJECT_ID con l'ID progetto.

  3. Fai clic su Esegui.

I risultati della query sono simili ai seguenti. Nei risultati sono visibili solo il nome dell'autore e il nome del committer.

I risultati della query dopo l&#39;interrogazione della vista autorizzata

Per saperne di più su come eseguire le query, consulta Eseguire una query interattiva.

Codice sorgente completo

Ecco il codice sorgente completo del tutorial per riferimento.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

# 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

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Console

  1. Nella console Google Cloud , vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

gcloud

    Elimina un progetto Google Cloud :

    gcloud projects delete PROJECT_ID

Elimina singole risorse

In alternativa, per rimuovere le singole risorse utilizzate in questo tutorial:

  1. Elimina la vista autorizzata.

  2. Elimina il set di dati che contiene la visualizzazione autorizzata.

  3. Elimina la tabella nel set di dati di origine.

  4. Elimina il set di dati di origine.

Poiché hai creato le risorse utilizzate in questo tutorial, non sono necessarie autorizzazioni aggiuntive per eliminarle.

Passaggi successivi