Funzioni tabella
Una funzione tabella, chiamata anche funzione con valore di tabella (TVF), è una funzione definita dall'utente che restituisce una tabella. Puoi utilizzare una funzione tabella ovunque sia possibile utilizzare una tabella. Le funzioni di tabella si comportano in modo simile alle viste, ma una funzione di tabella può accettare parametri.
Creare funzioni di tabella
Per creare una funzione tabella, utilizza l'istruzione
CREATE TABLE FUNCTION
. Una funzione di tabella contiene una query che genera una tabella. La funzione
restituisce il risultato della query. La seguente funzione tabella accetta un parametro INT64
e utilizza questo valore all'interno di una clausola WHERE
in una query su un
set di dati pubblico chiamato
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 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 al parametro. La prassi consigliata è utilizzare nomi di parametri distinti dai nomi delle colonne della tabella a cui si fa riferimento.
Utilizzare le funzioni di tabella
Puoi chiamare una funzione tabella in qualsiasi contesto in cui è valida una tabella. Il seguente
esempio 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 tabella con 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 di tabella in una sottoquery:
SELECT ARRAY(
SELECT name FROM mydataset.names_by_year(1950)
ORDER BY total DESC
LIMIT 5)
Elenco funzioni di tabella
Le funzioni di tabella sono un tipo di routine. Per elencare tutte le routine in un set di dati, consulta Elenca routine.
Eliminare le funzioni della tabella
Per eliminare una funzione tabella, utilizza l'istruzione
DROP TABLE FUNCTION
.
DROP TABLE FUNCTION mydataset.names_by_year
Autorizzare le routine
Puoi autorizzare le funzioni di tabella come routine. Le routine autorizzate ti consentono di condividere i risultati di una 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 su dati o cercare un valore di tabella e utilizzarlo in un calcolo. Per ulteriori informazioni, vedi Routine autorizzate.
Limitazioni
I parametri devono essere valori scalari. Le funzioni di tabella in BigQuery non possono accettare tabelle come parametri di input.
Il corpo della query deve essere un'istruzione
SELECT
e non può modificare nulla. 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, considera di scrivere una procedura.Le funzioni di tabella devono essere archiviate nella stessa posizione delle tabelle a cui fanno riferimento.
Quote
Per ulteriori informazioni sulle quote e sui limiti delle funzioni di tabella, consulta Quote e limiti.