Como criar uma visualização autorizada

O BigQuery é um serviço de armazenamento de dados para análise em escala de petabyte. Ele é usado para executar consultas SQL em grandes volumes de dados, praticamente em tempo real.

A concessão de acesso de visualização a um conjunto de dados também é conhecida como criação de visualização autorizada no BigQuery. Uma visualização autorizada permite compartilhar resultados de consultas com determinados usuários e grupos sem que eles possam acessar as tabelas subjacentes. Você também pode usar a consulta SQL da visualização para restringir as colunas (campos) que os usuários podem consultar. Neste tutorial, você criará uma visualização autorizada.

Objetivos

Objetivos deste tutorial:

  • Criar conjuntos de dados e aplicar controles de acesso a eles.
  • Atribuir controles de acesso ao seu projeto.
  • Criar uma visualização autorizada que restrinja os dados que os usuários podem consultar.

Custos

O BigQuery é um produto pago. O uso dele para seguir este tutorial gera custos. Você tem 1 TB por mês grátis para fazer consultas no BigQuery. Para mais informações, consulte a página de preços.

Antes de começar

Antes de começar este tutorial, use o Console do Google Cloud Platform para criar ou selecionar um projeto e ativar o faturamento.

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  4. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto pré-existente, Ativar BigQuery API.

    Ativar a API

Introdução

Neste tutorial, você criará dois conjuntos de dados: um para os dados de origem e outro para a visualização autorizada. O conjunto de dados de origem será alimentado pelo conjunto de dados público do GitHub. Em seguida, você criará uma visualização que consulta uma tabela no conjunto de dados de origem.

Depois de criar seus conjuntos de dados e sua visualização, você atribui controles de acesso ao projeto, ao conjunto de dados que contém a visualização e ao conjunto de dados que contém os dados de origem.

A concessão de acesso de visualização a um conjunto de dados de origem também é conhecida como criação de visualização autorizada. Ao criar uma visualização autorizada, siga estes passos:

  • Criar um conjunto de dados separado para armazenar a visualização.
  • Criar a visualização no novo conjunto de dados.
  • Atribuir controles de acesso ao projeto.
  • Atribuir controles de acesso ao conjunto de dados que contém a visualização.
  • Autorizar a visualização a acessar o conjunto de dados de origem.

Criar um conjunto de dados de origem

Comece criando um conjunto de dados para armazenar os dados de origem. Neste tutorial, você preencherá uma tabela no conjunto de dados de origem consultando o conjunto de dados público do GitHub. Os dados contidos no conjunto mostram informações que não podem ser visualizadas pelos seus analistas. Você restringe o acesso aos dados usando uma visualização autorizada.

Para criar um conjunto de dados de origem:

Console

  1. Abra a IU da Web do BigQuery no Console do GCP.
    Acessar o Console do GCP

  2. No painel de navegação, na seção Recursos, selecione seu projeto e clique em Criar conjunto de dados.

  3. Em ID do conjunto de dados, insira github_source_data.

  4. Mantenha todas as outras configurações padrão e clique em Criar conjunto de dados.

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em 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 Python.

from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = 'github_source_data'

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

Depois de criar o conjunto de dados de origem, preencha uma tabela nele usando uma consulta SQL. Ela recupera dados do conjunto de dados público do GitHub.

Console

  1. Abra a IU da Web do BigQuery no Console do GCP.
    Acessar o Console do GCP

  2. Clique em Escrever nova consulta.

  3. Copie e cole a consulta a seguir na área de texto do Editor de consultas.

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

  5. Em Destino, marque a caixa em Definir uma tabela de destino para os resultados da consulta.

    • Em Nome do projeto, verifique se o projeto está selecionado.
    • Em Nome do conjunto de dados, verifique se github_source_data está selecionado.
    • Em Nome da tabela, insira github_contributors.
    • Clique em Salvar.

  6. Clique em Executar.

  7. Quando a consulta for concluída, clique em github_contributors e em Visualizar para confirmar se os dados foram gravados na tabela.

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em 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 Python.

source_table_id = 'github_contributors'
job_config = bigquery.QueryJobConfig()
job_config.destination = source_dataset.table(source_table_id)
sql = """
    SELECT commit, author, committer, repo_name
    FROM `bigquery-public-data.github_repos.commits`
    LIMIT 1000
"""
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish

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

Depois de criar seu conjunto de dados de origem, você criará um novo conjunto de dados para armazenar a visualização que será compartilhada com seus analistas de dados. Essa visualização terá acesso aos dados no conjunto de dados de origem. Os analistas de dados terão acesso à visualização, mas não aos dados de origem.

É necessário que a visualização seja criada em um conjunto de dados separado do conjunto de dados de origem consultado pela visualização. Como você pode atribuir controles de acesso apenas no nível do conjunto de dados, se a visualização for criada no mesmo conjunto de dados que os dados de origem, seus analistas de dados terão acesso tanto à visualização quanto aos dados.

Para criar um conjunto de dados e armazenar sua visualização:

Console

  1. Abra a IU da Web do BigQuery no Console do GCP.
    Acessar o Console do GCP

  2. No painel de navegação, na seção Recursos, selecione seu projeto e clique em Criar conjunto de dados.

  3. Em ID do conjunto de dados, insira shared_views.

  4. Mantenha todas as outras configurações padrão e clique em Criar conjunto de dados.

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em 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 Python.

shared_dataset_id = 'shared_views'
shared_dataset = bigquery.Dataset(client.dataset(shared_dataset_id))
shared_dataset.location = 'US'
shared_dataset = client.create_dataset(shared_dataset)  # API request

Criar a visualização 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.

Neste tutorial, sua visualização compartilhada exclui todas as informações do autor, exceto o nome, e todas as informações do autor da confirmação, exceto o nome dele.

Para criar a visualização no novo conjunto de dados:

Console

  1. Abra a IU da Web do BigQuery no Console do GCP.
    Acessar o Console do GCP

  2. Clique em Escrever nova consulta.

  3. Copie e cole a consulta a seguir na área de texto do Editor de consultas. Substitua project_id pelo ID do seu projeto.

    SELECT
      commit,
      author.name as author,
      committer.name as committer,
      repo_name
    FROM
      `project_id.github_source_data.github_contributors`
    
  4. Clique em Mais e selecione Configurações de consulta.

  5. Em Dialeto SQL, selecione Padrão. Clique em Salvar para atualizar as configurações de consulta.

  6. Clique em Salvar visualização.

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

    • Em Nome do projeto, verifique se o projeto está selecionado.
    • Em Nome do conjunto de dados, verifique se shared_views está selecionado.
    • Em Nome da tabela, insira github_analyst_view.
    • Clique em Salvar.

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em 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 Python.

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

Atribuir aos analistas de dados um papel do Cloud IAM para envolvidos no projeto

Para consultar a visualização, os analistas de dados precisam de permissão para executar jobs de consulta. O papel bigquery.user inclui permissões para executar jobs, incluindo consultas, dentro do projeto. Se você concede a um usuário ou grupo o papel bigquery.user para envolvidos no projeto, ele pode criar conjuntos de dados e executar jobs de consulta em tabelas nesses conjuntos de dados. O papel bigquery.user não dá permissão ao usuário para consultar dados, ver dados da tabela ou visualizar os detalhes do esquema da tabela para conjuntos de dados que não foram criados por ele.

Atribuir aos seus analistas de dados o papel bigquery.user para envolvidos no projeto não permite que eles visualizem ou consultem dados da tabela no conjunto de dados que contém as tabelas consultadas pela visualização. A maioria das pessoas (cientistas de dados, analistas de business intelligence, analistas de dados) em uma empresa deve ter o papel bigquery.user no nível do projeto.

Neste tutorial, os analistas de dados são um grupo chamado data_analysts@example.com. O nome desse grupo é meramente ilustrativo. Ao adicionar um grupo a um papel de IAM, o endereço de e-mail e o domínio têm que estar associados a uma Conta do Google ativa ou a uma conta do Google Apps.

Para atribuir ao grupo de analistas de dados o papel bigquery.user para envolvidos no projeto:

Console

  1. Abra a página do IAM no Console do Google Cloud Platform.

    Abrir a página do IAM

  2. Clique em Selecionar um projeto.

  3. Selecione o projeto e clique em Abrir.

  4. Na página do IAM, clique em Adicionar.

  5. Na caixa de diálogo Adicionar membros:

    • Em Membros, insira o nome do grupo: data_analysts@example.com.
    • Em Papéis, clique em Selecionar um papel e escolha BigQuery > Usuário do BigQuery.
    • Clique em Adicionar.

Atribuir controles de acesso ao conjunto de dados que contém a visualização

Para que os analistas de dados consultem a visualização, eles precisam receber o papel bigquery.dataViewer no conjunto de dados que contém a visualização. O papel bigquery.user concede aos analistas de dados 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 o acesso mínimo de bigquery.dataViewer ao conjunto de dados que contém a visualização.

Para conceder aos analistas de dados o acesso de bigquery.dataViewer ao conjunto de dados:

Console

  1. Na seção Recursos, selecione o conjunto de dados shared_views e clique em Compartilhar conjunto de dados.

  2. No painel de Permissões do conjunto de dados, clique em Adicionar membros.

  3. Digite data_analysts@example.com na caixa de texto Novos membros.

  4. Clique em Selecionar papel e selecione BigQuery > Visualizador de dados do BigQuery.

  5. Clique em Concluído.

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em 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 Python.

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

Autorizar a visualização a acessar o conjunto de dados de origem

Com os controles de acesso criados para o conjunto de dados que contém a visualização, você a adiciona como uma visualização autorizada no conjunto de dados de origem. Isso permite o acesso de visualização aos dados de origem, não ao grupo de analistas de dados.

Para autorizar que a visualização acesse os dados de origem:

Console

  1. Selecione o conjunto de dados github_source_data em Recursos e clique em Compartilhar conjunto de dados.

  2. No painel de Permissões do conjunto de dados, clique na guia Visualizações autorizadas.

  3. Em Compartilhar visualização autorizada:

    • Em Selecionar projeto, verifique se o projeto está selecionado.
    • Em Selecionar conjunto de dados, escolha shared_views.
    • Em Selecionar visualização, insira o nome da visualização: github_analyst_view.
    • Clique em OK.

  4. Clique em Adicionar e depois em Concluído.

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em 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 Python.

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

Verificar a configuração

Quando sua configuração estiver concluída, um membro do grupo data_analysts poderá verificar a configuração consultando a visualização.

Para verificar a configuração:

Console

  1. Peça a um membro do grupo data_analysts acessar a IU da Web do BigQuery no Console do GCP.
    Acessar o Console do GCP

  2. Clique em Escrever nova consulta.

  3. Copie e cole a consulta a seguir na área de texto do Editor de consultas.

    SELECT
      *
    FROM
      `shared_views.github_analyst_view`
    

Código-fonte completo

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

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em 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 Python.

# Create a source dataset
from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = 'github_source_data'

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

# Populate a source table
source_table_id = 'github_contributors'
job_config = bigquery.QueryJobConfig()
job_config.destination = source_dataset.table(source_table_id)
sql = """
    SELECT commit, author, committer, repo_name
    FROM `bigquery-public-data.github_repos.commits`
    LIMIT 1000
"""
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish

# Create a separate dataset to store your view
shared_dataset_id = 'shared_views'
shared_dataset = bigquery.Dataset(client.dataset(shared_dataset_id))
shared_dataset.location = 'US'
shared_dataset = client.create_dataset(shared_dataset)  # API request

# Create the view in the new dataset
shared_view_id = 'github_analyst_view'
view = bigquery.Table(shared_dataset.table(shared_view_id))
sql_template = """
    SELECT
        commit, author.name as author,
        committer.name as committer, repo_name
    FROM
        `{}.{}.{}`
"""
view.view_query = sql_template.format(
    client.project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

# Assign access controls to the dataset containing the view
# analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry('READER', 'groupByEmail', analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
    shared_dataset, ['access_entries'])  # API request

# Authorize the view to access the source dataset
access_entries = source_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry(None, 'view', view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ['access_entries'])  # API request

Limpeza

Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud Platform:

  1. No Console do GCP, acesse a página "Projetos".

    Acessar a página Projetos

  2. Na lista de projetos, selecione um e clique em Excluir projeto.
  3. Na caixa de diálogo, digite o código do projeto e clique em Encerrar para excluí-lo.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…