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

BucketMeaning
UsableFine unquoted in that position
ReservedRejected with a clear error; wrap in double quotes to use as a name ("SELECT", "NULL")
UnavailableConflicts 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
null

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
null

Unavailable (15)

These conflict with syntax in name position (you get a parse error, not the reserved-keyword message).

KeywordWhy
AFTERused in POSITION AFTER …
ARRAYconstructor syntax (ARRAY[…])
BEFOREused in POSITION BEFORE …
CURRENT_ROLEsystem identifier
CURRENT_USERsystem identifier
FOLLOWused in RECURSE clauses
LISTconstructor syntax (LIST[…])
MAPconstructor syntax (MAP(…))
MAX_LEVELused in RECURSE clauses
NESTEDreserved in binding syntax
ROWconstructor syntax (ROW(…))
STRUCTconstructor syntax (STRUCT(…))
UESCAPEstring escape suffix
WHEREclause keyword
WHILEclause 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
null

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
null

Unavailable (10)

KeywordWhy
ARRAYconstructor syntax (ARRAY(…))
FOLLOWused in RECURSE clauses
LISTconstructor syntax (LIST(…))
MAX_LEVELused in RECURSE clauses
NESTEDreserved in binding syntax
ROWconstructor syntax (ROW(…))
STRUCTconstructor syntax (STRUCT(…))
UESCAPEstring escape suffix
WHEREclause keyword
WHILEclause keyword

Examples

Bare NULL literal

In an expression, NULL is the null literal — not a feature name.

FeatureQL
SELECT
    f := NULL IS NULL
;
Result
F BOOLEAN
TRUE

Reserved name vs quoted escape

Unquoted NULL as a feature name is reserved; double quotes make it a normal name.

FeatureQL
SELECT NULL := 1;
Result
ERROR UE/IDENTIFIER-IS-KEYWORD 'NULL' is a reserved keyword in this position; double-quote it to use as an identifier.

FeatureQL
SELECT
    "null" := 1
;
Result
F BIGINT
1

Clause keywords

Words like WITHIN and SELECT are reserved in the positions shown below.

FeatureQL
SELECT WITHIN := 1;
Result
ERROR UE/IDENTIFIER-IS-KEYWORD 'WITHIN' is a reserved keyword in this position; double-quote it to use as an identifier.

FeatureQL
SELECT SELECT(1);
Result
ERROR UE/FUNCTION-IS-KEYWORD 'SELECT' cannot be used as a function name; it is a reserved keyword.

Usable keyword as a name

Some keywords (for example RESPECT, like IGNORE) are usable unquoted as feature names.

FeatureQL
SELECT
    respect := 1
;
Result
RESPECT BIGINT
1