BigQuery Create table valued function
A table-valued function (TVF), is a user-defined function that returns a table. You can use a table function anywhere that you can use a table. Table functions behave similarly to views, but a table function can take parameters.
Create table function example
\n CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64)\n AS\n SELECT year, name, SUM(number) AS total\n FROM `bigquery-public-data.usa_names.usa_1910_current`\n WHERE year = y\n GROUP BY year, name\n\n\n\n
Usage
\n\n SELECT * FROM mydataset.names_by_year(1950)\n ORDER BY total DESC\n LIMIT 5\n\n\n
Using in joins
\n\n SELECT *\n FROM `bigquery-public-data.samples.shakespeare` AS s\n JOIN mydataset.names_by_year(1950) AS n\n ON n.name = s.word\n\n\n
Using in subqueries
\n\n SELECT ARRAY(\n SELECT name FROM mydataset.names_by_year(1950)\n ORDER BY total DESC\n LIMIT 5)\n
Explanation
Table valued functions has the following limitations
\n- \n
- The query body must be a SELECT statement and cannot modify anything. For example, DDL and DML statements are not allowed in table functions \n
- Parameters must be scalar values. Table functions in BigQuery cannot take tables as input parameters. \n
Syntax reference
CREATE [OR REPLACE] TABLE FUNCTION [IF NOT EXISTS]\n [[project_name.]dataset_name.]function_name\n ( [ function_parameter [, ...] ] )\n [RETURNS TABLE < column_declaration [, ...] > ]\n AS sql_query\n\nfunction_parameter:\n parameter_name { data_type | ANY TYPE }\n\ncolumn_declaration:\n column_name data_type