Multiple-file datasource
Multiple-file datasource
Combine files with matching columns into one logical datasource. Complete local setup, then download sales-jan.csv, sales-feb.csv, multiple-files.preql, and glob-files.preql into one folder.
January contains sales 1 and 2 (store: 120; web: 80). February contains sales 3 and 4 (store: 50; web: 30). Sale IDs are unique across both files.
Explicit paths
The list makes the set of input files explicit. All paths must have the same file extension.
key sale_id int;
property sale_id.channel string;
property sale_id.amount float;
datasource sales (
sale_id: sale_id,
channel: channel,
amount: amount
)
grain (sale_id)
file [`./sales-jan.csv`, `./sales-feb.csv`];
select channel, sum(amount) as revenue
order by channel asc;
trilogy run multiple-files.preql duckdb
Glob pattern
Use a glob when every matching file belongs to the dataset. Keep unrelated CSVs out of the matched set.
key sale_id int;
property sale_id.channel string;
property sale_id.amount float;
datasource sales (
sale_id: sale_id,
channel: channel,
amount: amount
)
grain (sale_id)
file `./sales-*.csv`;
select channel, sum(amount) as revenue
order by channel asc;
trilogy run glob-files.preql duckdb
Both recipes return:
| channel | revenue |
|---|---|
| store | 170 |
| web | 110 |
These bindings combine rows; they do not deduplicate overlapping files or enforce key uniqueness. For separate datasource declarations with scoped completeness, see partial sources.