Funzioni tabella

Una funzione tabella, chiamata anche funzione con valore di tabella (TVF), è una funzione 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 visualizzazioni, ma una funzione tabella possono assumere parametri.

Creare funzioni tabella

Per creare una funzione di tabella, utilizza il metodo CREATE TABLE FUNCTION l'Informativa. Una funzione di tabella contiene una query che produce una tabella. La funzione restituisce il risultato della query. La seguente funzione di tabella accetta un valore 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 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 di funzione di tabella corrisponde al nome di una colonna della tabella, può creare un riferimento ambiguo. In questo caso, BigQuery interpreta come riferimento alla colonna della tabella, non al parametro. Il tipo di è quella di utilizzare nomi di parametri diversi da quelli di qualsiasi come colonne della tabella a cui viene fatto riferimento.

Utilizzare le funzioni di tabella

Puoi chiamare una funzione tabella in qualsiasi contesto in cui una tabella è valida. Le seguenti 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 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 un 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 di routine.

Eliminare le funzioni della tabella

Per eliminare una funzione di tabella, utilizza 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 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 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. Per Ad esempio, DDL (Data Definition Language) e DML (Data Manipulation Language) non sono consentite istruzioni nelle funzioni tabella. Se hai bisogno di effetti collaterali, valuta di scrivere un procedura .

  • Le funzioni di tabella devono essere archiviate nella stessa posizione delle tabelle in cui riferimento.

Quote

Per ulteriori informazioni su quote e limiti delle funzioni di tabella, consulta Quote e limiti.