Staging Tables
The epm_staging database contains intermediate views used by the dbt staging layer, and write-back tables for user-submitted data.
Staging Views
Staging models are materialized as views in the epm_staging schema. They perform field renames, joins, and JSON parsing without persisting data.
Staging models sit between Bronze (raw) and Silver (cleaned) layers:
epm_bronze (Airbyte tables) → epm_staging (views) → epm_silver (tables)
Each staging view typically:
- Selects from the corresponding Bronze table
- Renames fields from PascalCase to snake_case
- Casts types using
db_adapter.sqlmacros - Joins related reference tables (e.g., journal headers to line items)
Staging views are not directly queried by the API or Excel — they're internal to the dbt pipeline.
Write-Back Tables (Planned)
The epm_staging database is also reserved for future write-back scenarios:
| Table | Purpose | Status |
|---|---|---|
staging_budget_submissions | Budget entries submitted from Excel | Planned |
staging_consolidation_adjustments | Top-side journals submitted via UI | Planned |
The planned workflow:
- User submits data from Excel or Frappe UI
- Data lands in
epm_stagingtable - Approval workflow in Frappe
- Approved data is picked up by dbt on next build
ClickHouse Databases
Created by clickhouse/init-db.sql:
CREATE DATABASE IF NOT EXISTS epm_bronze;
CREATE DATABASE IF NOT EXISTS epm_staging;
CREATE DATABASE IF NOT EXISTS epm_silver;
CREATE DATABASE IF NOT EXISTS epm_gold;
| Database | Managed By | Contents |
|---|---|---|
epm_bronze | Airbyte | Raw D365 OData tables |
epm_staging | dbt | Staging views + write-back tables |
epm_silver | dbt | Cleaned, standardized tables |
epm_gold | dbt | Business logic + seed tables |