Reserved keywords
Some words are keywords in FeatureQL. Whether you can use one as a feature name or a function name depends on where it appears. Every single-word keyword falls into exactly one of three buckets for each position. Multi-word phrases such as OR REPLACE or BIND TO are never usable as a single name.
Three buckets
| Bucket | Meaning |
|---|---|
| Usable | Fine unquoted in that position |
| Reserved | Rejected with a clear error; wrap in double quotes to use as a name ("SELECT", "NULL") |
| Unavailable | Conflicts with syntax; cannot be used unquoted in that position |
Quoted names (double quotes) are never treated as keywords.
NULL: bare NULL in an expression is the null literal. As an unquoted feature name it is reserved (same as TRUE / FALSE). For a typed null, use NULL(type) or NULL::type.
Feature and field names
Unquoted feature names, field names, aliases, and namespace segments. 248 usable, 73 reserved, 15 unavailable.
Usable (248)
ADD, ADMIN, ANY_VALUE, APPLY, APPROX_DISTINCT, APPROX_PERCENTILE, ARBITRARY, ARG_MAX, ARG_MIN
ARRAY_AGG, ARRAY_BOOL_AND, ARRAY_BOOL_OR, ARRAY_CONCAT, ARRAY_FLATTEN, ARRAY_MERGE, AVAILABLE, AVG
BIGINT, BINDING, BIND_COLUMNS, BIND_SQL, BIND_SQL_OR, BIND_VALUE, BIND_VALUES, BITSTRING, BIT_AND
BIT_OR, BIT_XOR, BOOL, BOOLEAN, BOOL_AND, BOOL_OR, CALL, CARRY, CAST, CAST_JSON, CATALOG, COALESCE
COLUMNS, COMMENT, COMMIT, CONCAT, CONCAT_WS, CONST, CORR, COUNT, COUNT_IF, COVAR_POP, COVAR_SAMP
CREATED, CSV, CUME_DIST, DATE, DEALLOCATE, DECIMAL, DEDUPLICATE, DEFAULT, DEFINE, DELETED
DENSE_RANK, DENY, DEPTH, DESCRIBE, DISPLAYS, DISTRIBUTED, DOC, DOCS, DOUBLE, DOWNSTREAM, DROP, EMPTY
ERROR, ESCAPED, EVAL_CONST, EXCLUDE, EXECUTE, EXPLAIN, EXTEND, EXTERNAL_COLUMNS, EXTERNAL_HTTP
EXTERNAL_REDIS, EXTERNAL_SQL, EXTERNAL_SQL_EXTRACT, EXTERNAL_SQL_QUERY, EXTERNAL_SQL_UNIFIED
EXTERNAL_VIEW, EXTERNAL_VIEW_EXTRACT, EXTERNAL_VIEW_QUERY, EXTERNAL_VIEW_UNIFIED, FEATURE, FEATURES
FIELD, FIELDS, FIRST_VALUE, FIX, FLATTEN, FLOAT, FORCE, FORMAT, FUNCTION, FUNCTIONS, GRANTED, GRANTS
GRAPHVIZ, HIDE, HTML, HUGEINT, IGNORE, IMPORT, IMPORTING, INCLUDE, INCLUDING, INDEX_MULTI
INDEX_UNIQUE, INFERENCE, INLINE_COLUMNS, INPUT, INPUTS, INPUT_TRANSFORM_L, INT, INTEGER, INTERVAL
IO, JOB, JOBS, JSON, KEY, KEYS, KEYSET, LAG, LANGUAGE, LAST_VALUE, LATEST, LEAD, LOGICAL, MACRO
MATCH, MATCHES, MATCH_RECOGNIZE, MAX, MAX_BY, MEDIAN, MERGE, METHOD, MIN, MIN_BY, MY, NTH_VALUE
NTILE, OPTION, OUTPUT, OVERWRITE, PARAM, PARAMS, PARSING, PARTITION_DS, PERCENT_RANK, PERMUTE
POSITION, POSSIBLE, PREDICT, PREPARE, PREPARED_STATEMENT, PRIMARY, PRINTF, PRIVILEGES, PRODUCT
QUANTILE_CONT, QUANTILE_DISC, QUERY, RANK, RANK_DENSE, RECENT, RECURSE, REFRESH, REGR_INTERCEPT
REGR_SLOPE, RELATED, RELATED_EXTEND, REMOVE, REPLACE, REPLACING, RESPECT, RETURN, ROLE, ROLES
ROLLBACK, ROW_NUMBER, SAMPLE, SCHEMA, SELECTED, SHOW, SIGNATURE, SIGNATURES, SMALLINT, SOURCE_HTTP
SOURCE_JDBC, SOURCE_REDIS, SQL, START, STDDEV_POP, STDDEV_SAMP, STRING, STRING_AGG, SUBSTRING, SUM
TABLE, TABLES, TEMPORARY, TEST, TESTS, TEXT, TIME, TIMESTAMP, TIMESTAMPTZ, TINYINT, TRACE
TRANSACTION, TRANSFORM, TRANSFORM_A, TRANSFORM_C, TRANSFORM_L, TRANSFORM_U, TRY_CAST, TRY_CAST_JSON
TSV, TYPE, UDF, UNNEST, UNSAFE_CAST, UNSPECIFIED, UPDATED, UPSTREAM, USE, USER, VALIDATE, VARCHAR
VARIANT, VAR_POP, VAR_SAMP, VERBOSE, VIA, VIEW, WIDTH, WINDOW, WORK, ZIP, ZONE Reserved (73)
Raises UE/IDENTIFIER-IS-KEYWORD: 'KEYWORD' is a reserved keyword in this position; double-quote it to use as an identifier.
ALL, ALTER, AND, ANY, AS, ASC, AT, BETWEEN, BY, CASE, CREATE, CROSS, CURRENT, DELETE, DESC, DISTINCT
ELSE, END, ESCAPE, EXCEPT, EXISTS, EXTRACT, FALSE, FILTER, FIRST, FOLLOWING, FOR, FROM, GRANT
GREATEST, GROUP, GROUPS, HAVING, IF, ILIKE, IN, INSERT, INTERSECT, INTO, IS, JOIN, LAST, LEAST, LIKE
LIMIT, NONE, NOT, NULL, NULLS, OFFSET, ON, OR, ORDER, OVER, PARTITION, PRECEDING, RANGE, REVOKE
ROWS, SELECT, SET, THEN, TO, TRUE, UNBOUNDED, UNION, UPDATE, USING, VALUES, WHEN, WITH, WITHIN
WITHOUT Unavailable (15)
These conflict with syntax in name position (you get a parse error, not the reserved-keyword message).
| Keyword | Why |
|---|---|
AFTER | used in POSITION AFTER … |
ARRAY | constructor syntax (ARRAY[…]) |
BEFORE | used in POSITION BEFORE … |
CURRENT_ROLE | system identifier |
CURRENT_USER | system identifier |
FOLLOW | used in RECURSE clauses |
LIST | constructor syntax (LIST[…]) |
MAP | constructor syntax (MAP(…)) |
MAX_LEVEL | used in RECURSE clauses |
NESTED | reserved in binding syntax |
ROW | constructor syntax (ROW(…)) |
STRUCT | constructor syntax (STRUCT(…)) |
UESCAPE | string escape suffix |
WHERE | clause keyword |
WHILE | clause keyword |
Function names
Names in a function call or method chain. 294 usable, 32 reserved, 10 unavailable.
Usable (294)
ADD, ADMIN, AFTER, ALL, AND, ANY, ANY_VALUE, APPLY, APPROX_DISTINCT, APPROX_PERCENTILE, ARBITRARY
ARG_MAX, ARG_MIN, ARRAY_AGG, ARRAY_BOOL_AND, ARRAY_BOOL_OR, ARRAY_CONCAT, ARRAY_FLATTEN, ARRAY_MERGE
AVAILABLE, AVG, BEFORE, BETWEEN, BIGINT, BINDING, BIND_COLUMNS, BIND_SQL, BIND_SQL_OR, BIND_VALUE
BIND_VALUES, BITSTRING, BIT_AND, BIT_OR, BIT_XOR, BOOL, BOOLEAN, BOOL_AND, BOOL_OR, BY, CALL, CARRY
CAST, CAST_JSON, CATALOG, COALESCE, COLUMNS, COMMENT, COMMIT, CONCAT, CONCAT_WS, CONST, CORR, COUNT
COUNT_IF, COVAR_POP, COVAR_SAMP, CREATED, CROSS, CSV, CUME_DIST, CURRENT, CURRENT_ROLE, CURRENT_USER
DATE, DEALLOCATE, DECIMAL, DEDUPLICATE, DEFAULT, DEFINE, DELETED, DENSE_RANK, DENY, DEPTH, DESCRIBE
DISPLAYS, DISTINCT, DISTRIBUTED, DOC, DOCS, DOUBLE, DOWNSTREAM, DROP, EMPTY, ERROR, ESCAPE, ESCAPED
EVAL_CONST, EXCLUDE, EXECUTE, EXPLAIN, EXTEND, EXTERNAL_COLUMNS, EXTERNAL_HTTP, EXTERNAL_REDIS
EXTERNAL_SQL, EXTERNAL_SQL_EXTRACT, EXTERNAL_SQL_QUERY, EXTERNAL_SQL_UNIFIED, EXTERNAL_VIEW
EXTERNAL_VIEW_EXTRACT, EXTERNAL_VIEW_QUERY, EXTERNAL_VIEW_UNIFIED, EXTRACT, FALSE, FEATURE, FEATURES
FIELD, FIELDS, FIRST, FIRST_VALUE, FIX, FLATTEN, FLOAT, FOLLOWING, FOR, FORCE, FORMAT, FUNCTION
FUNCTIONS, GRANTED, GRANTS, GRAPHVIZ, GREATEST, GROUPS, HIDE, HTML, HUGEINT, IF, IGNORE, ILIKE
IMPORT, IMPORTING, INCLUDE, INCLUDING, INDEX_MULTI, INDEX_UNIQUE, INFERENCE, INLINE_COLUMNS, INPUT
INPUTS, INPUT_TRANSFORM_L, INT, INTEGER, INTERVAL, IO, IS, JOB, JOBS, JSON, KEY, KEYS, KEYSET, LAG
LANGUAGE, LAST, LAST_VALUE, LATEST, LEAD, LEAST, LIKE, LOGICAL, MACRO, MATCH, MATCHES
MATCH_RECOGNIZE, MAX, MAX_BY, MEDIAN, MERGE, METHOD, MIN, MIN_BY, MY, NONE, NOT, NTH_VALUE, NTILE
NULL, NULLS, ON, OPTION, OR, OUTPUT, OVER, OVERWRITE, PARAM, PARAMS, PARSING, PARTITION
PARTITION_DS, PERCENT_RANK, PERMUTE, POSITION, POSSIBLE, PRECEDING, PREDICT, PREPARE
PREPARED_STATEMENT, PRIMARY, PRINTF, PRIVILEGES, PRODUCT, QUANTILE_CONT, QUANTILE_DISC, QUERY, RANGE
RANK, RANK_DENSE, RECENT, RECURSE, REFRESH, REGR_INTERCEPT, REGR_SLOPE, RELATED, RELATED_EXTEND
REMOVE, REPLACE, REPLACING, RESPECT, RETURN, ROLE, ROLES, ROLLBACK, ROWS, ROW_NUMBER, SAMPLE, SCHEMA
SELECTED, SET, SHOW, SIGNATURE, SIGNATURES, SMALLINT, SOURCE_HTTP, SOURCE_JDBC, SOURCE_REDIS, SQL
START, STDDEV_POP, STDDEV_SAMP, STRING, STRING_AGG, SUBSTRING, SUM, TABLE, TABLES, TEMPORARY, TEST
TESTS, TEXT, TIME, TIMESTAMP, TIMESTAMPTZ, TINYINT, TO, TRACE, TRANSACTION, TRANSFORM, TRANSFORM_A
TRANSFORM_C, TRANSFORM_L, TRANSFORM_U, TRUE, TRY_CAST, TRY_CAST_JSON, TSV, TYPE, UDF, UNBOUNDED
UNNEST, UNSAFE_CAST, UNSPECIFIED, UPDATED, UPSTREAM, USE, USER, USING, VALIDATE, VALUES, VARCHAR
VARIANT, VAR_POP, VAR_SAMP, VERBOSE, VIA, VIEW, WIDTH, WINDOW, WITH, WITHIN, WITHOUT, WORK, ZIP
ZONE Reserved (32)
Raises UE/FUNCTION-IS-KEYWORD: 'KEYWORD' cannot be used as a function name; it is a reserved keyword.
ALTER, AS, ASC, AT, CASE, CREATE, DELETE, DESC, ELSE, END, EXCEPT, EXISTS, FILTER, FROM, GRANT
GROUP, HAVING, IN, INSERT, INTERSECT, INTO, JOIN, LIMIT, MAP, OFFSET, ORDER, REVOKE, SELECT, THEN
UNION, UPDATE, WHEN Unavailable (10)
| Keyword | Why |
|---|---|
ARRAY | constructor syntax (ARRAY(…)) |
FOLLOW | used in RECURSE clauses |
LIST | constructor syntax (LIST(…)) |
MAX_LEVEL | used in RECURSE clauses |
NESTED | reserved in binding syntax |
ROW | constructor syntax (ROW(…)) |
STRUCT | constructor syntax (STRUCT(…)) |
UESCAPE | string escape suffix |
WHERE | clause keyword |
WHILE | clause keyword |
Examples
Bare NULL literal
In an expression, NULL is the null literal — not a feature name.
SELECT
f := NULL IS NULL
;| F BOOLEAN |
|---|
| TRUE |
Reserved name vs quoted escape
Unquoted NULL as a feature name is reserved; double quotes make it a normal name.
SELECT NULL := 1;SELECT
"null" := 1
;| F BIGINT |
|---|
| 1 |
Clause keywords
Words like WITHIN and SELECT are reserved in the positions shown below.
SELECT WITHIN := 1;SELECT SELECT(1);Usable keyword as a name
Some keywords (for example RESPECT, like IGNORE) are usable unquoted as feature names.
SELECT
respect := 1
;| RESPECT BIGINT |
|---|
| 1 |