Virtual Datasets
Opteryx provides a small number of relations that are computed when queried
rather than read from storage. They are named with a leading $, which is
reserved for the engine — a name you create can never collide with one.
They fall into two groups, and the difference matters: some are ordinary
relations you can SELECT from and join, and some exist only to back a
SHOW statement.
Queryable by name
These behave like any other relation — you can project, filter, join and aggregate them.
| Dataset | Contents |
|---|---|
$planets |
Sample data: 9 rows, 20 columns of planetary facts. Also temporal — see time travel, where querying before 1781 returns fewer rows |
$no_table |
A single row with one column, used as the source for a SELECT with no FROM. Rarely written explicitly |
SELECT name, gravity
FROM $planets
WHERE number_of_moons > 1;Reachable only through a SHOW statement
Each of these is deliberately not addressable by name. Each has exactly one surface, so the statement and the relation cannot drift into disagreeing:
| Relation | Its only surface | Columns |
|---|---|---|
$variables |
SHOW VARIABLES | name, value, type, owner, visibility |
$user |
SHOW USER | attribute, value, type |
$grants |
SHOW GRANTS | pattern, role, actions |
Querying one by name is refused, and the error names the statement to use instead:
SELECT * FROM $grants;
-- '$grants' cannot be queried directly; use `SHOW GRANTS`.The cost of that rule is real and taken deliberately: because no SHOW form can
appear in a FROM clause, these cannot be joined or filtered at the source.
Filter the returned rows client-side instead.
Notes
$-prefixed names are reserved for the engine. See Reserved Words for the identifier rules.- The set of virtual datasets is not a stable API — treat
$planetsas sample data for learning and testing, not as a fixture to build on.