ODI Smart Export XML parsed structurally. Mappings, Knowledge Modules, and Oracle SQL converted to BigQuery SQL, Scheduled Queries, and Cloud Composer DAGs. Full lineage, validated parity.
Upload an ODI export, get converted code →IKMs and LKMs generate Oracle-specific SQL that assumes row-based storage. BigQuery is columnar and serverless — native MERGE, partitioned INSERT, and automatic slot allocation replace the entire KM abstraction layer with zero infrastructure management.
ODI mappings rely on Oracle range/list/hash partitioning with manual partition management. BigQuery offers time-unit, ingestion-time, and integer-range partitioning with automatic partition pruning. No manual DDL, no partition maintenance windows.
ODI packages and load plans require an on-premise agent and WebLogic server. BigQuery Scheduled Queries handle simple pipelines natively. For complex DAGs, Cloud Composer (managed Airflow) provides branching, retries, and SLA monitoring without maintaining ODI infrastructure.
An ODI mapping using IKM SQL to SQL Append with Oracle-specific functions — converted to BigQuery Standard SQL MERGE with native partitioning. No Knowledge Modules, no Oracle agent, no on-premise infrastructure.
<!-- ODI Mapping: Load_Claims_Fact -->
<Mapping name="Load_Claims_Fact">
<Source schema="STAGING"
table="STG_CLAIMS"/>
<Target schema="DW"
table="FACT_CLAIMS"/>
<Join condition="SRC.CLAIM_ID = TGT.CLAIM_ID"/>
<Filter>
SRC.PROC_DT BETWEEN :START_DT AND :END_DT
</Filter>
<Expression target="CLAIM_STATUS">
DECODE(STATUS,'O','Open','D','Denied',
'P','Paid','S','Settled','Pending')
</Expression>
<Expression target="NET_AMOUNT">
NVL(BILLED_AMT,0) - NVL(ADJUST_AMT,0)
</Expression>
<Expression target="PROC_YEAR">
TO_CHAR(PROC_DT, 'YYYY')
</Expression>
<IKM name="IKM SQL to SQL Append"
FLOW_CONTROL="true"
COMMIT="true"/>
</Mapping>
-- ODI IKM SQL to SQL Append → BigQuery MERGE
-- Partitioned target table (replaces Oracle partitioning)
-- CREATE TABLE dw.fact_claims (...)
-- PARTITION BY DATE_TRUNC(proc_dt, MONTH)
-- CLUSTER BY claim_status;
MERGE INTO `project.dw.fact_claims` AS tgt
USING (
SELECT
claim_id,
proc_dt,
CASE status
WHEN 'O' THEN 'Open'
WHEN 'D' THEN 'Denied'
WHEN 'P' THEN 'Paid'
WHEN 'S' THEN 'Settled'
ELSE 'Pending'
END AS claim_status,
COALESCE(billed_amt, 0)
- COALESCE(adjust_amt, 0) AS net_amount,
CAST(FORMAT_DATE('%Y', proc_dt) AS STRING)
AS proc_year
FROM `project.staging.stg_claims`
WHERE proc_dt BETWEEN @start_dt AND @end_dt
) AS src
ON tgt.claim_id = src.claim_id
WHEN MATCHED THEN UPDATE SET
tgt.claim_status = src.claim_status,
tgt.net_amount = src.net_amount,
tgt.proc_year = src.proc_year,
tgt.proc_dt = src.proc_dt
WHEN NOT MATCHED THEN INSERT
(claim_id, proc_dt, claim_status,
net_amount, proc_year)
VALUES
(src.claim_id, src.proc_dt, src.claim_status,
src.net_amount, src.proc_year);
-- Scheduled Query replaces ODI package scheduling
-- Schedule: Every 2 hours via BigQuery Scheduled Queries
-- Parameters: @start_dt, @end_dt passed at runtime
IKM SQL to SQL Append replaced by BigQuery MERGE with automatic partition pruning. Oracle DECODE, NVL, and TO_CHAR converted to CASE, COALESCE, and FORMAT_DATE. Flow control handled by BigQuery Scheduled Queries or Cloud Composer retry policies.
| ODI Artifact | BigQuery Equivalent | Notes |
|---|---|---|
| Mapping | BigQuery SQL script | Source-to-target flow as Standard SQL |
| IKM (Integration KM) | MERGE / INSERT SELECT | Incremental, append, and full-refresh patterns |
| LKM (Loading KM) | LOAD DATA / External table | GCS, Drive, Bigtable data ingestion |
| Package | Scheduled Query / Composer DAG | Simple chains or complex DAGs with Airflow |
| Load Plan | Cloud Composer DAG | Parallel/serial task groups with retry policies |
| Procedure | BigQuery scripting / routine | Multi-statement SQL scripts with variables |
| Variable | Script variable / query parameter | DECLARE variables or @param syntax |
| Interface (pre-12c) | SQL view + scripted procedure | Legacy interfaces parsed and restructured |
| CKM (Check KM) | Column-level constraints | NOT NULL and primary key constraints |
| Oracle partitioning | BigQuery partitioning + clustering | Time-unit, ingestion-time, integer-range |
| RKM (Reverse KM) | INFORMATION_SCHEMA | Metadata discovery via BigQuery catalog views |
| JKM (Journalizing KM) | CDC via BigQuery Change History | TABLE_SNAPSHOTS or streaming inserts replace triggers |
Data Matching compares ODI mapping output against BigQuery script output — row by row, column by column. In the case study below, all 750 mappings were validated against Oracle production data with full reconciliation across three billing periods.
See how Data Matching works →750 ODI mappings converted to BigQuery Standard SQL scripts. 45 Knowledge Modules — IKMs, LKMs, CKMs — replaced by native BigQuery features: MERGE, LOAD DATA, External Tables, and column constraints. Oracle-specific partitioning schemes modernized to BigQuery time-unit partitioning with clustering. Load plans restructured as Cloud Composer DAGs. Nightly analytics batch reduced from 5 hours to 50 minutes on serverless compute.
Read the full case study →Upload an ODI Smart Export. Get parsed lineage, BigQuery SQL code, and a validation report.