domingo, 16 de junio de 2024

GCP: Funciones matemáticas , de cadena y tiempo en BigQuery

En esta ocasión veremos cómo usar algunas de las funciones propias de BigQuery. Tanto en consultas, bloques, stored procedures y nuestras propias funciones.

Veremos:

  • Funciones matemáticas: RAND, POW, COS, SIN, etc.
  • Funciones de cadena: FORMAT, REPLACE, TRIM, CHAR_LENGTH, CONCAT, etc.
  • Funciones de manejo del tiempo: CURRENT_TIME, TIME, EXTRACT, FORMAT_TIME, etc.

Para hacer uso de las funciones solo debemos hacer uso de SELECT seguido de la función que queremos emplear:

Funciones matemáticas:

-- Consultas matemáticas
SELECT RAND(); -- generará un número aleatorio de tipo FLOAT64

SELECT POW(3,2); -- 3 elevado a la 2da potencia

SELECT COS(3); -- Coseno de 3 

SELECT SIN(-2); -- Seno de -2 

Funciones de cadena:

-- Consultas de cadena

SELECT TRIM(" Este es un ejemplo de la función trim "); -- quitará los espacios de la cadena

SELECT CHAR_LENGTH("Ferrocarrilero");-- la longitud será de 14 caracteres

SELECT LOWER("ANITA LAVA LA TINA"); -- anita lava la tina

SELECT UPPER("una pequeña gacela"); -- UNA PEQUEÑA GACELA

SELECT REPLACE("Maria", 'i','y'); -- Marya

Funciones de tiempo:

-- Consultas de tiempo

SELECT CURRENT_TIME AS now; -- mostrará el tiempo actual

SELECT TIME(15,30,00) as hora; -- mostrará la hora en formato hh:mm:ss

Empecemos con los bloques en BigQuery:

BEGIN 
-- Código BigQuery
END;

Como se puede observar, es similar a como lo hacemos en PL/SQL de Oracle.

Ejemplo. Crear un bloque BigQuery que verifique el tamaño de una cadena y si es mayor a cero, que la muestre.

BEGIN 
  
  -- Declaramos una variable llamada nombre de tipo String
  DECLARE nombre STRING;

  -- Asignamos un valor a la variable nombre
  SET nombre = "MARIA";
   
  -- Obtenemos el tamaño de la cadena y verificamos que sea mayor a cero
  IF CHAR_LENGTH(nombre) > 0 THEN
     SELECT FORMAT('Hola %s',nombre);
  END IF;
   
END;

Ejemplo. Crear un bloque BigQuery en el que se calcule la potecia de un número elevado a otro número. Para eso usaremos la función ``POW``.

BEGIN

  DECLARE x FLOAT64;
  DECLARE y FLOAT64;

  SET x = 54;
  SET y = 32;

  IF y < 0 THEN
    SELECT "REVISAR DATOS";
  ELSE
    SELECT FORMAT('La potencia del no. %f elevado a %f nos da: %f', x,y, (SELECT POW(x,y)));
  END;
  

END;

Podríamos crear tanto stored como funciones que implementen esas funciones propias de BigQuery.

Ejemplo. Crear un stored procedure BigQuery que genere un número aleatorio y tenga como entrada un número flotante. Si ambos números so iguales, mostrar un mensaje de logrado. En caso contrario, pedir que se intente nuevamente.

CREATE OR REPLACE PROCEDURE `project.dataset.adivinaNumero`(numero FLOAT64)
BEGIN
  DECLARE aleatorio FLOAT64;
  -- Generamos número aleatorio
  SET aleatorio = (SELECT RAND());
    

  -- Verificamos si son iguales
  IF numero = aleatorio THEN
      SELECT FORMAT('%f, bien hecho', aleatorio);
  ELSE
     SELECT FORMAT('%f, intenta de nuevo', numero);
  END IF;

END;

Para invocar procedimeinto:

CALL `project.dataset.adivinaNumero`(0.53332);

En próximas entregas veremos más ejemplos.

Enlaces:

https://codemonkeyjunior.blogspot.com/2024/05/gcp-crear-stored-procedures-y-funciones.html

No hay comentarios:

Publicar un comentario