Lima Backbone Pipelines

Build the pipeline step by step, and see the data at every step.

A pipeline is drawn on a visual canvas, one step at a time. Every step writes its output to a table you can open, so you can check the rows before you add the next step. There are 150+ operators for the common work, and Python for anything else.

PIPELINE CANVAS · OTIF_NIGHTLY · SHOWCASE ESTATE EVERY BOX IS A TABLE YOU CAN OPEN SAP.VBEP ORDER LINES EDATU = requested delivery date KWMENG = ordered quantity 841K order lines WMS.DISPATCH DISPATCHES DISPATCH_DATE = date sent FULFILLED_QTY = quantity sent one row per dispatch STEP 1 · JOIN Join on order line same order number, same line number 841K rows STEP 2 · RULE On time and in full? sent by the requested date, with the full quantity 841K rows · yes/no added STEP 3 · GROUP BY OTIF % per group customer, category, and week 218K rows OUTPUT · VIEW Certified view v_otif_daily 5 golden tests 218K rows 218 exception rows → owners customer-weeks below 90%, each sent to its owner 218 rows · exception records
The on-time-and-in-full pipeline on the showcase estate. A supply-chain analyst built it in about two hours with the visual operators. Every box is a table with its own row count; the counts shown are from the nightly run.
150+
operators for cleaning, joining, checking and calculating
40+
connectors: ERPs, databases, files, streams, applications
2 hrs
to build the OTIF pipeline, with 0 lines of SQL
8
templates to start from
product
5
golden tests over 218K rows guard the certified view
showcase estate
80 GB/day
moved and transformed every day
production · semiconductor enterprise
What it does

What a pipeline is

A pipeline moves data from one system to another and changes its shape on the way.

Every pipeline has the same three parts. It reads data from a source, such as an ERP table or a file. It changes the data: cleans it, joins it with other data, and calculates new columns. It writes the result to a target, such as a data warehouse or a planning application. The three parts are called extract, transform and load.

On the Backbone, every step writes its output to a table of its own before the next step reads it. While you build, you can open any of those tables and see its rows, the columns that came in, the columns that went out, and the record count. When you change a step, the tables after it are rebuilt from that point.

The product calls these linked tables. They are the reason a pipeline can be checked step by step on real data, and the reason one pipeline can reuse a table that another pipeline produced.

ExtractRead the data from the source: the whole table, the rows that changed since the last run, or every change as it happens.
TransformClean, join, convert and calculate until the data has the shape the target needs. Each operator on the canvas is one transform step.
LoadWrite the result to the target: insert rows, update rows in place, replace the table, or replace one partition of it.
Read SAP.VBEPstep 1 Table 1rows, columns, count Join dispatchesstep 2 reads table 1 Table 2rows, columns, count Apply the rulestep 3 reads table 2 Table 3rows, columns, count each step writes a table · the next step reads it · any table can be opened while you build
The first three steps of the OTIF pipeline with the table each one writes. A table can be opened at any time to see its rows, its input and output columns and its record count.
How it works

How you build one, step by step

The same seven steps apply to a nightly copy and to a planning load.

Connect a sourceRegister the ERP, database or file location once. The credentials go into the credential vault, the connection is tested, and the table list is read from the source.
Pick tables and columnsChoose the tables and the columns you need. Every column is profiled on the way in: its type, how many values are empty, and the range of values it holds.
Add operatorsDrag operators onto the canvas: a join, a lookup, a calculation, a rule. Each operator writes its output to a table of its own, so the next operator can read it.
Run on a sample and look at each stepRun the pipeline on a sample of the data. Open any step to see its rows, its input and output columns and its record count. Fix a step and run again.
Add testsSave a small input together with its known correct output as a golden test. The tests run again on every later change, so a change that alters the result is caught before the result reaches anyone.
Schedule itHand the pipeline to orchestration: a time, an event, or a business deadline such as the 06:00 planning run. How scheduling works →
Watch it runEvery run records the record count per step and the lineage of every output table, which is the list of tables it was built from. When a rule fails, the run is held and the owner of the pipeline is told.
On SAP and on Oracle

Reading from your ERP: SAP and Oracle

Backbone reads an ERP through the interfaces the vendor supports. The pipeline canvas is the same for both.

An ERP is the system that holds orders, stock, materials and finance. The table sets SAP and Oracle side by side: how tables are read, how changed rows are read, which other editions are covered, and what is left out.

SAP ECC and S/4HANAOracle E-Business Suite (EBS) and Oracle ERP
How tables are readThrough released function modules, BAPIs and CDS views. A BAPI is a function SAP publishes for reading or writing one business object, such as an order. A CDS view is a database view that SAP defines and releases.Through JDBC, the standard database connection. A large table is split into partitions so that several threads read it at the same time.
Incremental readsApplication-level change capture: change pointers, table-level change capture, delta-enabled CDS views and extractor delta queues. Each path returns the rows that changed since the last read.By a last-update column on each table. Where the database administrator allows it, LogMiner change capture reads the changes from the database log.
Other editionsSAP BW, SAP’s data warehouse, is read through its own connector.Oracle Cloud is read through its released APIs and extracts. An API is an interface a system publishes for other programs to call.
What is left outThe ODP-RFC replication interface and HANA database log capture are left out, because SAP Notes 3255746 and 2971304 restrict their use by third-party tools.Reads use a standard database user with read grants. The database keeps its standard setup.

The full statement for SAP and Oracle, method by method →

Operators

Operators by family

An operator is one step on the canvas. The 150+ operators fall into four families.

FamilyWhat it doesExamples
CleansingPuts values into a consistent form before anything is built on them.Trim and standardise text; fill or reject empty values; find duplicates, exact or fuzzy; convert types.
EnrichmentAdds columns from other data or from a calculation.Lookup; derived columns; aggregation; pivot and unpivot, which turn rows into columns and back.
ValidationChecks each row against a rule and separates the rows that fail.Format and pattern (regex); range; referential integrity, which checks that a key exists in the table it points to; business rules.
AdvancedRuns code or a model as a step.Machine-learning model scoring; Python scripts; calls to a web service (REST API); SQL with window functions, which calculate across a set of related rows.
When you need your own code

Python Script Transformer. Write Python as a step on the canvas. It reads the table before it and writes the table after it, like any other operator.

Job Server. Run a program as a step: .py .java .scala .jar .R .sql .exe. The pipeline passes parameters in, and captures the errors and the output files.

Modes

Extract and load modes

How the data is read from the source, and how it is written to the target, are settings on each pipeline.

Four ways to read

Extract modeWhat it does
FullReads the whole table or view. Used for a first load, for small reference tables and for archive extracts.
IncrementalReads only the rows past a marker column, such as a last-update timestamp or a sequence number, and records the new marker at the end of the run.
Change captureReads every insert, update and delete from the source’s own record of changes, with the values before and after. Change capture →
Event-drivenReads from Kafka, Kinesis or Azure Event Hubs in micro-batches: small groups of events processed together, at an interval set from seconds to minutes.

Four ways to write

Load modeWhat it does
InsertAdds the rows to the target.
Upsert (merge)Adds a row when its key is new, and updates the row when the key already exists.
Truncate and loadEmpties the target and writes the full result. Used for small tables that are rebuilt on each run.
Partition loadReplaces one partition, such as a date, a plant or a company code, and leaves the rest of the table as it is.

Every load is set up for its target. The batch size, the number of parallel writes and the file format are settings, chosen for the warehouse, lakehouse, database, file location or planning application the data goes to.

Patterns

ETL, ELT, or a mix

The three letters stand for extract, transform and load. The order of the letters says where the transform runs.

In ETL, the data is transformed on the Backbone’s own engine and the finished tables are loaded into the target. In ELT, the raw data is loaded first and the transform runs on the warehouse’s own compute. A mix does a light clean on the way in and the heavy transforms in the warehouse.

The pattern is a setting on each pipeline. The licence is sized by the capacity you run on, so all three patterns cost the same.

PatternWhere the transform runsWhen to choose itExample
ETLOn the Backbone engine, before the load.The target has no compute of its own, such as a planning application, an API or a file. Or the transform is heavy, such as a bill-of-materials explosion.SAP order, stock and material tables are transformed into the planning dataset and loaded into Kinaxis before the 06:00 planning run.
ELTIn the warehouse, after the raw data has landed.The target is a warehouse with its own compute and the modelling team writes its transforms in SQL there. dbt, a tool such teams use for SQL transforms, runs in the same schedule.Oracle EBS tables land raw in Snowflake every night, and the warehouse builds the reporting tables from them.
A mixA light clean on the Backbone engine, the heavy transforms in the warehouse.You want profiling, standard formats and exception records on the way in, and warehouse-side modelling after that.Customer records from SAP and Oracle are standardised and de-duplicated on the way in; sales reporting is modelled in the warehouse.
Templates

Eight templates to start from

A template is a pipeline with the pattern, the operators and the load mode already chosen. Point it at your connection and your column mapping.

ERP full extractReads the tables you choose from SAP or Oracle, in parallel, with a row count per table at the end.SAP · ORACLE
Change-capture syncKeeps a copy current with the inserts, updates and deletes from the source, applied in order.CHANGE CAPTURE
Multi-source mergeBrings records from several systems into one table, with duplicates matched exactly or fuzzily.SAP + ORACLE + WAREHOUSE
Lakehouse landingLands tables in date partitions, in the file format the lakehouse reads fastest.SNOWFLAKE · DATABRICKS · FABRIC · S3
Warehouse refreshLoads dimension and fact tables. When a dimension row changes, the old row is kept with an end date and a new row is added (a slowly changing dimension).DIMENSIONS · FACTS
MDM synchronisationMaster data management. Sends master data records out to the systems that use them, and corrected records back to the system they came from.MASTER DATA
Kinaxis first loadThe first planning dataset from SAP or Oracle, reconciled table by table, then kept current with changes.PLANNING
o9 foundation loadThe foundation dataset for o9, with the master-data hierarchies it plans on.PLANNING
Tests

Tests that catch a changed column

The tests run again on every change to the pipeline and on every run where the source columns changed.

A golden test is a saved input with a known correct output. When the pipeline changes, or when the columns of a source change, every golden test runs again and compares its output with the saved result. A test that fails names the column and the step.

On the showcase estate, five golden tests over 218K rows sit behind the certified view v_otif_daily. One night the SAP extract arrived with the column EDATU, the requested delivery date, under a new name. The sequence on the right is what happened.

The same test catches a changed column in an Oracle view. When a column in the Oracle extract is renamed or changes its type, the test that depends on it fails in the same way and the same hold applies.

A certified view is a table that has passed its tests and is marked as safe to use. Draft is the status before that.

detect
A source column arrives under a new nameThe SAP extract lands with EDATU, the requested delivery date, renamed. The input columns of the join step differ from the columns the tests were saved with.
re-run
The five golden tests run againEach test runs its saved input through the changed pipeline, over 218K rows, and compares the output with the saved correct result.
fail
One test failsThe date-alignment test reports the column, the step and the columns it expected.
draft
The certified view goes back to Draftv_otif_daily loses its certified status. Every dashboard that reads it shows the status in place of a number.
hold
The batch is heldThe run keeps its checkpoint, the saved position of the last completed step, and waits. The tables after the failed step are left as they were.
fix
The engineer corrects the mappingThe engineer receives the failed test with its message, corrects the column mapping on the canvas, and the tests pass. The view is certified again and the batch resumes.
Worked example

A worked example: on time and in full (OTIF)

OTIF is a delivery measure. It counts the order lines a customer received on time and complete.

An order line counts as on time and in full when two things are true. It was dispatched on or before the requested delivery date. And the dispatched quantity equals the ordered quantity. OTIF % for a customer in a week is the number of such lines divided by all lines in that week.

On the showcase estate the rule marks a customer-week below 90% as an exception, so the supply-chain team sees which customers fell short and by how much. The pipeline runs every night on 841K order lines, finds 218 exception rows, and refreshes the certified view v_otif_daily. A supply-chain analyst built it in about two hours with the visual operators and 0 lines of SQL.

Read the order lines from SAPSAP.VBEP holds the requested delivery date (EDATU) and the ordered quantity (KWMENG) for each order line: 841K rows in the nightly run.
Read the dispatches from the warehouse management system (WMS)WMS.DISPATCH holds the dispatch date and the quantity sent for each order line.
Join on the order lineEach order line is matched with its dispatch. The output has one row per order line, with both dates and both quantities.
Apply the ruleA row is on time and in full when the dispatch date is on or before the requested date and the quantity sent equals the quantity ordered. The result is a yes or no column on each row.
Group by customer, category and weekOTIF % = lines on time and in full ÷ all lines in the group. The output has one row per customer, category and week: 218K rows.
Send the exceptions to their ownersA customer-week below 90% is an exception. The 218 exception rows from the nightly run go to the person who owns each customer, with the lines that caused the shortfall. How exceptions are routed →
Publish the certified viewv_otif_daily is the table the board report, the supply-chain report and the OTIF API read. Five golden tests over 218K rows guard it.
Where this sits

Steps one, three and four of the six.

Step six sends results back to the system they came from, and that system confirms each write.
Any source.Any target.Any pattern.Any volume.Priced by capacity.HOW THE ENGINE SCALES → /platform/backbone/scale
Terms on this page

Plain meanings.

ETL and ELTExtract, transform, load. In ETL the transform runs on the Backbone engine before the load. In ELT the raw data is loaded first and the transform runs in the warehouse. Backbone runs both, and a mix.
OperatorOne step on the canvas: a join, a lookup, a calculation, a rule, a script. Each operator reads a table and writes a table.
Intermediate (linked) tableThe table an operator writes for the next operator to read. It can be opened at any time to see its rows, its input and output columns and its record count.
Golden testA saved input with its known correct output. It runs again on every change, and a difference in the output fails the test.
Certified viewA table that has passed its tests and is marked as safe to use. Draft is the status before that, and the status a view returns to when a test fails.
UpsertA load that adds a row when its key is new and updates the row when the key already exists.
Partition loadA load that replaces one partition of a table, such as one date or one plant, and leaves the rest as it is.
Marker (watermark) columnA column such as a last-update timestamp or a sequence number. An incremental read takes only the rows past the value recorded at the end of the previous run.
OTIFOn time and in full. An order line counts when it was dispatched on or before the requested delivery date with the full ordered quantity. OTIF % is such lines divided by all lines.
Questions

Asked before the first pipeline.

Do analysts need SQL to build a pipeline?

The visual operators cover the common work: reading, joining, cleaning, calculating, checking and grouping. On the showcase estate a supply-chain analyst built the OTIF pipeline in about two hours with 0 lines of SQL, the query language of databases. SQL is available as an operator for the cases that need it.

Can we use our own Python?

Yes. The Python Script Transformer runs your Python as a step on the canvas; it reads the table before it and writes the table after it. The Job Server runs a whole program as a step, in Python, Java, Scala, R or SQL, with parameters passed in and errors and output files captured.

Can we read Oracle EBS the same way as SAP?

The canvas and the operators are the same. The reading method differs. SAP is read through released function modules, BAPIs, CDS views and application-level change capture. Oracle EBS is read through JDBC with parallel partitions, with last-update columns for incremental reads and LogMiner change capture where the database administrator allows it. Oracle Cloud is read through its released APIs and extracts.

What happens when a source column changes?

Every column is profiled on the way in, and the golden tests run again whenever the columns of a source change. A test that fails names the column and the step, sets the certified view back to Draft and holds the batch. Once the mapping is corrected and the tests pass, the view is certified again and the run resumes from its checkpoint. This applies to SAP and Oracle sources alike.

Where does data sit between steps?

In the Backbone’s own storage: a distributed file system and an in-memory layer. Extracted data lands there as it was read, and every operator writes its output table there. Lineage is recorded for each table, and the platform’s access rules apply to it.

Run your first load.

Four weeks, one dataset, one target: your ERP into a data lake or a planning application, with a reconciliation report at the end.