Como usar o BigQuery com C#

1. Visão geral

O BigQuery é o data warehouse de análise de baixo custo, totalmente gerenciado e com escala em petabyte, desenvolvido pelo Google. O BigQuery é NoOps. Não há infraestrutura para gerenciar, e você não precisa de um administrador de banco de dados. Assim, é possível se concentrar na análise de dados para encontrar insights significativos, usar um SQL conhecido e aproveitar nosso modelo de pagamento por uso.

Neste codelab, você vai usar as bibliotecas de cliente do Google Cloud para .NET para consultar os conjuntos de dados públicos do BigQuery com C#.

O que você vai aprender

  • Como usar o Cloud Shell
  • Como ativar a API BigQuery
  • Como autenticar solicitações de API
  • Como instalar a biblioteca de cliente do Google Cloud para C#
  • Como consultar as obras de Shakespeare
  • Como consultar o conjunto de dados do GitHub
  • Como ajustar o armazenamento em cache e mostrar estatísticas

O que é necessário

  • Um projeto do Google Cloud Platform
  • Um navegador, como o Chrome ou o Firefox
  • Familiaridade com o uso de C#

Pesquisa

Como você vai usar este tutorial?

Apenas leitura Leitura e exercícios

Como você classificaria sua experiência com C#?

Iniciante Intermediário Proficiente

Como você classificaria sua experiência com o uso dos serviços do Google Cloud Platform?

Iniciante Intermediário Proficiente

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Inicie o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud Shelld1264ca30785e435.png.

cb81e7c8e34bc8d.png

Se esta for a primeira vez que você inicia o Cloud Shell, uma tela intermediária vai aparecer com a descrição dele. Se isso acontecer, clique em Continuar.

d95252b003979716.png

Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.

7833d5e1c5d18f54.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Neste codelab, quase todo o trabalho pode ser feito com um navegador.

Depois de se conectar ao Cloud Shell, você vai ver que sua conta já está autenticada e que o projeto está configurado com o ID do seu projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
gcloud auth list

Resposta ao comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Execute o comando a seguir no Cloud Shell para confirmar se o comando gcloud sabe sobre seu projeto:
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, configure-o usando este comando:

gcloud config set project <PROJECT_ID>

Resposta ao comando

Updated property [core/project].

3. Ative a API BigQuery

A API BigQuery deve estar ativada por padrão em todos os projetos do Google Cloud. Para verificar se isso é verdade, execute o seguinte comando no Cloud Shell: você precisa estar na lista do BigQuery:

gcloud services list

O BigQuery vai aparecer na lista:

NAME                              TITLE
bigquery-json.googleapis.com      BigQuery API
...

Se a API BigQuery não estiver ativada, use o seguinte comando no Cloud Shell para ativá-la:

gcloud services enable bigquery-json.googleapis.com

4. Instale a biblioteca de cliente do BigQuery para C#

Primeiro, crie um aplicativo de console C# simples que será usado para executar exemplos da API BigQuery.

dotnet new console -n BigQueryDemo

O aplicativo criado e as dependências resolvidas vão aparecer:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

Em seguida, navegue até a pasta BigQueryDemo:

cd BigQueryDemo

E adicione o pacote NuGet Google.Cloud.BigQuery.V2 ao projeto:

dotnet add package Google.Cloud.BigQuery.V2
info : Adding PackageReference for package 'Google.Cloud.BigQuery.V2' into project '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.
log  : Restoring packages for /home/atameldev/BigQueryDemo/BigQueryDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.BigQuery.V2' version '1.2.0' added to file '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.

Agora você já pode usar a API BigQuery.

5. Consultar as obras de Shakespeare

Um conjunto de dados público é qualquer conjunto de dados armazenado no BigQuery e disponibilizado para o público em geral. Há muitos outros conjuntos de dados públicos disponíveis para consulta, alguns deles também hospedados pelo Google, mas muitos outros hospedados por terceiros. Leia mais na página Conjuntos de dados públicos.

Além dos conjuntos de dados públicos, o BigQuery oferece um número limitado de tabelas de amostra que podem ser consultadas. Essas tabelas ficam no bigquery-public-data:samples dataset. Uma dessas tabelas se chama shakespeare. e contém um índice de palavras das obras de Shakespeare com o número de vezes que cada palavra aparece em cada acervo.

Nesta etapa, você vai consultar a tabela de Shakespeare.

Primeiro, abra o editor de código no canto superior direito do Cloud Shell:

fd3fc1303e63572.png

Navegue até o arquivo Program.cs na pasta BigQueryDemo e substitua o código pelo seguinte. Substitua projectId pelo ID do projeto:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "samples", "shakespeare");
            var sql = $"SELECT corpus AS title, COUNT(word) AS unique_words FROM {table} GROUP BY title ORDER BY unique_words DESC LIMIT 10";

            var results = client.ExecuteQuery(sql, parameters: null);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["title"]}: {row["unique_words"]}");
            }
        }
    }
}

Reserve um ou dois minutos para estudar o código e ver como a tabela está sendo consultada.

No Cloud Shell, execute o app:

dotnet run

Uma lista de palavras e suas ocorrências vai aparecer:

hamlet: 5318
kinghenryv: 5104
cymbeline: 4875
troilusandcressida: 4795
kinglear: 4784
kingrichardiii: 4713
2kinghenryvi: 4683
...

6. Consultar o conjunto de dados do GitHub

Para se familiarizar mais com o BigQuery, agora você vai emitir uma consulta no conjunto de dados público do GitHub. Você encontra as mensagens de commit mais comuns no GitHub. Você também vai usar o console da Web do BigQuery para visualizar e executar consultas ad hoc.

Para ver como os dados aparecem, abra o conjunto de dados do GitHub na interface da Web do BigQuery:

https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=github_repos&t=commits&page=table

Para ter uma prévia rápida da aparência dos dados, use o botão "Visualizar":

f706bfe3dfcbd267.png

Navegue até o arquivo Program.cs na pasta BigQueryDemo e substitua o código pelo seguinte. Substitua projectId pelo ID do projeto:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
            
            var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";

            var results = client.ExecuteQuery(sql, parameters: null);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
            }
        }
    }
}

Reserve um ou dois minutos para estudar o código e ver como a tabela está sendo consultada para as mensagens de commit mais comuns.

No Cloud Shell, execute o app:

dotnet run

Você vai ver uma lista de mensagens de commit e suas ocorrências:

Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863

7. Armazenamento em cache e estatísticas

Depois da consulta inicial, o BigQuery armazena os resultados em cache. Como resultado, as consultas subsequentes levam muito menos tempo. É possível desativar o armazenamento em cache com opções de consulta. O BigQuery também acompanha algumas estatísticas sobre as consultas, como hora de criação, hora de término e total de bytes processados.

Nesta etapa, você vai desativar o cache e mostrar algumas estatísticas sobre as consultas.

Navegue até o arquivo Program.cs na pasta BigQueryDemo e substitua o código pelo seguinte. Substitua projectId pelo ID do projeto:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
            
            var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";
            var queryOptions = new QueryOptions {
                UseQueryCache = false
            };

            var results = client.ExecuteQuery(sql, parameters: null, queryOptions: queryOptions);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
            }

            var job = client.GetJob(results.JobReference);
            var stats = job.Statistics;
            Console.WriteLine("----------");
            Console.WriteLine($"Creation time: {stats.CreationTime}");
            Console.WriteLine($"End time: {stats.EndTime}");
            Console.WriteLine($"Total bytes processed: {stats.TotalBytesProcessed}");
        }
    }
}

Alguns pontos importantes sobre o código: Primeiro, o armazenamento em cache é desativado com a introdução de opções de consulta e a definição de UseQueryCache como "false". Em segundo lugar, você acessou as estatísticas sobre a consulta no objeto de job.

No Cloud Shell, execute o app:

dotnet run

Como antes, você vai ver uma lista de mensagens de commit e suas ocorrências. Além disso, você também vai encontrar algumas estatísticas sobre a consulta no final.

Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863
----------
Creation time: 1533052057398
End time: 1533052066961
Total bytes processed: 9944197093

8. Como carregar dados no BigQuery

Se quiser consultar seus próprios dados, primeiro carregue-os no BigQuery. O BigQuery é compatível com o carregamento de dados de várias fontes, como o Google Cloud Storage, outros serviços do Google e uma fonte legível. Você pode até transmitir seus dados usando as inserções de streaming. Leia mais na página Como carregar dados no BigQuery.

Nesta etapa, você vai carregar um arquivo JSON armazenado no Google Cloud Storage em uma tabela do BigQuery. O arquivo JSON está localizado em gs://cloud-samples-data/bigquery/us-states/us-states.json

Se você quiser saber o conteúdo do arquivo JSON, use a ferramenta de linha de comando gsutil para fazer o download dele no Cloud Shell:

gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .
Copying gs://cloud-samples-data/bigquery/us-states/us-states.json...
/ [1 files][  2.0 KiB/  2.0 KiB]                                                
Operation completed over 1 objects/2.0 KiB.

Ele contém a lista de estados dos EUA, e cada estado é um documento JSON em uma linha separada:

less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr":  "AK"}
...

Para carregar esse arquivo JSON no BigQuery, navegue até o arquivo Program.cs na pasta BigQueryDemo e substitua o código pelo seguinte: Substitua projectId pelo ID do projeto:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var gcsUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
            var client = BigQueryClient.Create("projectId");
            var dataset = client.GetOrCreateDataset("us_states_dataset");

            var schema = new TableSchemaBuilder 
            {
                { "name", BigQueryDbType.String },
                { "post_abbr", BigQueryDbType.String }
            }.Build();

            var jobOptions = new CreateLoadJobOptions
            {
                SourceFormat = FileFormat.NewlineDelimitedJson
            };

            var table = dataset.GetTableReference("us_states_table");
            var loadJob = client.CreateLoadJob(gcsUri, table, schema, jobOptions);

            loadJob.PollUntilCompleted();
            loadJob.ThrowOnAnyError();
            Console.WriteLine("Json file loaded to BigQuery");
        }
    }
}

Estude por um ou dois minutos como o código carrega o arquivo JSON e cria uma tabela com um esquema em um conjunto de dados.

No Cloud Shell, execute o app:

dotnet run

Um conjunto de dados e uma tabela são criados no BigQuery

Json file loaded to BigQuery

Para verificar se o conjunto de dados foi criado, acesse o console do BigQuery. Um novo conjunto de dados e uma tabela serão criados. Se você mudar para a guia de visualização da tabela, poderá conferir os dados reais:

7d9f7c493acbbf9a.png

9. Parabéns!

Você aprendeu a usar o BigQuery com C#.

Limpar

Para evitar a cobrança na sua conta do Google Cloud Platform pelo uso de recursos neste guia de início rápido, siga estas etapas:

  • Acesse o Console do Cloud Platform.
  • Selecione o projeto que você quer encerrar e clique em "Excluir" na parte de cima. Isso programa a exclusão do projeto.

Saiba mais

Licença

Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.