mmodarre/lakehouse_plumber/lhp
Claude Code and agent skill by mmodarre/lakehouse_plumber
- community
Checking that the SKILL.md file is still in the repository.
Build, configure, debug and maintain Lakehouse Plumber (LHP) projects for Databricks Lakeflow Spark Declarative Pipelines. Use for LHP YAML, flowgroups, CLI commands, project setup, feature explanations, validation, generation, deployment and troubleshooting. Includes offline technical references. Guided courses and learner exercises belong to the separate lhp-learn skill; do not start lessons during ordinary development work.
Install
npx vskill@latest install mmodarre/lakehouse_plumber/lhpSKILL.md
Lakehouse Plumber (LHP)
Modern YAML-driven ETL framework for Databricks Lakeflow Spark Declarative Pipelines.
Use the technical references bundled with this installed release. Read only those needed for the current development task. Website access is optional. Complete the requested work and explain relevant decisions; do not introduce course checkpoints.
For environment installation, use setup.md.
Before You Start (read this first)
- Reuse before authoring. On any "create a flowgroup / pipeline / ingestion" request, scan
templates/andblueprints/first. If an existing template (one parameterised flowgroup) or blueprint (a whole-flowgroup pattern repeated per site/region/tenant) already fits, reuse it viause_template:/use_blueprint:when it matches the request. Ask only if the choice is ambiguous or changes the requested behaviour. Only author fresh YAML when nothing fits. - Write-target rule of thumb: incremental/append/streaming ingest →
streaming_table; full recompute, joins, aggregations, or dimensional rebuilds →materialized_view. - New project from scratch? Load quickstart.md for the
init → lhp.yaml/substitutions/pipeline_config → validate → generatepath. - Common mistakes to avoid:
- Deprecated
{token}braces — always${token}(only%{local_var}uses non-$braces). - Missing
stream(view)wrapper in a SQL transform that reads a streaming source. - Secrets inline in YAML — always
${secret:scope/key}. operational_metadataat the write level — apply it at the load/transform (action) level.- Suggesting
lhp show(removed) orlhp deps/--force(deprecated). Uselhp dag,lhp diff; everygenerateis a full regenerate.
Read Project Context
Read the user's existing project files before generating new configurations:
lhp.yaml— project config, operational metadata definitionssubstitutions/— environment tokens and secret scopespresets/— reusable defaults (action-type config)templates/— reusable action patterns (one parameterised flowgroup)blueprints/— reusable whole-flowgroup patterns, instantiated per site/region/tenant- Existing
pipelines/YAML files — match naming/structure conventions
Core Architecture
- Pipeline: Logical grouping; generated files organized by pipeline name. All files in a pipeline run in a single Spark Declarative Pipeline.
- FlowGroup: One source entity; becomes one Python file. A flowgroup is a logical grouping of actions.
- Action: Individual operation (load, transform, write, test)
Minimal FlowGroup
Substitution Syntax (Processing Order)
| Order | Syntax | Type | |
|---|---|---|---|
| 1st | %{var} | Local variable (flowgroup-scoped) | |
| 2nd | {{ param }} | Template parameter (Jinja2) | |
| 3rd | ${token} | Environment substitution (bare {token} is deprecated, LHP-DEPR-001) | |
| 4th | ${secret:scope/key} | Secret -> dbutils.secrets.get() |
Template and Flowgroup Naming Conventions
When creating reusable templates:
Template Files: TMPL<number>_<source_type>_<function>.yaml
<number>: Sequential identifier (001, 002, etc.)<source_type>: Source type from the load action (delta, cloudfiles, jdbc, kafka, sql, etc.)<function>: What the template does (scd2, bronze, incremental, etc.)- Examples:
TMPL001_delta_scd2.yaml- SCD Type 2 from Delta sourceTMPL002_cloudfiles_bronze.yaml- Bronze ingestion from CloudFilesTMPL003_jdbc_incremental.yaml- Incremental load from JDBC
Flowgroups Using Templates: <domain>_<final_table>_TMPL<number>
<domain>: Business domain or subject area (billing, orders, customers, etc.)<final_table>: The final target table nameTMPL<number>: Template number being used (must match template file)- Examples:
billing_invoice_TMPL001- Uses TMPL001 for invoice tableorders_customer_TMPL002- Uses TMPL002 for customer tableanalytics_fact_sales_TMPL003- Uses TMPL003 for fact_sales table
Quick Reference: Action Types
Each sub-type has its own leaf reference file. Load only the one(s) you need.
Key Rules
- `stream(view_name)` required in SQL transforms reading from streaming sources
- CloudFiles `_metadata.*` columns only available in views, not downstream transforms
- Preset lists are replaced, not merged; nested dicts are deep-merged
- All-or-nothing job_name: if any flowgroup has
job_name, all must have it - Never put secrets in YAML values — always use
${secret:scope/key} - Validate before generating:
lhp validate --env <env> - `readMode: stream` ->
spark.readStream, `batch` ->spark.read - Monitoring requires event_log —
monitoring: {}won't work withoutevent_logsection - `catalog` and `schema` are REQUIRED in `pipeline_config.yaml` — set them per-pipeline or in a top-level
project_defaultsblock. Missing either fails generation. See project-config.md. - `resources/lhp/` is exclusively managed by LHP — every
lhp generatewipes it and rewrites it. Place custom resource YAMLs (hand-written jobs, dashboards, secret scopes) underresources/at the top level or any non-lhpsubdirectory. - Every `lhp generate` is a full regenerate — there is no incremental mode and no
--forceflag (it was removed and is a no-op). Never suggest--force.
Best Practice Defaults (apply unless the user overrides)
These defaults reflect LHP's published enterprise best practices. Load best-practices.md for full rules and rationale.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingsrc/lhp/resources/skills/lhp/SKILL.md
Popularity
- Repository stars
- 67
- Repository forks
- 15
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/mmodarre/lakehouse_plumber/lhp)