pipeline.yaml reference
pipeline.yaml declares how a single ingestion pipeline behaves. One file per pipeline.
Minimal example
format: csv
dest_table: orders
connector:
type: sqlite
url: sqlite:///orders.db
columns:
- source: order_id
dest: order_id
type: string
required: true
- source: amount
dest: amount
type: float
required: true
Full example
format: csv
dest_table: orders
write_mode: append
retry_cap: 3
stale_timeout_minutes: 30
batch_size: 1000
source_manifest: optional
connector:
type: postgres
url: postgresql://user:pass@host/dbname
columns:
- source: order_id
dest: order_id
type: string
required: true
- source: amount
dest: amount
type: float
required: true
- source: order_date
dest: order_date
type: date
required: false
- source: notes
dest: notes
type: string
required: false
Top-level fields
format
Required. The file format for files in the watched directory.
| Value | File types | Notes |
|---|---|---|
csv |
.csv |
|
ndjson |
.ndjson, .jsonl, .ndjson.gz |
|
parquet |
.parquet |
Requires uv sync --extra parquet |
fixed_width |
any | Layout declared via start:/width: on each column |
excel |
.xlsx |
Requires uv sync --extra excel and a peer excel: block |
dest_table
Required. The name of the destination table to write rows into.
write_mode
Optional. Default: append.
| Value | Behaviour | Idempotency |
|---|---|---|
append |
Rows added alongside prior records | Delete-where-hash then insert on retry |
truncate |
Table wiped then replaced with this file's rows | Inherently idempotent |
cdc |
Apply CDC Files as SCD Type 1 inserts, updates, and deletes | Re-applying the same File converges by business key |
When write_mode: cdc is used, a cdc: block is required. CDC support starts from complete Files in the Watched Directory; Filedge does not capture database logs or consume directly from queues.
write_mode: cdc
cdc:
keys: [customer_id]
operation_column: op
sequence_by: updated_at
operations:
insert: [c, insert]
update: [u, update]
delete: [d, delete]
cdc
Configures how Filedge applies a CDC File to the destination table.
| Field | Required | Meaning |
|---|---|---|
keys |
Yes | Source column names that identify the destination row |
operation_column |
Yes | Source column containing the change operation |
sequence_by |
Yes | Source column used to pick the latest change for a key within one File |
operations.insert |
Yes | Operation values treated as inserts |
operations.update |
Yes | Operation values treated as updates |
operations.delete |
Yes | Operation values treated as deletes |
keys and sequence_by must be declared in columns:. The operation column may be CDC metadata only; it does not need to be declared unless you also want to write it to the destination.
First-version CDC support is SCD Type 1 only. Inserts and updates replace the current row for the configured key. Deletes remove the current row for the key. SCD Type 2 history tables are out of scope.
retry_cap
Optional. Default: 3. Maximum number of attempts before a file enters terminal FAILED state. Set to 1 to disable automatic retry.
stale_timeout_minutes
Optional. Default: 30. How long a PROCESSING lock may be held before it's reclaimed as stale.
batch_size
Optional. Default: 1000. Number of rows per database batch during write_rows. Larger batches are more efficient but use more memory.
source_manifest
Optional. Default: optional.
Controls whether Filedge reads an OpenLineage-shaped sidecar named <data-file>.manifest.json when it registers files in the watched directory.
| Value | Behaviour |
|---|---|
disabled |
Do not look for sidecar manifests. Files ingest without source metadata. |
optional |
Attach valid manifest metadata when present. Missing or invalid manifests do not fail the file. |
required |
Fail the file before destination write when the manifest is missing or invalid. The audit error records the validation category and expected manifest path. |
Source manifests let upstream Fetchers, Queue Materializers, SFTP sync jobs, and vendor exports attach source ranges to the File audit record without making Filedge responsible for those source mechanics. See the Source manifests guide for the sidecar schema and lineage commands.
excel block
Required when format: excel. Declares the sheet to read from each .xlsx file in the Watched Directory. See ADR-0012.
| Field | Required | Meaning |
|---|---|---|
sheet |
Yes | Sheet name (string) or 0-based index (integer). No silent first-sheet defaulting in filedge run. |
The excel: block is rejected when format is anything other than excel. Multi-sheet workbooks where each tab is a different logical table must be split into per-sheet files upstream — Content Hash is one file's bytes, so two sheets cannot be ingested as two Files from one workbook.
.xls, .xlsb, and .ods are not supported; re-save as .xlsx in Excel.
connector block
Declares the destination backend. See Connectors for full details on each type.
connector:
type: sqlite # sqlite | postgres | bigquery | databricks | duckdb
url: sqlite:///... # type-specific options follow
columns block
Declares the schema mapping between source file columns and destination table columns.
columns:
- source: <source_column_name> # name as it appears in the file
dest: <dest_column_name> # name in the destination table
type: <type> # see Column Types
required: true | false
source
The column name as it appears in the CSV header or NDJSON key.
dest
The column name in the destination table. May differ from source for renaming.
type
The target type for coercion. See Column Types.
required
Whether a missing or null value in this column should fail the row. When required: true, a null or missing value causes the file to fail (strict mode — the whole file is rejected, not just the row).
Column tolerance
Extra columns in the source file that are not declared in columns: are silently ignored. Only declared columns are written to the destination. This lets upstream systems add fields without breaking your pipeline.
Schema guard
On first run, the connector creates the destination table from the columns: block. On subsequent runs, if the live table schema doesn't match the config, the run fails loudly with a diff. No auto-migration — schema changes require manual action.