Table Functions

A table function returns a set of rows for each input row. The returned set can contain zero, one, or more rows. Each row can contain one or more columns.

Table functions are sometimes called “tabular functions”.

In this Topic:

What Are Table Functions?

Table functions are typically used when a function returns multiple rows for each individual input.

Each time that a table function is called, it can return a different number of rows. For example, a function record_high_temperatures_for_date(), which returns a list of record high temperatures for a specified date, might return 0 rows on April 10, 1 row on June 10, and 40 rows on August 20.

Simple Examples of Table Functions

The following are appropriate as table functions:

  • A function that accepts an account number and a date, and returns all charges billed to that account on that date. (More than one charge might have been billed on a particular date.)

  • A function that accepts a user ID and returns the database roles assigned to that user. (A user might have multiple roles, including “sysadmin” and “useradmin”.)

Functions in Which Each Output Row Depends Upon Multiple Input Rows

Table functions can be grouped into two categories based on the number of input rows that affect each output row:

  • 1-to-N

  • M-to-N

The functions described earlier are 1-to-N table functions: each output row depends upon only one input row. For example, a function record_high_temperatures_for_date() might produce multiple output rows (one for each city that hit a record on that date). Each output row for a specific input date depends only on that date; each output row is independent of the rows for every other date.

Snowflake also supports M-to-N table functions: each output row can depend upon multiple input rows. For example, if a function generates a moving average of stock prices, that function uses stock prices from multiple input rows (multiple dates) to generate each output row.

More generally, in an M-to-N function, a group of M input rows produces a group of N output rows. M can be one or more rows. N can be zero, one, or more rows.

For example, in a 10-day moving average, M is 10. N is 1 because each group of 10 input rows produces one average price.

Built-in Table Functions vs User-Defined Table Functions

Snowflake provides hundreds of built-in functions, many of which are table functions. Built-in table functions are listed in System-Defined Table Functions.

Users can also write their own functions, called user-defined functions or “UDFs”. Some UDFs are scalar; some are tabular. User-defined table functions are called “UDTFs”. For information about UDFs (including UDTFs), see UDFs (User-Defined Functions).

Built-in table functions and user-defined table functions generally follow the same rules; for example, they are called the same way from SQL statements.

Using a Table Function

Using a Table Function in the FROM clause

A table contains a set of rows. Similarly, a table function returns a set of rows. Both tables and table functions are used in contexts that expect a set of rows. Specifically, table functions are used in the FROM clause of a SQL statement.

To help the SQL compiler recognize a table function as a source of rows, Snowflake requires that the table function call be wrapped by the TABLE() keyword.

For example, the following statement calls a table function named record_high_temperatures_for_date(), which takes a DATE value as an argument:

SELECT city_name, temperature
    FROM TABLE(record_high_temperatures_for_date('2021-06-27'::DATE))
    ORDER BY city_name;

For more information about the syntax of TABLE(), see Table Literals.

Table functions, like functions in general, can accept zero, one, or multiple input arguments in each invocation. Each argument must be a scalar expression.

For more details about the syntax of table function calls, see Syntax (in this topic).

Using a Table as Input to a Table Function

The argument to a table function can be a literal or an expression, such as a column of a table. For example, the SELECT statement below passes values from a table as arguments to a table function:

create table dates_of_interest (d date);
insert into dates_of_interest (d) values

create function record_high_temperatures_for_date(d date)
    returns table (city varchar, temperature float)
    ... ;

select as "Date",, record_temperatures.temperature
    from dates_of_interest as doi,
         table(record_high_temperatures_for_date( as record_temperatures;

The arguments to a table function can come from other table-like sources, including views and other table functions.

List of System-Defined Table Functions

Snowflake provides the following system-defined (i.e. built-in) table functions:




Data Loading


For more information, see Loading Data into Snowflake.


Data Generation


Data Conversion



Object Modeling


Semi-structured Queries


For more information, see Querying Semi-structured Data.

Query Results


Can be used to perform SQL operations on the output from another SQL operation (e.g. SHOW).

Historical & Usage Information

(Snowflake Information Schema, Account Usage):

User Login




Warehouse & Storage Usage





Column-level & Row-level Security


Object Tagging


Information Schema table function.


Information Schema table function.


Account Usage table function.

Database Replication


For more information, see Replicating Databases Across Multiple Accounts.



Data Loading & Transfer






Data Clustering (within Tables)


For more information, see Automatic Clustering.

External Functions


For more information, see External Functions.

External Tables


For more information, see Working with External Tables.



Materialized Views Maintenance


For more information, see Working with Materialized Views.

SCIM Maintenance


For more information, see Auditing with SCIM

Search Optimization Maintenance


For more information, see Using the Search Optimization Service.



For more information, see Executing SQL Statements on a Schedule Using Tasks.






  FROM [ <input_table> [ [AS] <alias_1> ] ,
         [ LATERAL ]
       TABLE( <table_function>( [ <arg_1> [, ... ] ] ) ) [ [ AS ] <alias_2> ];

For function-specific syntax, see the documentation for the individual system-defined table functions.

Usage Notes

  • Table functions can also be applied to a set of rows using the LATERAL construct.

  • To enable using table expressions, Snowflake supports ANSI/ISO standard syntax for table expressions in the FROM clause of queries and subqueries. This syntax is used to indicate that an expression returns a collection of rows instead of a single row.

  • This ANSI/ISO syntax is valid only in the FROM clause of the SELECT list. You cannot omit these keywords and parentheses from a collection subquery specification in any other context.