Funzioni tabella
Una funzione tabella, chiamata anche funzione con valore di tabella (TVF), è definita dall'utente che restituisce una tabella. Puoi usare una funzione tabella ovunque puoi usare una tabella. Le funzioni di tabella si comportano in modo simile alle visualizzazioni, ma una funzione tabella può assumere dei parametri.
Creare funzioni di tabella
Per creare una funzione di tabella, utilizza l'istruzione CREATE TABLE FUNCTION
. Una funzione tabella contiene una query che produce una tabella. La funzione restituisce il risultato della query. La seguente funzione tabella prende un parametro INT64
e utilizza questo valore all'interno di una clausola WHERE
in una query su un set di dati pubblico denominato bigquery-public-data.usa_names.usa_1910_current
:
CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64)
AS (
SELECT year, name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE year = y
GROUP BY year, name
);
Per filtrare in altri modi, puoi passare più parametri a una funzione di tabella. La seguente funzione di tabella filtra i dati per anno e prefisso del nome:
CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year_and_prefix(
y INT64, z STRING)
AS (
SELECT year, name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE
year = y
AND STARTS_WITH(name, z)
GROUP BY year, name
);
Nomi dei parametri
Se un parametro di una funzione di tabella corrisponde al nome di una colonna della tabella, può creare un riferimento ambiguo. In questo caso, BigQuery interpreta il nome come un riferimento alla colonna della tabella, non come un parametro. La procedura consigliata prevede l'utilizzo di nomi di parametri diversi da quelli delle colonne delle tabelle a cui viene fatto riferimento.
Utilizzare le funzioni di tabella
Puoi chiamare una funzione tabella in qualsiasi contesto in cui una tabella è valida. L'esempio
seguente chiama la funzione mydataset.names_by_year
nella clausola FROM
di
un'istruzione SELECT
:
SELECT * FROM mydataset.names_by_year(1950)
ORDER BY total DESC
LIMIT 5
I risultati sono simili ai seguenti:
+------+--------+-------+
| year | name | total |
+------+--------+-------+
| 1950 | James | 86447 |
| 1950 | Robert | 83717 |
| 1950 | Linda | 80498 |
| 1950 | John | 79561 |
| 1950 | Mary | 65546 |
+------+--------+-------+
Puoi unire l'output di una funzione di tabella a un'altra tabella:
SELECT *
FROM `bigquery-public-data.samples.shakespeare` AS s
JOIN mydataset.names_by_year(1950) AS n
ON n.name = s.word
Puoi anche utilizzare una funzione tabella in una sottoquery:
SELECT ARRAY(
SELECT name FROM mydataset.names_by_year(1950)
ORDER BY total DESC
LIMIT 5)
Elenco funzioni tabella
Le funzioni di tabella sono un tipo di routine. Per elencare tutte le routine in un set di dati, consulta Elenco delle routine.
Elimina funzioni tabella
Per eliminare una funzione di tabella, utilizza l'istruzione
DROP TABLE FUNCTION
:
DROP TABLE FUNCTION mydataset.names_by_year
Autorizza routine
Puoi autorizzare le funzioni di tabella come routine. Le routine autorizzate ti consentono di condividere i risultati delle query con utenti o gruppi specifici senza concedere loro l'accesso alle tabelle sottostanti che hanno generato i risultati. Ad esempio, una routine autorizzata può calcolare un'aggregazione sui dati o cercare un valore di tabella e utilizzarlo in un calcolo. Per maggiori informazioni, vedi Routine autorizzate.
Limitazioni
I parametri devono essere valori scalari. Le funzioni tabella in BigQuery non possono utilizzare le tabelle come parametri di input.
Il corpo della query deve essere un'istruzione
SELECT
e non può essere modificato. Ad esempio, le istruzioni DDL (Data Definition Language) e DML (Data Manipulation Language) non sono consentite nelle funzioni di tabella. Se hai bisogno di effetti collaterali, valuta la possibilità di scrivere una procedura.Le funzioni di tabella devono essere archiviate nella stessa località delle tabelle a cui fanno riferimento.
Quote
Per ulteriori informazioni su quote e limiti delle funzioni di tabella, consulta Quote e limiti.