Install and scaffold¶
Two commands and you have a complete, runnable project on disk.
Rather than build a pipeline line by line, this course starts from the sample
project Lakehouse Plumber ships — a compact medallion architecture
(bronze → silver → gold) over the samples.tpch dataset that exists in every
Unity Catalog workspace. You’ll read it, generate its Lakeflow code, configure it
for your workspace, and deploy it. By the end you’ll know every moving part of an
LHP project well enough to start your own.
Install¶
Lakehouse Plumber is a Python package. Install it with pip:
pip install lakehouse-plumber
That gives you the lhp command. Check it:
lhp --version
Scaffold the sample project¶
lhp init scaffolds into the current directory — it does not create a
folder for you. Make an empty one, cd into it, and initialize with
--sample:
mkdir sample_lakehouse
cd sample_lakehouse
lhp init sample_lakehouse --sample
The --sample flag scaffolds the ready-to-run TPC-H demo (a plain
lhp init sample_lakehouse gives you an empty project skeleton instead). The
name you pass — sample_lakehouse here — is baked into the bundle name and
lhp.yaml.
Note
--sample builds a bundle-enabled project, because the demo deploys to
Databricks. That is why it is incompatible with --no-bundle. You’ll wire
the bundle up to your workspace in Configure the project.
What LHP created¶
The scaffold is a complete, working project. Here is the shape of it:
sample_lakehouse/
├── lhp.yaml # project config: operational metadata, event log, monitoring
├── README.md # the three-step quickstart, in the project itself
├── databricks.yml # bundle definition: workspace host + catalog variable
├── substitutions/
│ ├── dev.yaml # per-environment values behind every ${...} token
│ └── prod.yaml
├── config/
│ └── pipeline_config.yaml # catalog/schema + compute for the generated pipelines
├── presets/ # reusable config fragments (bronze_layer, silver_quality)
├── templates/ # one parametrized ingestion pattern (cloudfiles_ingest)
├── pipelines/
│ ├── 01_ingest/ # raw → bronze (cloudfiles + delta loads)
│ ├── 02_silver/ # cleansing + SCD2 dimensions
│ └── 03_gold/ # aggregated materialized view
├── schemas/ schema_transforms/ expectations/ sql/ transforms/ functions/
├── notebooks/data_prep.py # seeds the demo data (runs first in the job)
└── resources/sample_job.yml # the job that orchestrates it all
Three folders do the day-to-day work:
pipelines/holds your flowgroups — the YAML that describes each pipeline. Everything else exists to serve these.substitutions/holds per-environment values that fill the${...}tokens in your flowgroups, so one flowgroup runs unchanged in dev and prod.generated/is wherelhp generatewrites readable Lakeflow Python. You never hand-edit it; it doesn’t exist yet, because you haven’t generated.
The rest — presets/, templates/, config/, databricks.yml — is
where reuse, compute, and deployment are configured. The next page opens each of
those files and shows you what it controls.
Next¶
You have a complete project, but it points at a placeholder catalog and workspace. Before you generate anything, learn where those settings live — Configure the project.