Hello, World!
FeatureQL looks like SQL but works differently: you define features (named values) instead of selecting from tables. This page walks through the basics with interactive examples.
Returning values
The simplest query returns a literal value, just like SELECT 1 in SQL:
SELECT 'Hello, World !'| ?_0 VARCHAR |
|---|
| Hello, World ! |
Naming features
Give a name to a value and it becomes a feature — a reusable building block you can reference elsewhere in the query or persist for use across queries:
SELECT
'Hello, World !' as HELLO,
3 AS VALUE3| HELLO VARCHAR | VALUE3 BIGINT |
|---|---|
| Hello, World ! | 3 |
Computing values
Features can be computed from operators and functions. Here, string concatenation is shown two ways — the || operator and the CONCAT() function — both produce the same result:
SELECT
'Hello, ' || 'World' || '!', -- Using the operator concat
CONCAT('Hello, ', 'World', '!') -- Using the function CONCAT| ?_0 VARCHAR | ?_1 VARCHAR |
|---|---|
| Hello, World! | Hello, World! |
Referencing other features
Features can reference other features defined in the same query. No CTEs, no subqueries — just name a feature and use it. FeatureQL resolves the dependency graph automatically:
SELECT
'World' as NAME,
'Hello, ' || NAME || '!' as HELLO_NAME,
1 AS VALUE1,
VALUE1 + 2 AS VALUE_1_PLUS_2| NAME VARCHAR | HELLO_NAME VARCHAR | VALUE1 BIGINT | VALUE_1_PLUS_2 BIGINT |
|---|---|---|---|
| World | Hello, World! | 1 | 3 |
Notice that HELLO_NAME references NAME, and VALUE_1_PLUS_2 references VALUE1. The order you write them doesn't matter — FeatureQL figures out the evaluation order.
Case insensitivity
Keywords, feature names, and function names are all case insensitive:
SeLeCt
'World' As NaMe,
'Hello, ' || nAmE || '!',
vAlUe1 + 2,
1 aS VaLuE1| NAME VARCHAR | ?_1 VARCHAR | ?_2 BIGINT | VALUE1 BIGINT |
|---|---|---|---|
| World | Hello, World! | 3 | 1 |
SeLeCt, As, nAmE — it all works. Use whatever casing convention your team prefers.