Explore features

The SHOW FEATURES command lets you search, filter, and analyze features in the registry. Use it to discover what's available, understand dependencies, and audit how features relate to each other.

Syntax

SHOW [MY] [RECENT] FEATURES
  [(INCLUDE <fields> | EXCLUDE <fields> | COLUMNS <fields>)]
  [<feature_name>, ...]
  [IN <namespace> [UP TO LEVEL <n>]]
  [LIKE <pattern>]
  [WHERE <condition>]
  [ORDER BY <expression>]
  [LIMIT <n>]

Available metadata fields

These fields can be used in INCLUDE, EXCLUDE, COLUMNS, WHERE, and ORDER BY clauses:

FieldTypeDescription
nameVARCHARFully qualified name (includes namespace)
datatypeVARCHARData type of the feature
functionVARCHARFunction used in the definition
formulaVARCHARThe feature's expression
paramsROWParameter details (kind, name, type)
created_atROWCreation timestamp
updated_atROWLast update timestamp

Basic usage

Let's create a few features and then explore them:

FeatureQL
CREATE OR REPLACE FEATURES AS
SELECT
    FM.TUTORIALS.EXPLORE.FEATURE1 := 1,
    FM.TUTORIALS.EXPLORE.FEATURE2 := 2
;
Result
feature_name VARCHARstatus VARCHARmessage VARCHAR
FM.TUTORIALS.EXPLORE.FEATURE1CREATEDFeature created as not exists
FM.TUTORIALS.EXPLORE.FEATURE2CREATEDFeature created as not exists

List the features we just created:

FeatureQL
SHOW FEATURES (COLUMNS (NAME)) IN FM.TUTORIALS.EXPLORE;
Result
NAME VARCHAR
FM.TUTORIALS.EXPLORE.FEATURE1
FM.TUTORIALS.EXPLORE.FEATURE2

After replacing and adding features, SHOW FEATURES reflects the current state:

FeatureQL
CREATE OR REPLACE FEATURES AS
SELECT
    FM.TUTORIALS.EXPLORE.FEATURE1 := 11,
    FM.TUTORIALS.EXPLORE.FEATURE11 := FM.TUTORIALS.EXPLORE.FEATURE1 + 1,
    FM.TUTORIALS.EXPLORE.FEATURE12 := FM.TUTORIALS.EXPLORE.FEATURE1 + FM.TUTORIALS.EXPLORE.FEATURE2
        COMMENT 'Adds FEATURE1 and FEATURE2',
;
Result
feature_name VARCHARstatus VARCHARmessage VARCHAR
FM.TUTORIALS.EXPLORE.FEATURE1REPLACEDFeature was replaced
FM.TUTORIALS.EXPLORE.FEATURE11CREATEDFeature created as not exists
FM.TUTORIALS.EXPLORE.FEATURE12CREATEDFeature created as not exists

Shorthand queries

SHOW FEATURES supports several shortcuts that map to common filter patterns:

ShorthandWhat it does
SHOW FEATURE NAME_OF_FEATUREExact name match
SHOW FEATURES NAME1, NAME2Filter to specific names
SHOW FEATURES LIKE 'fm.customers.%'Pattern match
SHOW FEATURES IN 'fm.customers'Features directly in a namespace (one level)
SHOW FEATURES IN 'fm.customers' UP TO LEVEL 2Features in a namespace up to a given depth
SHOW MY FEATURESFeatures where you are point of contact
SHOW RECENT FEATURESMost recently created features (last 50)

These shortcuts combine freely. For example, pattern matching within a namespace with depth and a result limit:

FeatureQL
SHOW FEATURES LIKE '%EXPLORE%1' IN FM.TUTORIALS UP TO LEVEL 2 ORDER BY NAME LIMIT 10;
Result
NAME VARCHARDATATYPE VARCHARFUNCTION VARCHARINPUTS VARCHARFORMULA VARCHARRESTRICTIONS VARCHARSTATUS VARCHARMETA VARCHARSIGNATURE VARCHARPOSITION BIGINTDEPENDENCIES VARCHARCREATED_AT VARCHARCREATED_BY VARCHARUPDATED_AT VARCHARUPDATED_BY VARCHAR
FM.TUTORIALS.EXPLORE.FEATURE1BIGINTVALUE[]VALUE(11)[]DEV{}VALUE.custom.BIGINT50{"FM.TUTORIALS.EXPLORE.FEATURE1": 1}2025-12-13 11:33:59.145000-- None --2025-12-13 11:33:59.147000WEBGUEST_USER_SLTTESTS
FM.TUTORIALS.EXPLORE.FEATURE11BIGINTADD[]FM.TUTORIALS.EXPLORE.FEATURE1 + 1[]DEV{}ADD.BIGINT.BIGINT.BIGINT50{"FM.TUTORIALS.EXPLORE.FEATURE1": 1, "FM.TUTORIALS.EXPLORE.FEATURE11": 2}2025-12-13 11:33:59.133000WEBGUEST_USER_SLTTESTS 2025-12-13 11:33:59.133000 WEBGUEST_USER_SLTTESTS

Dependency analysis

FeatureQL tracks how features depend on each other. Three operators let you query these relationships:

OperatorDescription
IS_UPSTREAM_OF(feature)True if the feature is a dependency of the specified feature
IS_DOWNSTREAM_OF(feature)True if the feature depends on the specified feature
DEPTH_RELATIVE_TO(feature)Signed distance in the dependency graph

Let's create a chain of features to explore: RFEATURE0 and RFEATURE1 are inputs, RFEATURE2 depends on RFEATURE0, RFEATURE3 depends on both RFEATURE1 and RFEATURE2, and RFEATURE4 depends on RFEATURE3.

FeatureQL
CREATE OR REPLACE FEATURES IN FM.TUTORIALS.EXPLORE AS
SELECT
    RFEATURE0 := INPUT(BIGINT),
    RFEATURE1 := INPUT(BIGINT),
    RFEATURE2 := RFEATURE0 + 1,
    RFEATURE3 := RFEATURE1 + RFEATURE2,
    RFEATURE4 := RFEATURE3 + 2;
Result
feature_name VARCHARstatus VARCHARmessage VARCHAR
FM.TUTORIALS.EXPLORE.RFEATURE0CREATEDFeature created as not exists
FM.TUTORIALS.EXPLORE.RFEATURE1CREATEDFeature created as not exists
FM.TUTORIALS.EXPLORE.RFEATURE2CREATEDFeature created as not exists
FM.TUTORIALS.EXPLORE.RFEATURE3CREATEDFeature created as not exists
FM.TUTORIALS.EXPLORE.RFEATURE4CREATEDFeature created as not exists

Finding upstream dependencies

What does RFEATURE3 depend on?

FeatureQL
SHOW FEATURES (COLUMNS (NAME, FORMULA)) WHERE IS_UPSTREAM_OF('FM.TUTORIALS.EXPLORE.RFEATURE3')
Result
NAME VARCHARFORMULA VARCHAR
FM.TUTORIALS.EXPLORE.RFEATURE2FM.TUTORIALS.EXPLORE.RFEATURE0 + 1
FM.TUTORIALS.EXPLORE.RFEATURE1INPUT(BIGINT)
FM.TUTORIALS.EXPLORE.RFEATURE0INPUT(BIGINT)

Finding downstream dependents

What depends on RFEATURE3?

FeatureQL
SHOW FEATURES (COLUMNS (NAME, FORMULA)) WHERE IS_DOWNSTREAM_OF('FM.TUTORIALS.EXPLORE.RFEATURE3')
Result
NAME VARCHARFORMULA VARCHAR
FM.TUTORIALS.EXPLORE.RFEATURE4FM.TUTORIALS.EXPLORE.RFEATURE3 + 2

Visualizing depth in the dependency graph

DEPTH_RELATIVE_TO returns negative values for upstream features and positive values for downstream ones, giving you a sense of the dependency distance:

FeatureQL
SHOW FEATURES (
    COLUMNS (NAME, FORMULA),
    INCLUDE (DEPTH_RELATIVE_TO('FM.TUTORIALS.EXPLORE.RFEATURE3') as DEPTH_IN_DAG)
)
WHERE DEPTH_IN_DAG IS NOT NULL::BIGINT
ORDER BY DEPTH_IN_DAG ASC
Result
NAME VARCHARFORMULA VARCHARDEPTH_IN_DAG VARCHAR
FM.TUTORIALS.EXPLORE.RFEATURE0INPUT(BIGINT)-2
FM.TUTORIALS.EXPLORE.RFEATURE1INPUT(BIGINT)-2
FM.TUTORIALS.EXPLORE.RFEATURE2FM.TUTORIALS.EXPLORE.RFEATURE0 + 1-1
FM.TUTORIALS.EXPLORE.RFEATURE3FM.TUTORIALS.EXPLORE.RFEATURE1 + FM.TUTORIALS.EXPLORE.RFEATURE20
FM.TUTORIALS.EXPLORE.RFEATURE4FM.TUTORIALS.EXPLORE.RFEATURE3 + 21

Tracing feature dependencies with SELECT TRACE

SELECT TRACE is a shorthand that automatically expands a feature into its full dependency chain. Instead of returning only the features you name, TRACE includes all named upstream dependencies in topological order — inputs first, the requested feature last.

This is useful when you want to see every intermediate step that leads to a result, without manually listing each dependency.

A simple inline example — TRACE reorders features by their dependency depth regardless of how you wrote them:

FeatureQL
SELECT TRACE
    F4 := F2 + F3,
    F1 := 1,
    F2 := F1 + 1,
    F3 := F1 * 2;
Result
F1 BIGINTF2 BIGINTF3 BIGINTF4 BIGINT
1224

With persisted features, TRACE goes further: it expands a single feature into its entire upstream tree. Here, selecting only RFEATURE4 with TRACE returns all five features in the chain:

FeatureQL
SELECT TRACE
    FM.TUTORIALS.EXPLORE.RFEATURE4
FROM FM.TUTORIALS.EXPLORE
FOR CROSS
    FM.TUTORIALS.EXPLORE.RFEATURE0 := BIND_VALUE(2),
    FM.TUTORIALS.EXPLORE.RFEATURE1 := BIND_VALUE(3);
Result
FM.TUTORIALS.EXPLORE.RFEATURE0 BIGINTFM.TUTORIALS.EXPLORE.RFEATURE1 BIGINTFM.TUTORIALS.EXPLORE.RFEATURE2 BIGINTFM.TUTORIALS.EXPLORE.RFEATURE3 BIGINTFM.TUTORIALS.EXPLORE.RFEATURE4 BIGINT
23368

Last update at: 2026/03/03 16:47:38
Last updated: 2026-03-03 16:48:19