sábado, 2 de noviembre de 2024

GCP: funciones condicionales en BigQuery

 


El uso de funciones y sentencias condicionales es recurrente en el desarrollo de programas. Por ejemplo, para que el flujo se desvíe hacia cierto camino cuando así sea requerido. El lenguaje SQL que usa BigQuery no escapa de esa singularidad. 

Existen 6 sentencias o expresiones condicionales en BigQuery y éstas son:

  1. CASE expr.
  2. CASE.
  3. COALESCE.
  4. IF.
  5. IFNULL.
  6. NULLIF.

CASE expr

Compara la expresión dada con cada cláusula ``WHEN`` sucesiva y produce el primer resultado donde los valores son iguales.

Ejemplo:

DECLARE evaluacion STRING
SET evaluacion = 'sobresaliente';

SELECT CASE evaluacion  
       WHEN 'bueno' THEN 8
       WHEN 'excelente' THEN 9
       WHEN 'sobresaliente' THEN 10
       ELSE -1  as eval_result;

CASE

Evalúa la condición de cada cláusula ``WHEN`` sucesiva y produce el primer resultado donde la condición se evalúa como VERDADERO.

Ejemplo:

SELECT
  matematicas,
  historia,
  CASE
    WHEN matematicas > 9 THEN 'Sobresaliente'
    WHEN historia = 7 THEN 'Aceptable'
    ELSE 'Debes mejorar'
    END
    AS result_calf
FROM calificaciones

COALESCE

Produce el valor de la primera expresión no NULL, si la hay, de lo contrario es NULL.

Ejemplo:

SELECT COALESCE(NULL, 'Es un nulo', 'Es un valor no nulo') as resultado;

IF

Si una expresión se evalúa como VERDADERO, produce un resultado especificado; de lo contrario, produce la evaluación para un resultado else.

Ejemplo:

DECLARE x INT64
DECLARE y INT64;

SET x = 10;
SET y = 20;

SELECT
  x AS A,
  y AS B,
  IF(x < y, 'true', 'false') AS resultado;

IFNULL

Si una expresión se evalúa como NULL, produce un resultado especificado; de lo contrario, produce la expresión.

Ejemplo:

DECLARE valor INT64 DEFAULT 10;

SELECT IFNULL(NULL, 0) as result; -- NULL

SELECT IFNULL(valor, 0) as result; -- 10

NULLIF

Produce NULL si la primera expresión que coincide con otra se evalúa como VERDADERO; de lo contrario, devuelve la primera expresión.

Ejemplo:

DECLARE x INT64 DEFAULT 10;

SELECT NULLIF(0, 0) as resultado; -- NULL

SELECT NULLIF(x, 0) as resultado; -- 10

Más ejemplos en próximas entregas.

Enlaces:

https://cloud.google.com/bigquery/docs/reference/standard-sql/conditional_expressions