seeknal run¶
Execute the DAG-based pipeline defined by YAML and Python files in the seeknal/ directory.
Synopsis¶
Description¶
Executes the pipeline DAG built from YAML and Python files in the seeknal/ directory.
Supports incremental runs with change detection, parallel execution, interval tracking,
and configurable error handling.
After execution, feature groups with the same entity are automatically consolidated
into per-entity views in target/feature_store/.
Options¶
| Option | Description |
|---|---|
--dry-run |
Show what would be executed without running |
--full, -f |
Run all nodes regardless of state; cannot combine with --tags, --nodes or --types |
--nodes, -n |
Run specific nodes only (repeatable) |
--types, -t |
Filter by node types (e.g., transform,feature_group) |
--tags |
Select tagged nodes plus their upstream dependencies (repeatable) |
--exclude-tags |
Skip nodes with these tags |
--continue-on-error |
Continue execution after failures |
--retry, -r |
Number of retries for failed nodes (default: 0) |
--show-plan, -p |
Show execution plan without running |
--parallel |
Execute independent nodes in parallel |
--max-workers |
Maximum parallel workers (default: 4) |
--materialize/--no-materialize |
Enable/disable materialization (overrides node config) |
--env |
Run in isolated virtual environment |
--date |
Run as if today were this date (YYYY-MM-DD); see Parameters |
--run-id |
Custom run ID for parameterization |
--params |
JSON object of custom parameters, e.g. '{"region": "EU"}' |
--start-date / --end-date |
Values for {{ start_date }} / {{ end_date }} (YYYY-MM-DD) |
--start |
Start timestamp for interval execution (ISO format or YYYY-MM-DD) |
--end |
End timestamp for interval execution |
--backfill |
Execute backfill for all missing intervals in the date range |
--restate |
Process restatement intervals marked for reprocessing |
--profile |
Path to profiles.yml for connections |
Examples¶
Run changed nodes only (incremental)¶
Run all nodes (full refresh)¶
Dry run¶
Show execution plan¶
Run specific nodes¶
Run only transforms and feature groups¶
Continue on error¶
Retry failed nodes¶
Run in parallel¶
Run in a virtual environment¶
Interval tracking¶
# Run with specific interval
seeknal run --start 2024-01-01 --end 2024-01-31
# Backfill missing intervals
seeknal run --backfill --start 2024-01-01 --end 2024-01-31
Parameters¶
{{ }} placeholders are filled in when the DAG is built:
- YAML nodes:
params:values,transform:SQL, and a source'stable:(pushdown queries live inparams.query, so they are covered too). - Python nodes: decorator keyword arguments, e.g.
@transform(run_day="{{ today }}"), read withctx.get_param("run_day"). A source'stable=is also templated.
| Placeholder | Value |
|---|---|
{{ today }}, {{ today(-1) }}, {{ yesterday }} |
Today / offset in days |
{{ month_start }}, {{ month_start(-1) }}, {{ year_start }} |
First day of the (offset) month / year |
{{ date }} |
The --date value (only set when --date is given) |
{{ run_date }} |
The --date value, or the run's start timestamp |
{{ start_date }}, {{ end_date }} |
--start-date / --end-date |
{{ <key> }} |
A key from --params or the node's params: (Python nodes: declared keys only) |
{{ env:VAR\|default }} |
Environment variable |
{{ run_id }} |
--run-id, or a generated UUID |
--date sets "today" for the whole run: every date function counts from it, so
seeknal run --date 2026-10-12 makes {{ today(-1) }} resolve to 2026-10-11.
The date validator limits years to 2000–2100 and dates to at most 365 days in
the future. A today supplied through --params is validated too. Dedicated
flags replace matching JSON keys. --start-date and --end-date supply
template values; they are separate from the interval options --start and --end.
Transform SQL is resolved even without a params: block. An unset
{{ env:VAR }} without a default fails DAG construction; provide the variable
or write {{ env:VAR|default }}.
A CLI value replaces a declared parameter with the same name. Declare defaults in
params: (YAML) or as decorator arguments (Python), and override them per run:
kind: transform
name: daily_orders
inputs:
- ref: source.orders
params:
run_day: "{{ today }}"
region: EU
transform: |
SELECT * FROM ref('source.orders')
WHERE CAST(order_date AS DATE) = CAST('{{ run_day }}' AS DATE)
AND region = '{{ region }}'
seeknal run # run_day = today, region = EU
seeknal run --date 2026-10-12 --params '{"region": "US"}'
A node reruns when its resolved functional configuration changes. Python decorator parameters and feature-group/SOA parameters participate in that fingerprint; undeclared Python CLI keys do not invalidate every Python node. Expect a one-time rerun when moving an existing project to the 2.13.0 candidate.
Empty SQL outputs and materialization¶
A SELECT returning zero rows publishes a typed empty intermediate parquet, replacing the previous run's file. Downstream nodes read the empty batch; publication errors fail the node. The last SELECT is captured once, including in multi-statement SQL; a DDL-only transform has no SELECT output to publish.
--full changes cache selection, not a target's Iceberg write mode. An empty
upsert against an existing target is a noop that preserves its snapshot after
preflight checks. See conditional upsert for accepted and
skipped-row counts and conflict outcomes. Do not treat an empty overwrite
target as a noop: that mode replaces the whole table.
Entity Consolidation¶
After seeknal run, feature groups that share the same entity are automatically
consolidated into a unified per-entity view:
target/
├── intermediate/
│ ├── feature_group_customer_features.parquet
│ └── feature_group_product_preferences.parquet
└── feature_store/
└── customer/
├── features.parquet ← merged entity view
└── _entity_catalog.json ← catalog metadata
Use seeknal entity list and seeknal entity show to inspect consolidated entities.
See Also¶
- 2.13.0 upgrade guidance - Evaluate the unreleased candidate
- Conditional Iceberg upsert - Protect matched rows from older versions or backfills
- seeknal plan - Preview changes and execution plan
- seeknal validate - Validate configuration
- seeknal entity - Inspect consolidated entities
- seeknal consolidate - Manual entity consolidation