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
- CREATE TEMP FUNCTION: Defineix una funció temporal.
- square(x FLOAT64): El nom de la funció és
squarei pren un argument de tipusFLOAT64. - RETURNS FLOAT64: La funció retorna un valor de tipus
FLOAT64. - LANGUAGE js: Indica que la funció està escrita en JavaScript.
- 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
- CREATE TEMP FUNCTION: Defineix una funció temporal.
- factorial(n INT64): El nom de la funció és
factoriali pren un argument de tipusINT64. - RETURNS INT64: La funció retorna un valor de tipus
INT64. - AS ( ... ): El codi SQL de la funció es troba entre parèntesis.
- CASE ... END: Utilitza una estructura
CASEper 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
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
- Exercici: Crea una UDF en JavaScript que calculi la longitud d'una cadena de text.
- Exercici: Crea una UDF en SQL que determini si un nombre és primer.
Solucions:
- JavaScript UDF:
CREATE TEMP FUNCTION stringLength(str STRING) RETURNS INT64 LANGUAGE js AS """
return str.length;
""";
SELECT stringLength('hello world') AS result;- 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
- Què és BigQuery?
- Configurar el teu entorn de BigQuery
- Comprendre l'arquitectura de BigQuery
- Visió general de la consola de BigQuery
Mòdul 2: SQL bàsic a BigQuery
Mòdul 3: SQL intermedi a BigQuery
Mòdul 4: SQL avançat a BigQuery
- Unions avançades
- Camps niats i repetits
- Funcions definides per l'usuari (UDFs)
- Particionament i agrupament
Mòdul 5: Gestió de dades a BigQuery
- Carregar dades a BigQuery
- Exportar dades de BigQuery
- Transformació i neteja de dades
- Gestió de conjunts de dades i taules
Mòdul 6: Optimització del rendiment de BigQuery
- Tècniques d'optimització de consultes
- Comprendre els plans d'execució de consultes
- Ús de vistes materialitzades
- Optimització de l'emmagatzematge
Mòdul 7: Seguretat i compliment de BigQuery
Mòdul 8: Integració i automatització de BigQuery
- Integració amb serveis de Google Cloud
- Ús de BigQuery amb Dataflow
- Automatització de fluxos de treball amb Cloud Functions
- Programació de consultes amb Cloud Scheduler
Mòdul 9: Aprenentatge automàtic a BigQuery (BQML)
- Introducció a BigQuery ML
- Creació i entrenament de models
- Avaluació i predicció amb models
- Funcions avançades de BQML
