Funciones de tabla

Una función de tabla, también llamada función con valor de tabla (TVF), es una función definida por el usuario que muestra una tabla. Puedes usar una función de tabla en cualquier lugar en el que puedas usar una tabla. Las funciones de tabla se comportan de manera similar a las vistas, pero una función de tabla puede tomar parámetros.

Crea funciones de tabla

Para crear una función de tabla, usa la sentencia CREATE TABLE FUNCTION. Una función de tabla contiene una consulta que produce una tabla. La función muestra el resultado de la consulta. La siguiente función de tabla toma un parámetro INT64 y usa este valor dentro de una cláusula WHERE en una consulta en un conjunto de datos públicos llamado 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
);

Para filtrar de otras maneras, puedes pasar varios parámetros a una función de tabla. La siguiente función de tabla filtra los datos por año y prefijo de nombre:

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
);

Nombres de parámetros

Si un parámetro de función de tabla coincide con el nombre de una columna de tabla, puede crear una referencia ambigua. En ese caso, BigQuery interpreta el nombre como una referencia a la columna de tabla, no al parámetro. Se recomienda usar nombres de parámetros que sean distintos de los nombres de cualquier columna de tabla a la que se haga referencia.

Usa funciones de tabla

Puedes llamar a una función de tabla en cualquier contexto en el que una tabla sea válida. En el siguiente ejemplo, se llama a la función mydataset.names_by_year en la cláusula FROM de una sentencia SELECT:

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

Los resultados se ven de la siguiente manera:

+------+--------+-------+
| year |  name  | total |
+------+--------+-------+
| 1950 | James  | 86447 |
| 1950 | Robert | 83717 |
| 1950 | Linda  | 80498 |
| 1950 | John   | 79561 |
| 1950 | Mary   | 65546 |
+------+--------+-------+

Puedes unir el resultado de una función de tabla con otra tabla:

SELECT *
  FROM `bigquery-public-data.samples.shakespeare` AS s
  JOIN mydataset.names_by_year(1950) AS n
  ON n.name = s.word

También puedes usar una función de tabla en una subconsulta:

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

Enumera funciones de tabla

Las funciones de tabla son un tipo de rutina. Para enumerar todas las rutinas en un conjunto de datos, consulta Enumera rutinas.

Borra funciones de la tabla

Para borrar una función de tabla, usa la sentencia DROP TABLE FUNCTION:

DROP TABLE FUNCTION mydataset.names_by_year

Autoriza rutinas

Puedes autorizar funciones de tabla como routines. Las rutinas autorizadas te permiten compartir resultados de consultas con usuarios o grupos específicos sin darles acceso a las tablas subyacentes que generaron los resultados. Por ejemplo, una rutina autorizada puede calcular una agregación en los datos o buscar un valor de tabla y usar ese valor en un cálculo. Para obtener más información, consulta Rutinas autorizadas.

Limitaciones

  • Los parámetros deben ser valores escalares. Las funciones de tabla en BigQuery no pueden tomar tablas como parámetros de entrada.

  • El cuerpo de la consulta debe ser una sentencia SELECT y no puede modificar nada. Por ejemplo, las declaraciones de lenguaje de definición de datos (DDL) y de lenguaje de manipulación de datos (DML) no están permitidas en las funciones de tabla. Si necesitas efectos secundarios, considera escribir un procedimiento en su lugar.

  • Las funciones de tabla deben almacenarse en la misma ubicación que las tablas a las que hacen referencia.

Cuotas

Para obtener más información sobre las cuotas y los límites de las funciones de tabla, consulta Cuotas y límites.