> 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/solution-architect-path-sandbox/solution-architect/di-developer-practitioner.md).

# DI Developer — Practitioner

Level 1 of the Solution Architect path: DI Developer — Practitioner. 37 lessons across 6 modules: build, run and operate Pentaho Data Integration pipelines, ending in a capstone project.

{% hint style="warning" %}
**🧪 SANDBOX — draft content, built from `developer-di-practitioner` 0.1.27 in Pentaho Content Manager.** Module and lesson names, the reading-or-workshop kinds and the times come straight from each lab's manifest. Items marked REPLACE-ME need an owner's confirmation.
{% endhint %}

The first step on the Solution Architect path: learn Pentaho Data Integration the way a practitioner uses it. By the end you'll build, run and operate real pipelines — reading and writing files, databases and object storage, enriching and joining the data in flight, and packaging it all as parameterised jobs — and you'll have delivered a complete daily sales pipeline of your own as the capstone.

{% columns %}
{% column %}

<p align="center"><i class="fa-file-lines" style="color:green;">:file-lines:</i><br><strong>37 lessons</strong><br><em>across 6 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>~12h 15m</strong><br><em>two to three days, or a week of evenings</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**

Familiarity with the basics of data integration — tables, files, keys and the idea of a pipeline. No prior Pentaho experience is assumed, and comfort with SQL will make the database and scripting modules go faster. The hosted lab provides Pentaho Data Integration, MySQL and MinIO, all started for you as you sign in.
{% endhint %}
{% endcolumn %}

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

REPLACE-ME — confirm the Pentaho Data Integration release the hosted labs run, so screens and menus match the guide step for step. The PDI Developer path's Level 1 page cites Enterprise Edition 11.0.0.3-310.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

***

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

#### What you'll build

A complete Daily Sales Pipeline: 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. On the way there you'll have built pipelines against text, JSON, XML and Excel files, a MySQL database and MinIO object storage; joined, looked up and merged data in flight; scripted with Formula and JavaScript; and run it all through jobs with parameters and run configurations — the skills the Installation and deployment courses that follow take for granted.
{% 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 Daily Sales Pipeline capstone: three sources staged, validated and enriched into a dimensional model and an Excel summary, all run by one job</em></p>

***

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

{% columns %}
{% column %}

* How Pentaho's client tools and server components fit together, and the vocabulary that runs through every lab — steps, hops, rows, transformations and jobs
* Configure Spoon and the KETTLE variables that drive it, then build a 'Hello World' transformation with logging and error handling
* Read and write text, JSON, XML and Excel files
* Work with relational databases — connect, read, write, update, insert-update and delete — and track history with slowly changing dimensions
  {% endcolumn %}

{% column %}

* Read from and write to object storage with MinIO
* Shape data in flight with database, merge, XML and row joins, lookups and merge-streams patterns, and script with Formula and Modified JavaScript Value when SQL alone isn't enough
* Move pipelines into production with jobs, order of execution, parameters and variables, metadata-driven table onboarding and run configurations
* Deliver an end-to-end pipeline — the capstone — that ingests, validates, enriches and loads a dimensional model
  {% 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. Times are the lab guides' own estimates.
{% endhint %}

<table data-search="false"><thead><tr><th width="382">Module</th><th width="115" align="center">Reading</th><th width="132" align="center">Workshops</th><th width="100" align="right">Time</th></tr></thead><tbody><tr><td>Getting Started</td><td align="center">1</td><td align="center">—</td><td align="right">~20m</td></tr><tr><td>Components &#x26; Concepts</td><td align="center">—</td><td align="center">5</td><td align="right">~1h</td></tr><tr><td>Data Sources</td><td align="center">2</td><td align="center">13</td><td align="right">~4h 50m</td></tr><tr><td>Enriching the Dataset</td><td align="center">—</td><td align="center">9</td><td align="right">~2h 35m</td></tr><tr><td>Enterprise Solution</td><td align="center">—</td><td align="center">6</td><td align="right">~1h 30m</td></tr><tr><td>Capstone Project</td><td align="center">—</td><td align="center">1</td><td align="right">~2h</td></tr><tr><td><strong>Total</strong></td><td align="center"><strong>3</strong></td><td align="center"><strong>34</strong></td><td align="right"><strong>~12h 15m</strong></td></tr></tbody></table>

{% stepper %}
{% step %}

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

`1 reading · ~20m`

How to get the most out of this guide, and how to set your machine up — whether you are on a lab VM or installing on your own laptop. 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>Before You Start</td><td>~20m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

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

`5 workshops · ~1h`

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-flask" style="color:orange;">:flask:</i></td><td>Configuring Pentaho Data Integration</td><td>~10m</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>~15m</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>~15m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

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

`2 readings · 13 workshops · ~4h 50m`

Read and write the formats and systems you'll meet daily — text, JSON, XML, Excel; relational databases (CRUID + slowly changing dimensions); and the big-data layer: Hadoop, Jupyter, SMB, Snowflake, MinIO.

<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>Review CRUID</td><td>~10m</td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Review SCDs</td><td>~20m</td></tr><tr><td></td><td></td><td></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>~20m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Excel Writer</td><td>~30m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Connecting to Database</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Reading from a Database</td><td>~30m</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>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Table Insert - Update</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Deleting Records</td><td>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Slowly Changing Dimensions</td><td>~20m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>MinIO</td><td>~30m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-wand-magic-sparkles" style="color:blue;">:wand-magic-sparkles:</i> Enriching the Dataset

`9 workshops · ~2h 35m`

Shape data inside the pipeline: joins (database, merge, XML, row), lookups, merge-streams patterns, and scripting (Formula, Modified JavaScript Value) when SQL alone isn't enough.

<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-flask" style="color:orange;">:flask:</i></td><td>Merge Streams</td><td>~25m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Merge Rows (diff)</td><td>~20m</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>~25m</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>~30m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Database Lookups</td><td>~15m</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</td><td>~10m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

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

`6 workshops · ~1h 30m`

Move from individual transformations to production: jobs, parameters and variables, and scalability (master/slave, partitioning). Get your pipelines ready for scheduling, monitoring, and shipping.

<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-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>~15m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Onboarding to a Table</td><td>~25m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Parameters</td><td>~10m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Parameters SQL</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-trophy" style="color:blue;">:trophy:</i> Capstone Project

`1 workshop · ~2h`

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 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-flask" style="color:orange;">:flask:</i></td><td>Daily Sales Pipeline</td><td>~2h</td></tr></tbody></table>

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

***

<h3 align="center">Exam &#x26; accreditation</h3>

{% columns %}
{% column %}
{% hint style="info" icon="clipboard-check" %}
**The course exam**

40 questions drawn at random from a pool of 50, covering the five taught modules — Getting Started, Components & Concepts, Data Sources, Enriching the Dataset and Enterprise Solution. The pass mark is 80%. It's open-book: browse any module or ask the AI assistant while you work. The Capstone Project is assessed by its own lab checks rather than by the exam.
{% endhint %}
{% endcolumn %}

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

Finish the lessons and workshops, pass the exam and complete the capstone's checks, and you'll automatically be able to download your course accreditation — Pentaho Data Integration Developer, Practitioner Level. It states your name, the course and the Pentaho version you studied against, and is valid for two years. The exam is self-paced and not proctored.

This course is the first step on the Certified Solution Architect learning path: DI Developer — Practitioner, then Installation — Certified, the Containers, High Availability and Enterprise Security Speciality courses, leading to the Certified Solution Architect credential.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

***

<p align="center"><a href="https://academy.pentaho.com/solution-architect-path-sandbox/" class="button secondary" data-icon="arrow-left">Back to the Solution Architect 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/solution-architect-path-sandbox/solution-architect/di-developer-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.
