sábado, 27 de abril de 2024

GCP: Google Cloud BigQuery

BigQuery,a groso modo, es:

  • Un almacén de datos empresariales.
  • Una plataforma de análisis de datos altamente escalable que ofrece una amplia gama de operaciones para ayudarte a analizar y procesar grandes conjuntos de datos de manera eficiente.

Algunas operaciones que se puede realizar con BigQuery:

  1. Consulta de datos: Puedes ejecutar consultas SQL complejas para extraer datos de tus conjuntos de datos y realizar análisis avanzados.
  2. Análisis de datos en tiempo real: BigQuery admite consultas en tiempo real sobre datos de streaming, lo que te permite analizar y visualizar datos en tiempo real a medida que llegan.
  3. Análisis geoespacial: BigQuery incluye funciones y operaciones para realizar análisis geoespaciales, como cálculos de distancia, intersecciones espaciales y agrupaciones geográficas.
  4. Operaciones de agregación: Puedes realizar operaciones de agregación como SUM, AVG, COUNT, MAX y MIN en tus datos para resumir la información y obtener insights.
  5. Procesamiento de texto: BigQuery proporciona funciones y operadores para procesar datos de texto, como búsquedas de patrones, análisis de sentimientos y extracción de entidades.
  6. Integración con herramientas de análisis y visualización: Puedes integrar BigQuery con herramientas de análisis y visualización de datos populares como Google Data Studio, Tableau y Power BI para crear paneles interactivos y visualizaciones de datos.
  7. Machine Learning: BigQuery ML te permite construir y entrenar modelos de aprendizaje automático directamente en tus datos almacenados en BigQuery, sin necesidad de moverlos a otro lugar.
  8. Carga y exportación de datos: Puedes cargar datos en BigQuery desde archivos locales, Google Cloud Storage, servicios de streaming como Pub/Sub y otras fuentes de datos. También puedes exportar datos desde BigQuery a diferentes formatos de archivo y servicios de almacenamiento.
  9. Seguridad y control de acceso: BigQuery ofrece controles de acceso granulares y opciones de cifrado para proteger tus datos y garantizar la conformidad con las normativas de privacidad.
  10. Administración y monitoreo: BigQuery proporciona herramientas para administrar y monitorear tus recursos, consultas y cargas de trabajo, como el tablero de control de BigQuery y Cloud Monitoring.

Ejemplo de procesamiento de texto con BigQuery:

SELECT word, COUNT(*) AS word_count
FROM (
  SELECT SPLIT(LOWER(descripcion), ' ') AS words
  FROM `tu_proyecto.tu_dataset.tu_tabla`
), UNNEST(words) AS word
WHERE LENGTH(word) > 3 -- Considera solo palabras de al menos 4 caracteres
GROUP BY word
ORDER BY word_count DESC
LIMIT 10; -- Limita los resultados a las 10 palabras más comunes

Suponiendo que tenemos una tabla en BigQuery que contiene un campo de texto llamado ``descripcion``. Queremos realizar un análisis básico del texto para contar las palabras más comunes en esa descripción.

Ejemplo de conexión y verificación con BigQuery:

BigQueryConnectionVerification.java

package com.codemonkey.main;
/**
* @uthor Codemonkey Junior
*
*/

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;

public class BigQueryConnectionVerification {
    
    public static void main(String[] args) {
        try {
            // Intenta crear una instancia de BigQuery
            BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
            
            // Si no se produce ninguna excepción, la conexión se ha establecido correctamente
            System.out.println("La conexión a BigQuery se ha establecido correctamente.");
        } catch (Exception e) {
            // Si se produce una excepción, muestra un mensaje de error
            System.out.println("Error al verificar la conexión a BigQuery: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

BigQuery y Java

Para esto debemos utilizar la biblioteca oficial de BigQuery para Java.

Ejemplo de consulta con Java y BigQuery.

BigQueryWordCount.java

package com.codemonkey.main;
/**
* @uthor Codemonkey Junior
*
*/

import com.google.cloud.bigquery.*;

public class BigQueryWordCount {


    public static void main(String[] args) {
        // Crea una instancia de BigQuery
        BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

        // Define la consulta SQL
        String query = 
            "SELECT word, COUNT(*) AS word_count " +
            "FROM ( " +
            "  SELECT SPLIT(LOWER(descripcion), ' ') AS words " +
            "  FROM `tu_proyecto.tu_dataset.tu_tabla` " +
            "), UNNEST(words) AS word " +
            "WHERE LENGTH(word) > 3 " +
            "GROUP BY word " +
            "ORDER BY word_count DESC " +
            "LIMIT 10";

        // Ejecuta la consulta
        try {
            QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();
            TableResult result = bigquery.query(queryConfig);

            // Imprime los resultados
            System.out.println("Palabra\t\tConteo");
            for (FieldValueList row : result.iterateAll()) {
                String word = row.get("word").getStringValue();
                long wordCount = row.get("word_count").getLongValue();
                System.out.printf("%s\t\t%d%n", word, wordCount);
            }
        } catch (BigQueryException e) {
            System.out.println("Error al ejecutar la consulta: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

En este código, primero creamos una instancia de BigQuery. Luego, definimos la consulta SQL y la ejecutamos utilizando bigquery.query(). Iteramos sobre los resultados y los imprimimos en la consola. Asegúrate de reemplazar "tu_proyecto.tu_dataset.tu_tabla" con el nombre de tu proyecto, conjunto de datos y tabla reales en BigQuery.

BigQuery se ha convertido en una herramienta muy usada en la actualidad. El sitio oficial cuenta con algunos ejemplos para poder aprender y usarlo en nuestros proyectos:

SimpleApp.java

package com.codemonkey.main;
/**
* @uthor Codemonkey Junior
*
*/

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FieldValueList;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import java.util.UUID;

public class SimpleApp {

  public static void main(String... args) throws Exception {
    BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    QueryJobConfiguration queryConfig =
        QueryJobConfiguration.newBuilder(
                "SELECT CONCAT('https://stackoverflow.com/questions/', "
                    + "CAST(id as STRING)) as url, view_count "
                    + "FROM `bigquery-public-data.stackoverflow.posts_questions` "
                    + "WHERE tags like '%google-bigquery%' "
                    + "ORDER BY view_count DESC "
                    + "LIMIT 10")
            // Use standard SQL syntax for queries.
            // See: https://cloud.google.com/bigquery/sql-reference/
            .setUseLegacySql(false)
            .build();

    // Create a job ID so that we can safely retry.
    JobId jobId = JobId.of(UUID.randomUUID().toString());
    Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());

    // Wait for the query to complete.
    queryJob = queryJob.waitFor();

    // Check for errors
    if (queryJob == null) {
      throw new RuntimeException("Job no longer exists");
    } else if (queryJob.getStatus().getError() != null) {
      // You can also look at queryJob.getStatus().getExecutionErrors() for all
      // errors, not just the latest one.
      throw new RuntimeException(queryJob.getStatus().getError().toString());
    }

    // Get the results.
    TableResult result = queryJob.getQueryResults();

    // Print all pages of the results.
    for (FieldValueList row : result.iterateAll()) {
      // String type
      String url = row.get("url").getStringValue();
      String viewCount = row.get("view_count").getStringValue();
      System.out.printf("%s : %s views\n", url, viewCount);
    }
  }
}

Más ejemplos en próximas entregas.

Enlaces:

https://cloud.google.com/bigquery

No hay comentarios:

Publicar un comentario

Vibe Coding (la programación vía IA): ¿el futuro de la programación?

Vibe Coding es un nuevo paradigma de programación, una nueva forma de crear código. Es un enfoque emergente en el desarrollo de sof...

Etiquetas

Archivo del blog