> For the complete documentation index, see [llms.txt](https://academy.pentaho.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://academy.pentaho.com/pdi-developer-path-sandbox/pdi-developer/level-1-practitioner.md).

# Level 1 — Practitioner

The entry level of the PDI Developer path. 55 lessons across 7 modules, including a Pipeline Designer bonus and a capstone pipeline you build yourself. No prior Pentaho experience needed.

{% hint style="warning" %}
**🧪 SANDBOX — draft content.** For review only. Items marked REPLACE-ME need an owner's confirmation.
{% endhint %}

Start here if you're new to Pentaho Data Integration. By the end you'll have built a complete, production-shaped pipeline of your own.

{% columns %}
{% column %}

<p align="center"><i class="fa-file-lines" style="color:green;">:file-lines:</i><br><strong>55 lessons</strong><br><em>across 7 modules</em></p>
{% endcolumn %}

{% column %}

<p align="center"><i class="fa-flask" style="color:orange;">:flask:</i><br><strong>34 workshops</strong><br><em>hands-on labs</em></p>
{% endcolumn %}

{% column %}

<p align="center"><i class="fa-clock" style="color:cyan;">:clock:</i><br><strong>~11 hours</strong><br><em>2–3 weeks part-time</em></p>
{% endcolumn %}
{% endcolumns %}

{% hint style="success" icon="cloud-arrow-up" %}
Every workshop is hands-on and runs on Pentaho's hosting platform. The Lab Guide is embedded in each lab and loads automatically when you open it — nothing to install.
{% endhint %}

***

<h3 align="center">Before you start</h3>

{% columns %}
{% column %}
{% hint style="success" icon="circle-check" %}
**What you'll need**

No prior Pentaho experience is assumed. Familiarity with SQL and JavaScript will make the database and scripting modules go faster, but neither is required.
{% endhint %}
{% endcolumn %}

{% column %}
{% hint style="info" icon="tag" %}
**Built against**

Pentaho Enterprise Edition **11.0.0.3-310**. The hosted labs run this exact release, so every screen, menu and dialog matches the guide step for step.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

***

{% hint style="info" icon="trophy" %}

#### What you'll build

The level ends in a capstone project: a parameterised job that ingests CSV, JSON and master data, validates and enriches the rows, tracks historical changes with a slowly changing dimension, and loads a dimensional model.

A complete pipeline you can show a colleague — or an interviewer.
{% endhint %}

```mermaid
%%{init: {"theme":"base","themeVariables":{"fontFamily":"Arial, Helvetica, sans-serif","fontSize":"13px","lineColor":"#64748b","clusterBkg":"#fafaf9","clusterBorder":"#d6d3d1","edgeLabelBackground":"#ffffff"},"flowchart":{"curve":"basis","nodeSpacing":28,"rankSpacing":44,"padding":22,"wrappingWidth":600,"htmlLabels":true}}}%%
flowchart TB
  classDef input fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a,text-align:left,rx:6,ry:6
  classDef enrich fill:#ede9fe,stroke:#6d28d9,color:#3b0764,text-align:left,rx:6,ry:6
  classDef join fill:#ccfbf1,stroke:#0f766e,color:#134e4a,text-align:left,rx:6,ry:6
  classDef output fill:#dcfce7,stroke:#15803d,color:#14532d,text-align:left,rx:6,ry:6
  classDef check fill:#fef3c7,stroke:#b45309,color:#78350f,text-align:left,rx:6,ry:6
  classDef reject fill:#fee2e2,stroke:#b91c1c,color:#7f1d1d,text-align:left,rx:6,ry:6
  O["<b>Orders</b>&nbsp;&nbsp;&nbsp;<br/>yesterday's sales, CSV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::input
  C["<b>Customers</b>&nbsp;&nbsp;&nbsp;<br/>JSON master data&nbsp;&nbsp;&nbsp;&nbsp;"]:::input
  P["<b>Products</b>&nbsp;&nbsp;&nbsp;<br/>master data&nbsp;&nbsp;&nbsp;"]:::input
  V["<b>Validate</b>&nbsp;&nbsp;&nbsp;<br/>Filter rows: keys present,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>values convert&nbsp;&nbsp;&nbsp;&nbsp;"]:::check
  R["<b>Rejects</b>&nbsp;&nbsp;&nbsp;<br/>bad rows, logged,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>written to a file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::reject
  ST[("<b>Staging tables</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>stg_orders, stg_customers,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>stg_products, in MySQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")]:::output
  J["<b>Enrich and calculate</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Merge join, Stream lookup,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Formula&nbsp;&nbsp;&nbsp;"]:::join
  D["<b>SCD Type 2 on regions</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Dimension lookup/update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::enrich
  F[("<b>Dimensional model</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>fact_sales and dim_region&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")]:::output
  X["<b>Excel summary</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>sales by region&nbsp;&nbsp;&nbsp;&nbsp;"]:::output
  O --> V
  C --> V
  P --> V
  V -->|"good rows&nbsp;&nbsp;&nbsp;"| ST
  V -.->|"bad rows&nbsp;&nbsp;&nbsp;"| R
  ST --> J
  ST --> D
  J --> F
  D --> F
  F --> X
```

<p align="center"><em>The capstone, run as one parameterised, logged job: three inputs validated and staged, enriched, tracked with a slowly changing dimension, and loaded as a dimensional model.</em></p>

***

<h3 align="center">What you'll learn</h3>

{% columns %}
{% column %}

* Configure Spoon and the KETTLE variables that drive it
* Build transformations from steps, hops and rows, with logging and error handling
* Read and write text, JSON, XML and Excel
  {% endcolumn %}

{% column %}

* Work with relational databases, including CRUID and slowly changing dimensions
* Join, look up, merge and script your way through data enrichment
* Move pipelines into production with jobs, parameters, variables and run configurations
  {% endcolumn %}
  {% endcolumns %}

***

<h3 align="center">Course outline</h3>

<p align="center"><i class="fa-file-lines" style="color:green;">:file-lines:</i> reading · <i class="fa-flask" style="color:orange;">:flask:</i> hands-on workshop</p>

{% hint style="info" icon="circle-info" %}
Full lessons unlock once you're enrolled — this is the outline only.
{% endhint %}

<table><thead><tr><th width="306">Module</th><th width="114" align="center">Reading</th><th width="139" align="center">Workshops</th><th width="100" align="right">Time</th><th>Videos</th></tr></thead><tbody><tr><td>Getting Started</td><td align="center">1</td><td align="center">—</td><td align="right">~15m</td><td></td></tr><tr><td>Components &#x26; Concepts</td><td align="center">1</td><td align="center">5</td><td align="right">~1h 10m</td><td></td></tr><tr><td>Data Sources</td><td align="center">6</td><td align="center">13</td><td align="right">~4h 25m</td><td></td></tr><tr><td>Enriching the Dataset</td><td align="center">5</td><td align="center">9</td><td align="right">~2h 25m</td><td></td></tr><tr><td>Enterprise Solution</td><td align="center">5</td><td align="center">6</td><td align="right">~2h 05m</td><td></td></tr><tr><td>Bonus — Pipeline Designer</td><td align="center">2</td><td align="center">1</td><td align="right">REPLACE-ME</td><td></td></tr><tr><td>Capstone Project</td><td align="center">—</td><td align="center">1 project</td><td align="right">—</td><td></td></tr><tr><td><strong>Total</strong></td><td align="center"><strong>20</strong></td><td align="center"><strong>34</strong></td><td align="right"><strong>~11h</strong></td><td></td></tr></tbody></table>

{% stepper %}
{% step %}

### <i class="fa-rocket" style="color:blue;">:rocket:</i> Getting Started

`1 reading · ~15m`

How to get the most out of this course, and how your lab environment is set up. Five minutes here makes every later lab smoother.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>How to get the best out of this course</td><td>~15m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-diamonds-4" style="color:blue;">:diamonds-4:</i> Components & Concepts

`1 reading · 5 workshops · ~1h 10m`

The pieces of Pentaho and the vocabulary that runs through every later lab. Meet the client tools and server components, configure Spoon and the KETTLE variables that drive it, then build a 'Hello World' transformation covering steps, hops, rows and the run/preview cycle — finishing with logging and error handling.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Components and Key Concepts</td><td>~15m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Configuring PDI</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>KETTLE Variables</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Hello World</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Logging</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Error Handling</td><td>~10m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-database" style="color:blue;">:database:</i> Data Sources

`6 readings · 13 workshops · ~4h 25m`

Read and write the formats and systems you'll meet daily — text, JSON, XML and Excel; relational databases, covering CRUID and slowly changing dimensions; and object storage with MinIO.

<details>

<summary>See the full breakdown</summary>

<table><thead><tr><th width="78"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Overview</td><td>~10m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Flat Files</td><td>~5m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Text File Input</td><td>~20m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Text File Output</td><td>~25m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Read JSON</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Read XML</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Excel Writer</td><td>~20m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Databases</td><td>~5m</td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review CRUID</td><td>~5m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Connecting to a Database</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Reading from a Database</td><td>~20m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Writing to a Database</td><td>~20m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Table Update</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Table Insert — Update</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Deleting Records</td><td>~10m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review SCDs</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Slowly Changing Dimensions</td><td>~25m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Storage</td><td>~5m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>MinIO</td><td>~15m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-diagram-venn" style="color:blue;">:diagram-venn:</i> Enriching the Dataset

`5 readings · 9 workshops · ~2h 25m`

Shape data inside the pipeline: joins across databases, streams, rows and XML; lookups; merge-streams patterns; and scripting with Formula and Modified JavaScript Value when SQL alone isn't enough.

<details>

<summary>See the full breakdown</summary>

<table><thead><tr><th width="80"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Overview</td><td>~5m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Merge</td><td>~5m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Merge Streams</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Merge Streams (diff)</td><td>~15m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Joins</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Database Join</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Join Rows</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Merge Join</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>XML Join</td><td>~15m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Lookups</td><td>~5m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Database Lookups</td><td>~15m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Scripting</td><td>~5m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Formula</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Modified JavaScript Value (MJV)</td><td>~10m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-gears" style="color:blue;">:gears:</i> Enterprise Solution

`5 readings · 6 workshops · ~2h 05m`

Move from individual transformations to production: jobs, parameters and variables, metadata injection, and run configurations. Get your pipelines ready for scheduling, monitoring and shipping.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="77"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Overview</td><td>~5m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Jobs</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Hello World (Job)</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Order of Execution</td><td>~10m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Metadata Injection</td><td>~5m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Onboarding to a Table</td><td>~15m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Parameters</td><td>~5m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Parameters</td><td>~20m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Parameters SQL</td><td>~15m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review Scalability</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Run Configurations</td><td>~20m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-gift" style="color:purple;">:gift:</i> Bonus — Pipeline Designer

`2 readings · 1 workshop · REPLACE-ME`

Included with this level. Everything up to here has been the desktop client. Pipeline Designer is the browser-based alternative — a server-side plugin installed with Pentaho Server, giving you a web interface for designing, running and managing the same transformations and jobs.

The concepts carry straight over — nodes, hops, transformations and jobs are the same ideas you already know — so this module is about the interface rather than the fundamentals.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Pipeline Designer — what it is, Design and XML views, managing your work</td><td>REPLACE-ME</td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Concepts &#x26; Terminology — transformations, hops, jobs, notes, data movement</td><td>REPLACE-ME</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Hello World — build a simple transformation</td><td>REPLACE-ME</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-trophy" style="color:orange;">:trophy:</i> Capstone Project

`1 project`

Bring it all together: build a parameterised job that ingests CSV, JSON and master data, validates and enriches the rows, tracks historical changes with an SCD, and loads a dimensional model — a complete, interview-ready pipeline.

<details>

<summary>See the project brief</summary>

You're a freshly-onboarded data engineer at a regional retailer. The analytics team needs **yesterday's sales** ready by 9am every morning, joined with customer and product master data, with historical attribute changes tracked, validated, and loaded into a dimensional model the BI tools can query.

</details>
{% endstep %}
{% endstepper %}

***

{% columns %}
{% column %}
{% hint style="warning" icon="file-certificate" %}
**Course accreditation**

Course accreditation applies to Levels 1 and 2. Finish the lessons and workshops and pass the exam embedded in the guide, and you'll automatically be able to download your course accreditation. It states your name, the course, and the Pentaho version you studied against. Unlike certification, this exam is self-paced and not proctored.
{% endhint %}
{% endcolumn %}

{% column %}
{% hint style="warning" icon="award" %}
**Certification**

Certification is only available at Level 3 — Certified — not this level. It's a separate, proctored credential that organisations look for when engaging Pentaho consultants: the more advanced courses and Speciality courses feed into it, the Level 3 capstone project is peer reviewed by the Pentaho team, and the exam itself is proctored — unlike the embedded exam for course accreditation.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

***

<p align="center"><a href="/pdi-developer-path-sandbox/pdi-developer.md" class="button secondary" data-icon="arrow-left">Back to the PDI Developer path</a></p>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://academy.pentaho.com/pdi-developer-path-sandbox/pdi-developer/level-1-practitioner.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
