Usa BigQuery con C#

Usa BigQuery con C#

Acerca de este codelab

subjectÚltima actualización: jun 26, 2023
account_circleEscrito por Mete Atamel

1. Descripción general

BigQuery es el almacén de datos de estadísticas de bajo costo, a escala de petabytes y completamente administrado de Google. BigQuery es NoOps, no se debe administrar ninguna infraestructura ni se necesita un administrador de base de datos, por lo que puedes enfocarte en el análisis de datos para encontrar estadísticas valiosas, usar el lenguaje SQL que conoces y aprovechar nuestro modelo de pago por uso.

En este codelab, usarás las bibliotecas cliente de Google Cloud para .NET a fin de consultar conjuntos de datos públicos de BigQuery con C#.

Qué aprenderás

  • Cómo usar Cloud Shell
  • Cómo habilitar la API de BigQuery
  • Cómo autenticar solicitudes a la API
  • Cómo instalar la biblioteca cliente de Google Cloud para C#
  • Cómo consultar las obras de Shakespeare
  • Cómo consultar el conjunto de datos de GitHub
  • Cómo ajustar el almacenamiento en caché y las estadísticas de visualización

Requisitos

  • Un proyecto de Google Cloud Platform
  • Un navegador como Chrome o Firefox
  • Conocimientos de C#

Encuesta

.

¿Cómo usarás este instructivo?

¿Cómo calificarías tu experiencia con C#?

¿Cómo calificarías tu experiencia en el uso de los servicios de Google Cloud Platform?

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto.
  • Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.

Inicia Cloud Shell

Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Activar Cloud Shell

  1. En la consola de Cloud, haz clic en Activar Cloud Shelld1264ca30785e435.png.

cb81e7c8e34bc8d.png

Si es la primera vez que inicias Cloud Shell, verás una pantalla intermedia que describe en qué consiste. Si apareció una pantalla intermedia, haz clic en Continuar.

d95252b003979716.png

El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.

7833d5e1c5d18f54.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo necesarias. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que mejora considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer con un navegador.

Una vez que te conectes a Cloud Shell, deberías ver que estás autenticado y que el proyecto está configurado con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list

Resultado del comando

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de gcloud conoce tu proyecto:
gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

De lo contrario, puedes configurarlo con el siguiente comando:

gcloud config set project <PROJECT_ID>

Resultado del comando

Updated property [core/project].

3. Habilite la API de BigQuery

La API de BigQuery debe estar habilitada de forma predeterminada en todos los proyectos de Google Cloud. Puedes verificar si esto es así con el siguiente comando en Cloud Shell: deberías aparecer en la lista de BigQuery:

gcloud services list

Deberías ver BigQuery en la lista:

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

Si la API de BigQuery no está habilitada, puedes usar el siguiente comando en Cloud Shell para habilitarla:

gcloud services enable bigquery-json.googleapis.com

4. Instala la biblioteca cliente de BigQuery para C#

Primero, crea una aplicación de consola de C# simple que usarás para ejecutar muestras de la API de BigQuery.

dotnet new console -n BigQueryDemo

Deberías ver que se creó la aplicación y que se resolvieron las dependencias:

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

Luego, navega a la carpeta BigQueryDemo:

cd BigQueryDemo

Además, agrega el paquete NuGet Google.Cloud.BigQuery.V2 al proyecto:

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'.

Ya tienes todo listo para usar la API de BigQuery.

5. Consultar las obras de Shakespeare

Un conjunto de datos públicos es un conjunto de datos que se almacena en BigQuery y está disponible para el público en general. Existen muchos otros conjuntos de datos públicos disponibles para que consultes, algunos también alojados por Google, pero muchos otros alojados por terceros. Puedes obtener más información en la página Conjuntos de datos públicos.

Además de los conjuntos de datos públicos, BigQuery proporciona una cantidad limitada de tablas de muestra que puedes consultar. Estas tablas se encuentran en bigquery-public-data:samples dataset. Una de esas tablas se llama shakespeare.. Contiene un índice de palabras de las obras de Shakespeare, que indica la cantidad de veces que cada palabra aparece en cada corpus.

En este paso, consultarás la tabla Shakespeare.

Primero, abre el editor de código desde la parte superior derecha de Cloud Shell:

fd3fc1303e63572.png

Navega al archivo Program.cs dentro de la carpeta BigQueryDemo y reemplaza el código por lo siguiente. Asegúrate de reemplazar projectId por tu ID del proyecto 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"]}");
           
}
       
}
   
}
}

Tómate uno o dos minutos para estudiar el código y ver cómo se consulta la tabla.

En Cloud Shell, ejecuta la app:

dotnet run

Deberías ver una lista de palabras y sus casos:

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

6. Consultar el conjunto de datos de GitHub

Para familiarizarte más con BigQuery, ahora realizarás una consulta en el conjunto de datos públicos de GitHub. Encontrarás los mensajes de confirmación más comunes en GitHub. También usarás la consola web de BigQuery para obtener una vista previa y ejecutar consultas ad hoc.

Para ver cómo se ven los datos, abre el conjunto de datos de GitHub en la IU web de BigQuery:

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

Para obtener una vista previa rápida del aspecto de los datos, usa el botón Vista previa:

f706bfe3dfcbd267.png

Navega al archivo Program.cs dentro de la carpeta BigQueryDemo y reemplaza el código por lo siguiente. Asegúrate de reemplazar projectId por tu ID del proyecto 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"]}");
           
}
       
}
   
}
}

Tómate uno o dos minutos para estudiar el código y ver cómo se consulta la tabla en busca de los mensajes de confirmación más comunes.

En Cloud Shell, ejecuta la app:

dotnet run

Deberías ver una lista de mensajes de confirmación y sus casos:

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. Almacenamiento en caché y estadísticas

Después de la consulta inicial, BigQuery almacena en caché los resultados. Como resultado, las consultas posteriores toman mucho menos tiempo. Es posible inhabilitar el almacenamiento en caché con las opciones de consulta. BigQuery también realiza un seguimiento de algunas estadísticas sobre las consultas, como la hora de creación, la hora de finalización y el total de bytes procesados.

En este paso, inhabilitarás el almacenamiento en caché y también mostrarás algunas estadísticas sobre las consultas.

Navega al archivo Program.cs dentro de la carpeta BigQueryDemo y reemplaza el código por lo siguiente. Asegúrate de reemplazar projectId por tu ID del proyecto 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}");
       
}
   
}
}

Algunos aspectos que debes tener en cuenta sobre el código. Primero, se inhabilita el almacenamiento en caché con la introducción de opciones de consulta y la configuración de UseQueryCache como falso. Segundo, accediste a las estadísticas sobre la consulta desde el objeto de trabajo.

En Cloud Shell, ejecuta la app:

dotnet run

Como antes, deberías ver una lista de mensajes de confirmación y sus casos. Además, también deberías ver algunas estadísticas sobre la consulta al 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. Carga datos en BigQuery

Si deseas consultar tus propios datos, primero debes cargarlos en BigQuery. BigQuery admite la carga de datos desde muchas fuentes, como Google Cloud Storage y otros servicios de Google, una fuente legible. Incluso puedes transmitir tus datos con las inserciones de transmisión. Puedes obtener más información en la página Cómo cargar datos en BigQuery.

En este paso, cargarás a una tabla de BigQuery un archivo JSON almacenado en Google Cloud Storage. El archivo JSON se encuentra en gs://cloud-samples-data/bigquery/us-states/us-states.json.

Si te interesa el contenido del archivo JSON, puedes usar la herramienta de línea de comandos de gsutil para descargarlo en 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.

Puedes ver que contiene la lista de estados de EE.UU. y cada estado es un documento JSON en una línea separada:

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

Para cargar este archivo JSON en BigQuery, navega al archivo Program.cs dentro de la carpeta BigQueryDemo y reemplaza el código por lo siguiente. Asegúrate de reemplazar projectId por tu ID del proyecto 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");
       
}
   
}
}

Dedica unos minutos a estudiar cómo el código carga el archivo JSON y crea una tabla con un esquema en un conjunto de datos.

En Cloud Shell, ejecuta la app:

dotnet run

Se crean un conjunto de datos y una tabla en BigQuery.

Json file loaded to BigQuery

Para verificar que el conjunto de datos se creó realmente, puedes ir a la consola de BigQuery. Deberías ver un nuevo conjunto de datos y una tabla creada. Si cambias a la pestaña de vista previa de la tabla, podrás ver los datos reales:

7d9f7c493acbbf9a.png

9. ¡Felicitaciones!

Aprendiste a usar BigQuery con C#.

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos de esta guía de inicio rápido:

  • Ve a la consola de Google Cloud.
  • Selecciona el proyecto que deseas cerrar y haz clic en “Borrar”. en la parte superior: esta opción programa la eliminación del proyecto.

Más información

Licencia

Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.