Criar uma visualização autorizada

Neste tutorial, você vai criar uma visualização autorizada no BigQuery que será usada pelos seus analistas de dados. Com as visualizações autorizadas, é possível compartilhar resultados de consultas com usuários e grupos específicos sem conceder acesso aos dados de origem subjacentes. A visualização recebe acesso aos dados de origem em vez de um usuário ou grupo. Também é possível usar a consulta SQL da visualização para excluir colunas e campos dos resultados da consulta.

Uma abordagem alternativa ao uso de uma visualização autorizada seria configurar controles de acesso no nível da coluna nos dados de origem e, em seguida, dar aos usuários acesso a uma visualização que consulta os dados controlados por acesso. Para mais informações sobre controles de acesso no nível da coluna, consulte Introdução ao controle de acesso no nível da coluna.

Se você tiver várias visualizações autorizadas que acessam o mesmo conjunto de dados de origem, autorize o conjunto de dados que contém as visualizações em vez de autorizar uma visualização individual.

Criar um conjunto de dados para armazenar os dados de origem

Comece criando um conjunto de dados para armazenar os dados de origem.

Para criar o conjunto de dados de origem, escolha uma das seguintes opções:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel à esquerda, clique em Explorer:

    Botão destacado para o painel "Explorer".

    Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.

  3. No painel Explorer, ao lado do projeto em que você quer criar o conjunto de dados, clique em Ver ações > Criar conjunto de dados.

  4. Na página Criar conjunto de dados, faça o seguinte:

    1. Para o código do conjunto de dados, insira github_source_data.

    2. Em Tipo de local, verifique se Multirregional está selecionado.

    3. Em Multirregião, escolha EUA ou UE. Todos os recursos criados neste tutorial precisam estar no mesmo local multirregional.

    4. Clique em Criar conjunto de dados.

SQL

Use a instrução DDL CREATE SCHEMA.

  1. No console do Google Cloud , acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    CREATE SCHEMA github_source_data;

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

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

Python

Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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

Criar uma tabela e carregar os dados de origem

Depois de criar o conjunto de dados de origem, preencha uma tabela nele salvando os resultados de uma consulta SQL em uma tabela de destino. A consulta recupera dados do conjunto de dados público do GitHub.

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No Editor de consultas, insira a seguinte consulta:

    SELECT
      commit,
      author,
      committer,
      repo_name
    FROM
      `bigquery-public-data.github_repos.commits`
    LIMIT
      1000;
    
  3. Clique em Mais e selecione Configurações de consulta.

  4. Em Destino, selecione Definir uma tabela de destino para os resultados da consulta.

  5. Em Conjunto de dados, insira PROJECT_ID.github_source_data.

    Substitua PROJECT_ID pela ID do seu projeto.

  6. Em ID da tabela, insira github_contributors.

  7. Clique em Save.

  8. Clique em Executar.

  9. Quando a consulta for concluída, no painel Explorador, clique em Conjuntos de dados e depois no conjunto github_source_data.

  10. Clique em Visão geral > Tabelas e depois na tabela github_contributors.

  11. Para verificar se os dados foram gravados na tabela, clique na guia Visualização.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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 testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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

Criar um conjunto de dados para armazenar sua visualização autorizada

Depois de criar o conjunto de dados de origem, crie um conjunto de dados novo e separado para armazenar a visualização autorizada que você compartilhará com seus analistas de dados. Em uma etapa posterior, você concederá à visualização autorizada acesso aos dados no conjunto de dados de origem. Os analistas de dados terão acesso à visualização autorizada, mas não terão acesso direto aos dados de origem.

As visualizações autorizadas precisam ser criadas em um conjunto de dados diferente dos dados de origem. Dessa forma, os proprietários dos dados podem conceder aos usuários acesso à visualização autorizada sem conceder acesso simultaneamente aos dados subjacentes. O conjunto de dados de dados de origem e o conjunto de dados de visualização autorizados precisam estar no mesmo local regional.

Para criar um conjunto de dados e armazenar sua visualização, escolha uma das seguintes opções:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel à esquerda, clique em Explorer:

    Botão destacado para o painel "Explorer".

  3. No painel Explorador, selecione o projeto em que você quer criar o conjunto de dados.

  4. Expanda a opção Ver ações e clique em Criar conjunto de dados.

  5. Na página Criar conjunto de dados, faça o seguinte:

    1. Para o código do conjunto de dados, insira shared_views.

    2. Em Tipo de local, verifique se Multirregional está selecionado.

    3. Em Multirregião, escolha EUA ou UE. Todos os recursos criados neste tutorial precisam estar no mesmo local multirregional.

    4. Clique em Criar conjunto de dados.

SQL

Use a instrução DDL CREATE SCHEMA.

  1. No console do Google Cloud , acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    CREATE SCHEMA shared_views;

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

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

Python

Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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

Criar a visualização autorizada no novo conjunto de dados

No novo conjunto de dados, crie a visualização que pretende autorizar. É a visualização que você compartilha com seus analistas de dados. Ela é criada com uma consulta SQL que exclui as colunas que você não quer que os analistas de dados vejam.

A tabela de origem github_contributors contém dois campos do tipo RECORD: author e committer. Neste tutorial, sua visualização autorizada exclui todos os dados do autor, exceto o nome, e todos os dados do autor da confirmação, exceto o nome dele.

Para criar a visualização no novo conjunto de dados, escolha uma das seguintes opções:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, insira a seguinte consulta:

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

    Substitua PROJECT_ID pela ID do seu projeto.

  3. Clique em Salvar > Salvar visualização.

  4. Na caixa de diálogo Salvar visualização, faça o seguinte:

    1. Em Projeto, verifique se o projeto está selecionado.

    2. Em Conjunto de dados, insira shared_views.

    3. Em Tabela, insira github_analyst_view.

    4. Clique em Save.

SQL

Use a instrução DDL CREATE VIEW.

  1. No console do Google Cloud , acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    Substitua PROJECT_ID pela ID do seu projeto.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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 testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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 permissão aos analistas de dados para executar jobs de consulta

Para consultar a visualização, os analistas de dados precisam da permissão bigquery.jobs.create para executar jobs de consulta e acesso à visualização. Nesta seção, você concede a função bigquery.user aos seus analistas de dados. O papel bigquery.user inclui a permissão bigquery.jobs.create. Em uma etapa posterior, você concede aos analistas de dados permissão para acessar a visualização.

Para atribuir o grupo de analistas de dados ao papel bigquery.user para envolvidos no projeto, faça o seguinte:

  1. No console do Google Cloud , acesse a página IAM.

    Acessar IAM

  2. Verifique se o projeto está selecionado no seletor.

  3. Clique em Conceder acesso.

  4. Na caixa de diálogo Conceder acesso a, faça o seguinte:

    1. No campo Novos participantes, insira o grupo que contém seus analistas de dados. Por exemplo, data_analysts@example.com.

    2. No campo Selecionar um papel, procure e selecione o papel Usuário do BigQuery.

    3. Clique em Salvar.

Conceder permissão aos analistas de dados para consultar a visualização autorizada

Para que seus analistas de dados consultem a visualização, eles precisam receber o papel bigquery.dataViewer no nível do conjunto de dados ou da visualização. Ao conceder esse papel no nível do conjunto de dados, seus analistas têm acesso a todas as tabelas e visualizações no conjunto. Como o conjunto de dados criado neste tutorial contém uma única visualização autorizada, você está concedendo acesso no nível do conjunto de dados. Se você tiver uma coleção de visualizações autorizadas a que precisa conceder acesso, use um conjunto de dados autorizado.

O papel bigquery.user concedido aos analistas de dados anteriormente dá a eles as permissões necessárias para criar jobs de consulta. No entanto, eles não podem consultar a visualização a menos que também tenham acesso de bigquery.dataViewer a ela ou ao conjunto de dados que a contém.

Para conceder acesso bigquery.dataViewer ao conjunto de dados que contém a visualização autorizada para os analistas de dados, faça o seguinte:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel à esquerda, clique em Explorer:

    Botão destacado para o painel "Explorer".

  3. No painel Explorer, clique em Conjuntos de dados e selecione o conjunto shared_views para abrir a guia Detalhes.

  4. Clique em Compartilhamento > Permissões.

  5. No painel Permissões de compartilhamento, clique em Adicionar principal.

  6. Em Novos participantes, insira o grupo que contém seus analistas de dados. Por exemplo, data_analysts@example.com.

  7. Clique em Selecionar um papel e selecione BigQuery > Leitor de dados do BigQuery.

  8. Clique em Save.

  9. Clique em Fechar.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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 testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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 a visualização a acessar o conjunto de dados de origem

Depois de criar controles de acesso para o conjunto de dados que contém a visualização autorizada, conceda a ela acesso ao conjunto de dados de origem. Essa autorização concede à visualização, mas não ao grupo de analistas de dados, acesso aos dados de origem.

Para conceder à visualização autorizada acesso aos dados de origem, escolha uma destas opções:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel à esquerda, clique em Explorer:

    Botão destacado para o painel &quot;Explorer&quot;.

  3. No painel Explorer, clique em Conjuntos de dados e selecione o conjunto github_source_data para abrir a guia Detalhes.

  4. Clique em Compartilhamento > Autorizar visualizações.

  5. No painel Visualizações autorizadas, em Visualização autorizada, insira PROJECT_ID.shared_views.github_analyst_view.

    Substitua PROJECT_ID pela ID do seu projeto.

  6. Clique em Adicionar autorização.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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 testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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 a configuração

Quando a configuração estiver concluída, um membro do seu grupo de analistas de dados (por exemplo, data_analysts) poderá verificar a configuração consultando a visualização.

Para verificar a configuração, um analista de dados precisa executar a seguinte consulta:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    SELECT
      *
    FROM
      `PROJECT_ID.shared_views.github_analyst_view`;

    Substitua PROJECT_ID pela ID do seu projeto.

  3. Clique em Executar.

Os resultados da consulta são semelhantes aos mostrados a seguir. Apenas o nome do autor e do confirmador ficam visíveis nos resultados.

Os resultados da consulta após consultar a visualização autorizada

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

Código-fonte completo

Veja aqui o código-fonte completo do tutorial da sua referência.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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 testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação 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