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