Introducció

Les Funcions Definides per l'Usuari (UDFs) a BigQuery permeten als usuaris crear funcions personalitzades utilitzant JavaScript o SQL. Aquestes funcions poden ser utilitzades per realitzar càlculs complexos o transformar dades de maneres que no són possibles amb les funcions integrades de BigQuery.

Conceptes Clau

  • UDFs en JavaScript: Permeten escriure funcions personalitzades en JavaScript que es poden utilitzar dins de les consultes SQL.
  • UDFs en SQL: Permeten definir funcions personalitzades utilitzant SQL pur.
  • Persistents vs Temporals: Les UDFs poden ser persistents (emmagatzemades a la base de dades) o temporals (definides dins d'una consulta).

Creació d'UDFs en JavaScript

Exemple Bàsic

A continuació es mostra un exemple de com crear una UDF en JavaScript que calcula el quadrat d'un nombre:

CREATE TEMP FUNCTION square(x FLOAT64) RETURNS FLOAT64 LANGUAGE js AS """
  return x * x;
""";

SELECT square(3) AS result;

Explicació del Codi

  1. CREATE TEMP FUNCTION: Defineix una funció temporal.
  2. square(x FLOAT64): El nom de la funció és square i pren un argument de tipus FLOAT64.
  3. RETURNS FLOAT64: La funció retorna un valor de tipus FLOAT64.
  4. LANGUAGE js: Indica que la funció està escrita en JavaScript.
  5. AS """ ... """: El codi JavaScript de la funció es troba entre cometes triples.

Exercici Pràctic

Exercici: Crea una UDF en JavaScript que converteixi una cadena de text a majúscules.

CREATE TEMP FUNCTION toUpperCase(str STRING) RETURNS STRING LANGUAGE js AS """
  return str.toUpperCase();
""";

SELECT toUpperCase('hello world') AS result;

Solució:

CREATE TEMP FUNCTION toUpperCase(str STRING) RETURNS STRING LANGUAGE js AS """
  return str.toUpperCase();
""";

SELECT toUpperCase('hello world') AS result;

Creació d'UDFs en SQL

Exemple Bàsic

A continuació es mostra un exemple de com crear una UDF en SQL que calcula el factorial d'un nombre:

CREATE TEMP FUNCTION factorial(n INT64) RETURNS INT64 AS (
  CASE
    WHEN n = 0 THEN 1
    ELSE n * factorial(n - 1)
  END
);

SELECT factorial(5) AS result;

Explicació del Codi

  1. CREATE TEMP FUNCTION: Defineix una funció temporal.
  2. factorial(n INT64): El nom de la funció és factorial i pren un argument de tipus INT64.
  3. RETURNS INT64: La funció retorna un valor de tipus INT64.
  4. AS ( ... ): El codi SQL de la funció es troba entre parèntesis.
  5. CASE ... END: Utilitza una estructura CASE per definir la lògica de la funció.

Exercici Pràctic

Exercici: Crea una UDF en SQL que calculi la suma dels primers n nombres naturals.

CREATE TEMP FUNCTION sumOfNaturals(n INT64) RETURNS INT64 AS (
  (n * (n + 1)) / 2
);

SELECT sumOfNaturals(10) AS result;

Solució:

CREATE TEMP FUNCTION sumOfNaturals(n INT64) RETURNS INT64 AS (
  (n * (n + 1)) / 2
);

SELECT sumOfNaturals(10) AS result;

Persistència de les UDFs

Creació d'UDFs Persistents

Les UDFs persistents es poden crear utilitzant la següent sintaxi:

CREATE FUNCTION project_id.dataset_id.function_name(x FLOAT64) RETURNS FLOAT64 LANGUAGE js AS """
  return x * x;
""";

Exemple

CREATE FUNCTION my_project.my_dataset.square(x FLOAT64) RETURNS FLOAT64 LANGUAGE js AS """
  return x * x;
""";

Ús de la UDF Persistent

SELECT my_project.my_dataset.square(3) AS result;

Resum

En aquesta secció, hem après a crear Funcions Definides per l'Usuari (UDFs) a BigQuery utilitzant tant JavaScript com SQL. Hem vist exemples pràctics i hem creat UDFs tant temporals com persistents. Les UDFs són una eina poderosa per realitzar càlculs complexos i transformar dades de manera personalitzada.

Exercicis Addicionals

  1. Exercici: Crea una UDF en JavaScript que calculi la longitud d'una cadena de text.
  2. Exercici: Crea una UDF en SQL que determini si un nombre és primer.

Solucions:

  1. JavaScript UDF:
CREATE TEMP FUNCTION stringLength(str STRING) RETURNS INT64 LANGUAGE js AS """
  return str.length;
""";

SELECT stringLength('hello world') AS result;
  1. SQL UDF:
CREATE TEMP FUNCTION isPrime(n INT64) RETURNS BOOL AS (
  CASE
    WHEN n < 2 THEN FALSE
    WHEN n = 2 THEN TRUE
    ELSE NOT EXISTS (
      SELECT 1
      FROM UNNEST(GENERATE_ARRAY(2, CAST(SQRT(n) AS INT64))) AS i
      WHERE n % i = 0
    )
  END
);

SELECT isPrime(7) AS result;

Amb aquests exercicis, hauràs reforçat els conceptes apresos i estaràs preparat per utilitzar UDFs en els teus projectes de BigQuery.

Curs de BigQuery

Mòdul 1: Introducció a BigQuery

Mòdul 2: SQL bàsic a BigQuery

Mòdul 3: SQL intermedi a BigQuery

Mòdul 4: SQL avançat a BigQuery

Mòdul 5: Gestió de dades a BigQuery

Mòdul 6: Optimització del rendiment de BigQuery

Mòdul 7: Seguretat i compliment de BigQuery

Mòdul 8: Integració i automatització de BigQuery

Mòdul 9: Aprenentatge automàtic a BigQuery (BQML)

Mòdul 10: Casos d'ús de BigQuery en el món real

© Copyright 2024. Tots els drets reservats