sábado, 22 de junio de 2024

GCP: Recorrer consultas con FOR en BigQuery

(GCP) BigQuery posee un lenguaje propio similar al PL/SQL de Oracle. Con este lenguaje podemos realizar diversas operaciones con los datos de las tablas.

Desde simples consultas (SELECT), inserciones de datos (INSERT), actualizaciones (UPDATE) y hasta eliminar datos (DELETE). También operaciones de creación (CREATE) o truncado (TRUNCATE).

Además de contar con diversas funciones de cadena, tiempo, matemáticas, etc. que nos pueden servir para distintos fines.

SELECT "Hola, mundo en BigQuery!!";

-- Mismo mensaje usando la función FORMAT
SELECT ('%s', "Hola, mundo en BigQuery!!");

¿Qué podemos hacer con este lenguaje de BigQuery?

Podemos validar si un campo es nulo:

-- Recordar que cada bloque tiene un inicio y un fin
BEGIN
  -- Declaramos una variable de tipo INTEGER
  DECLARE resultado INT64;
  -- Seteamos el resultado de la consulta a la variable resultado
  SET resultado = (SELECT COUNT(campo) FROM `PROJECT.DATASET.Tabla`);
  -- Verificamos si el resultado es null
  IF resultado IS NULL THEN
     SELECT FORMAT('%s', 'El resultado es NULL');
  END IF;

END;

Podríamos recorrer el resultado de una consulta con un bucle FOR ... DO

BEGIN
   -- Declaramos las variables
   DECLARE fecha DATE;
   DECLARE resultado INT64;

   -- Seteamos fecha
   fecha = '2013-04-12';

   -- Recorremos resultado de consulta, similar al CURSOR de PL/SQL de Oracle
   FOR rowI IN(SELECT campo FROM `PROJECT.DATASET.TablaContable` WHERE fch = fecha)
    DO
  -- Seteamos el valor rescuperado en la variable resultado
  SET resultado = rowI[0];
  SELECT FORMAT('Recuperamos el valor: %d', resultado);
  -- Realizamos una actualización en otra tabla
  UPDATE `PROJECT.DATASET.TablaContableTemp` SET campo = resultado
  WHERE fch = fecha; 

END FOR;

END;

Recordar que es necesario que cada bloque empiece con la palabra BEGIN y termine con la palabra END con punto y coma. Misma regla aplica cuando uno crear un Stored Procedure.

-- Stored Procedure para actualizar tabla: TABLACONTABLETEMP
CREATE OR REPLACE PROCEDURE  `PROJECT.DATASET.ActualizaTablaContableTemp`(fecha DATE)
BEGIN
   -- Declaramos las variables
   DECLARE resultado INT64;

   -- Recorremos resultado de consulta, similar al CURSOR de PL/SQL de Oracle
   FOR row IN(SELECT campo FROM `PROJECT.DATASET.TablaContable` WHERE fch = fecha)
    DO
  -- Seteamosel valor rescuperado en la variable resultado
  SET resultado = row[0];
  SELECT FORMAT('Recuperamos el valor: %d', resultado);
  -- Realizamos una actualización en otra tabla
  UPDATE `PROJECT.DATASET.TablaContableTemp` SET campo = resultado
  WHERE fch = fecha; 

END FOR;

END;

Para invocarlo bastaría esta línea:

CALL`PROJECT.DATASET.ActualizaTablaContableTemp`('2013-04-12');

Más ejemplos en próximas entregas.

Enlaces:

https://codemonkeyjunior.blogspot.com/2024/06/gcp-funciones-matematicas-de-cadena-y.html

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