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
square
i 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
factorial
i 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
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
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