Como usar o BigQuery com C#

Como usar o BigQuery com C#

Sobre este codelab

subjectÚltimo jun. 26, 2023 atualizado
account_circleEscrito por Mete Atamel

1. Visão geral

O BigQuery é o data warehouse de análise de baixo custo, totalmente gerenciado e em escala de petabytes criado pelo Google para a análise de dados. O BigQuery é NoOps. Não há infraestrutura para gerenciar e você não precisa de um administrador de banco de dados. Assim, você pode 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 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 as estatísticas de exibição

O que é necessário

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

Pesquisa

Como você vai usar este tutorial?

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

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

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 você estiver iniciando o Cloud Shell pela primeira vez, verá uma tela intermediária com a descrição dele. Se aparecer uma tela intermediária, clique em Continuar.

d95252b003979716.png

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

7833d5e1c5d18f54.png

Essa máquina virtual tem 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. Grande parte do trabalho neste codelab, se não todo, pode ser feito em um navegador.

Depois de se conectar ao Cloud Shell, você verá sua autenticação e o projeto estará 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 seguinte comando no Cloud Shell para confirmar que 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 precisa estar ativada por padrão em todos os projetos do Google Cloud. É possível verificar se isso é verdade com o seguinte comando no Cloud Shell: Você está listado no BigQuery:

gcloud services list

Você verá o BigQuery listado:

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

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

gcloud services enable bigquery-json.googleapis.com

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

Primeiro, crie um aplicativo simples de console em C# que você usará para executar amostras da API BigQuery.

dotnet new console -n BigQueryDemo

Você verá o aplicativo criado e as dependências resolvidas:

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

Em seguida, navegue até a pasta BigQueryDemo:

cd BigQueryDemo

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ê está pronto para 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 fornece um número limitado de tabelas de amostra que você pode consultar. Essas tabelas estão contidas em bigquery-public-data:samples dataset. Uma dessas tabelas é chamada de shakespeare.. Ela 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 Shakespeare.

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

fd3fc1303e63572.png

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

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 alguns minutos para estudar o código e ver como a tabela está sendo consultada.

No Cloud Shell, execute o app:

dotnet run

Você verá uma lista de palavras e suas ocorrências:

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 com o BigQuery, agora você emitirá uma consulta no conjunto de dados público do GitHub (link em inglês). Você encontrará as mensagens de confirmação mais comuns no GitHub. Você também vai usar o console da Web do BigQuery para visualizar e executar consultas ad-hoc.

Para conferir a aparência dos dados, abra o conjunto de dados do GitHub na IU da Web do BigQuery:

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

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

f706bfe3dfcbd267.png

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

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 alguns minutos para estudar o código e ver como a tabela está sendo consultada em busca das mensagens de confirmação mais comuns.

No Cloud Shell, execute o app:

dotnet run

Você verá uma lista de mensagens de confirmação e as ocorrências delas:

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

Após a 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 monitora algumas estatísticas sobre as consultas, como horário de criação, horário de término e total de bytes processados.

Nesta etapa, você desativará o armazenamento em cache e também exibirá algumas estatísticas sobre as consultas.

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

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}");
       
}
   
}
}

Algumas observações sobre o código. Primeiro, o armazenamento em cache é desativado pela introdução de opções de consulta e pela definição de UseQueryCache como falso. Segundo, você acessou as estatísticas sobre a consulta do objeto do trabalho.

No Cloud Shell, execute o app:

dotnet run

Como antes, você verá uma lista de mensagens de confirmação e as ocorrências delas. Além disso, você deve ver 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 dados no BigQuery. O BigQuery oferece suporte ao carregamento de dados de várias fontes, como o Google Cloud Storage, outros serviços do Google, uma fonte legível. Você pode até mesmo transmitir seus dados usando as inserções por streaming. Saiba 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 quiser saber mais sobre o conteúdo do arquivo JSON, use a ferramenta de linha de comando gsutil para fazer o download 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 dentro da pasta BigQueryDemo e substitua o código pelo seguinte. Substitua projectId pelo ID do projeto real:

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");
       
}
   
}
}

Reserve alguns minutos para estudar 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 realmente criado, você pode acessar o console do BigQuery. Você verá um novo conjunto de dados e uma tabela criados. Se você alternar para a guia de visualização da tabela, vai ver os dados reais:

7d9f7c493acbbf9a.png

9. Parabéns!

Você aprendeu a usar o BigQuery usando 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 superior: 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.