Skip to main content

PDI pre-migration audit risks

The audit (hop-import -t pdi-audit, or File → Audit a PDI project before a migration…) writes pre-migration-audit.md and audit.json. The report has four sections:

SectionWhat it holds
InventoryJobs (transformations and jobs alike), reusable parts (the sub-transformations Mapping steps call), steps and entries, jobs no other job runs, steps with code and their lines of code
Expected conversionThe count per status, from Apache Hop's Kettle import run into a temporary folder
RisksEach risk found, its level, the number of jobs it is in, what it means and what reduces it
Not in the auditWhat the files cannot tell: schedules, JDBC drivers and plugins in PDI's folders, a repository's content

audit.json holds the same, with a few examples of each risk.

Risks​

RiskLevelWhat it meansWhat reduces it
Code that calls the Pentaho APIHIGHUser Defined Java Classes and scripts that use PDI's classes do not compile or run in Hop until they use Hop's APIPort each one to Hop's API (org.apache.hop) and test it on sample rows
Steps and entries without a Hop pluginHIGHHop opens them as missing pluginsDecide per type: a Hop transform that does the same, a plugin, or a rebuild
Steps the import did not writeHIGHApache Hop's Kettle import wrote no transform or action for themCheck the import log for these files
Connections no file definesHIGHSteps and entries name a connection that is in no file and not in the shared.xml given, so there is nothing to connect toImport with the project's shared.xml, or define the connections in Hop's metadata
Clustered stepsHIGHHop has no cluster schemas: the steps run in one processCheck the volumes; scale out with more copies of a transform, a remote run configuration, or Apache Beam
Steps to replace, or to install as pluginsMEDIUMHop has no plugin with their PDI id; some exist as separate pluginsInstall the plugin in every Hop that runs the project, or replace the step
Database types without a Hop database pluginMEDIUMThe connections are imported as Generic connections, without a URL or driverInstall the database plugin, or set the URL and driver class of each connection
Connections with one name and different settingsMEDIUMHop keeps one connection per name; the import saves the first settings it meetsDecide per connection which settings are right; give the others their own name or variables
Log tablesMEDIUMThe import leaves out transformation, step and job log tablesLog with Hop's Pipeline Log and Workflow Log, or execution information; move the reports that read the old tables
Execution on slave servers (Carte)MEDIUMThe import leaves out slave servers; the steps and entries run locallyRun them on a Hop Server through a remote run configuration
Partitioned stepsMEDIUMThe import leaves out partition schemasDefine the partition schemas again in Hop's metadata and set them on the transforms
Metadata InjectionMEDIUMHop has Metadata Injection, but the injection keys of some transforms differ from PDI'sOpen each injection in Hop and check that every key is mapped
References through a PDI repositoryMEDIUMHop has no repository: these steps and entries name a job or transformation in the repository, not a fileExport the repository to files and check each reference
Variables the project does not defineMEDIUMTheir values come from kettle.properties, the scheduler or the command linePut a value for each in the Hop environment of every stage
KETTLE_ settings in kettle.propertiesMEDIUMThe import copies them as variables, but Hop reads its settings under HOP_ namesSet the HOP_ equivalent of each one
SQL with variablesMEDIUMOnly a run shows what the queries becomeRun the converted files with the production values on a test database
Operating system commandsMEDIUMThe commands must exist, and behave the same, where Hop runsCheck each command on the target servers
Names and values with .ktr or .kjbLOWThe import replaces .ktr and .kjb in all text: file references, but also step names, URLs and constantsCheck the steps the report lists, and any value that should keep .ktr or .kjb
JDBC drivers Hop does not shipLOWThese connections need their driver in Hop's lib/jdbcCopy the drivers from PDI's lib/ folder into every Hop that runs the project
Hard-coded file pathsLOWDrive letters, shares and absolute paths must exist where Hop runsMove the paths into variables of the environment
Formula stepsLOWThey run as Hop's OpenFormula transform, which evaluates PDI's formula syntaxCompare the results of the formulas on test data
Data Validator stepsLOWNot every validation carries overTest each validation with rows that must fail

The levels say how much a risk can cost, not how often it occurs. Read the number of jobs next to each one: one HIGH risk in two files can be less work than a MEDIUM one in two hundred.

Why and how to move, and how we help: Migrations to Apache Hop, and from Pentaho PDI in particular.