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.