Create features

Persisting features saves their definitions in the registry so they can be referenced, composed, and shared across queries and teams. You create features with CREATE FEATURES and modify metadata with ALTER FEATURE.

Creating a single feature

CREATE [OR REPLACE] FEATURES [IF NOT EXISTS]
  <feature_name> [IN <namespace> [IF EMPTY]]
  AS <SELECT statement>

CREATE TEMPORARY FEATURES
  <feature_name> AS <SELECT statement>

The simplest form creates one feature with a fully qualified name:

FeatureQL
CREATE OR REPLACE FEATURE FM.TUTORIALS.CAD.FEATURE1 AS 1 + 5;
Result
feature_name VARCHARstatus VARCHARmessage VARCHAR
FM.TUTORIALS.CAD.FEATURE1CREATEDFeature created as not exists

Use SHOW FEATURES to verify what was created — it displays the feature's name, type, and formula:

FeatureQL
SHOW FEATURES (COLUMNS (NAME, DATATYPE, FORMULA)) LIKE 'FM.TUTORIALS.CAD.FEATURE1';
Result
NAME VARCHARDATATYPE VARCHARFORMULA VARCHAR
FM.TUTORIALS.CAD.FEATURE1BIGINT1 + 5

Once persisted, the feature is available in any query:

FeatureQL
SELECT FM.TUTORIALS.CAD.FEATURE1;
Result
FM.TUTORIALS.CAD.FEATURE1 BIGINT
6

Creating multiple features

A single CREATE statement can define several features at once. Features can reference each other within the same statement — FeatureQL resolves dependencies automatically regardless of definition order.

FeatureQL
CREATE OR REPLACE FEATURES AS
SELECT
    INPUT(BIGINT) AS FM.TUTORIALS.CAD.FEATURE2,
    FM.TUTORIALS.CAD.FEATURE2 + 1 AS FM.TUTORIALS.CAD.FEATURE3,
    CASE WHEN FM.TUTORIALS.CAD.FEATURE3>5 THEN 'BIG' ELSE 'SMALL' END AS FM.TUTORIALS.CAD.FEATURE4,
;
Result
feature_name VARCHARstatus VARCHARmessage VARCHAR
FM.TUTORIALS.CAD.FEATURE2CREATEDFeature created as not exists
FM.TUTORIALS.CAD.FEATURE3CREATEDFeature created as not exists
FM.TUTORIALS.CAD.FEATURE4CREATEDFeature created as not exists

Using CREATE FEATURES IN

Instead of fully qualifying every name, CREATE FEATURES IN sets a target namespace for all features in the statement:

FeatureQL
CREATE OR REPLACE FEATURES IN FM.TUTORIALS.CAD AS
SELECT
    5 AS FEATURE5,
;
Result
feature_name VARCHARstatus VARCHARmessage VARCHAR
FM.TUTORIALS.CAD.FEATURE5CREATEDFeature created as not exists

Replacing features

CREATE OR REPLACE updates an existing feature's definition. FeatureQL validates that the replacement is compatible with any features that depend on it — see Registry consistency for the full set of rules.

FeatureQL
CREATE OR REPLACE FEATURES AS
SELECT
    FM.TUTORIALS.CAD.FEATURE3 := FM.TUTORIALS.CAD.FEATURE1 + 10
;
Result
feature_name VARCHARstatus VARCHARmessage VARCHAR
FM.TUTORIALS.CAD.FEATURE3REPLACEDFeature was replaced

Modifying metadata with ALTER

ALTER FEATURE changes metadata (like descriptions) without touching the feature's computation:

FeatureQL
ALTER FEATURE FM.TUTORIALS.CAD.FEATURE5
SET description = 'Feature containing the literal 5';
Result
feature_name VARCHARstatus VARCHARmessage VARCHAR
FM.TUTORIALS.CAD.FEATURE5ALTEREDFeature successfully altered

When to use each variant

SyntaxUse case
CREATE FEATURESFirst-time creation; fails if the feature already exists
CREATE OR REPLACE FEATURESIdempotent creation or update
CREATE FEATURES IF NOT EXISTSCreate only if missing; never overwrites
CREATE TEMPORARY FEATURESSession-scoped features that disappear when the session ends
Last update at: 2026/03/03 16:47:38
Last updated: 2026-03-03 16:48:19