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