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:
CREATE OR REPLACE FEATURE FM.TUTORIALS.CAD.FEATURE1 AS 1 + 5;| feature_name VARCHAR | status VARCHAR | message VARCHAR |
|---|---|---|
| FM.TUTORIALS.CAD.FEATURE1 | CREATED | Feature created as not exists |
Use SHOW FEATURES to verify what was created — it displays the feature's name, type, and formula:
SHOW FEATURES (COLUMNS (NAME, DATATYPE, FORMULA)) LIKE 'FM.TUTORIALS.CAD.FEATURE1';| NAME VARCHAR | DATATYPE VARCHAR | FORMULA VARCHAR |
|---|---|---|
| FM.TUTORIALS.CAD.FEATURE1 | BIGINT | 1 + 5 |
Once persisted, the feature is available in any query:
SELECT FM.TUTORIALS.CAD.FEATURE1;| 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.
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,
;| feature_name VARCHAR | status VARCHAR | message VARCHAR |
|---|---|---|
| FM.TUTORIALS.CAD.FEATURE2 | CREATED | Feature created as not exists |
| FM.TUTORIALS.CAD.FEATURE3 | CREATED | Feature created as not exists |
| FM.TUTORIALS.CAD.FEATURE4 | CREATED | Feature 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:
CREATE OR REPLACE FEATURES IN FM.TUTORIALS.CAD AS
SELECT
5 AS FEATURE5,
;| feature_name VARCHAR | status VARCHAR | message VARCHAR |
|---|---|---|
| FM.TUTORIALS.CAD.FEATURE5 | CREATED | Feature 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.
CREATE OR REPLACE FEATURES AS
SELECT
FM.TUTORIALS.CAD.FEATURE3 := FM.TUTORIALS.CAD.FEATURE1 + 10
;| feature_name VARCHAR | status VARCHAR | message VARCHAR |
|---|---|---|
| FM.TUTORIALS.CAD.FEATURE3 | REPLACED | Feature was replaced |
Modifying metadata with ALTER
ALTER FEATURE changes metadata (like descriptions) without touching the feature's computation:
ALTER FEATURE FM.TUTORIALS.CAD.FEATURE5
SET description = 'Feature containing the literal 5';| feature_name VARCHAR | status VARCHAR | message VARCHAR |
|---|---|---|
| FM.TUTORIALS.CAD.FEATURE5 | ALTERED | Feature successfully altered |
When to use each variant
| Syntax | Use case |
|---|---|
CREATE FEATURES | First-time creation; fails if the feature already exists |
CREATE OR REPLACE FEATURES | Idempotent creation or update |
CREATE FEATURES IF NOT EXISTS | Create only if missing; never overwrites |
CREATE TEMPORARY FEATURES | Session-scoped features that disappear when the session ends |