Funzioni tabella

Una funzione di tabella, chiamata anche funzione con valori di tabella (TVF), è una funzione definita dall'utente che restituisce una tabella. Potete usare una funzione di tabella in tutti i punti in cui è possibile usare una tabella. Le funzioni tabella si comportano in modo simile alle viste, ma una funzione tabella può assumere parametri.

Creare funzioni di tabella

Per creare una funzione di tabella, utilizza l'istruzione CREATE TABLE FUNCTION. Una funzione di tabella contiene una query che produce una tabella. La funzione restituisce il risultato della query. La seguente funzione di tabella prende 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 trasferire più parametri a una funzione di tabella. La seguente funzione di tabella filtra i dati in base all'anno e al 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 della funzione di tabella corrisponde al nome di una colonna di tabella, può creare un riferimento ambiguo. In questo caso, BigQuery interpreta il nome come un riferimento alla colonna della tabella, non come parametro. La pratica consigliata è utilizzare nomi di parametri distinti dai nomi di qualsiasi colonna della tabella a cui viene fatto riferimento.

Utilizzare le funzioni della tabella

Puoi chiamare una funzione di tabella in qualsiasi contesto in cui una tabella sia 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 hanno il seguente aspetto:

+------+--------+-------+
| 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 di tabella in una sottoquery:

SELECT ARRAY(
  SELECT name FROM mydataset.names_by_year(1950)
  ORDER BY total DESC
  LIMIT 5)

Elenca funzioni di tabella

Le funzioni tabella sono un tipo di routine. Per elencare tutte le routine in un set di dati, consulta Elencare le routine.

Elimina funzioni di 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 delle tabelle 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 ulteriori informazioni, consulta 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ò apportare modifiche. 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 tabella devono essere archiviate nella stessa località delle tabelle a cui fanno riferimento.

Quote

Per ulteriori informazioni sulle quote e sui limiti delle funzioni delle tabelle, consulta Quote e limiti.