Steps & RiaHs¶
A step is one unit of mapping work inside a pipeline. The actual mapping rules live in a RiaH — a gzipped JSON file produced by Rabbit-in-a-Hat (the OHDSI tool that lets you author CDM mappings visually).
Step kinds¶
| Kind | Owner | Editable |
|---|---|---|
| etl_map | You | Yes — create, rename, reorder, upload RiaH versions. |
| pre_automation | Orchestrator | Toggles only (pipeline-level vocab + create-CDM are fixed on; logging knobs etc. are env-level). |
| post_automation | Orchestrator | Toggle observation_period + individual eras + preceding-visit-IDs at the pipeline level. |
Pre- and post-automation are created automatically when you make a pipeline; you can't delete or reorder them.
Configuring an etl_map step¶
Pipelines → \<your pipeline> → \<step> → Configure:
- RiaH — the mapping file. Upload a
.json.gzfrom Rabbit-in-a-Hat (or RiaH-style.json.gzproduced by any compatible tool). On upload the orchestrator parses it and surfaces:- CDM version — must match the pipeline's
omop_version, otherwise upload is rejected. - Expected tables — every CDM table the RiaH writes (derived
from
tableToTableMaps). - Produces — named
StoreSequence+StoreIndexMapartifacts. - Consumes — cross-step
GetCDMTableId(@<table>)lookups resolved against sibling steps' produces.
- CDM version — must match the pipeline's
- Usagi files — CSV lookup tables in OHDSI Usagi format
(
sourceCode,sourceName,sourceFrequency,targetConceptId,mappingStatus,equivalence,statusSetBy,statusSetOn, …). Referenced byUsagiMaprules inside the RiaH. - CSVMap files — plain CSV lookups. Referenced by
CSVMaprules.
Every file is versioned — upload a new one and the prior version moves to "archived" status. Each version has Restore + Delete buttons, plus a download button so you can pull the file back out of the orchestrator to edit locally.
What "expected tables" buys you¶
The expected-tables list is the authoritative answer to "did this step
load everything it was supposed to" — the run-mode modal shows per-
table outcomes (loaded / error / missing) against it, and the
orchestrator downgrades the step verdict from success to partial
if any expected table came back with zero rows.
If the auto-derived list is wrong (e.g. you have a RiaH that uses
InsertRecord to seed a constant-row table without tableToTableMaps),
edit the list manually on the step configure page.
Multi-RiaH wiring¶
Most pipelines need more than one RiaH because a single RiaH can't express everything (multi-source fan-out into the same CDM table being the canonical example). The orchestrator auto-wires steps when:
- Step A has a
StoreIndexMapnamedXand step B has aGetCDMTableId(@X, …)— that's a "consumes" edge from A to B. - Steps A and B both write into CDM table
Twith namedStoreSequence(T_id_seq)— they share IDs, and the dispatcher ensures A runs before B (or vice versa, whichever is consistent with other constraints).
See DAG wiring for the full mechanics.