{"ref":"artifact:datazoode-erpl","page":"/artifacts/datazoode-erpl","json":"/artifacts/datazoode-erpl.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"datazoode-erpl","name":"ERPL","artifact_type":"package","ecosystem":"abap","domain":"data-and-persistence","secondary_domains":["integration-and-messaging"],"origin_ring":"independent","use_as":"dependency","description":{"one_line":"A DuckDB extension that reads SAP ERP tables, CDS views and BW queries from SQL over RFC, BICS and ODP, and can mount an SAP system as a DuckDB catalog to join against other data.","short":"DuckDB extension reading SAP ERP tables, CDS views and BW queries","what_it_solves":"Four extensions behind one `LOAD 'erpl'`: `erpl_rfc` reads SAP ERP tables and CDS views over RFC and invokes any function module, `erpl_bics` runs SAP BW cubes and queries over BICS with hierarchies and lineage, `erpl_odp` extracts over SAP ODP in full and delta, and `erpl_ape` reads CDS entities through the ABAP Pipeline Engine with deletes included in the delta. An SAP system can also be mounted as a DuckDB catalog with `ATTACH`, after which `sap.\"/DMO/FLIGHT\"` joins against a CSV in the same query. The install is a trampoline: the `erpl` extension carries the [SAP NetWeaver RFC SDK](external:sap-nw-rfc-sdk) libraries and the sub-extension binaries in its own payload and extracts them on first load, so there is no SDK to fetch from SAP, but DuckDB has to be started with `-unsigned` because the binaries are not signed by DuckDB Labs. The split is commercial as well as technical: the gratis Community Edition queries SAP ERP tables, and querying SAP Business Warehouse and replicating via ODP are Enterprise Edition.","when_not_to_use":"DataZoo GmbH calls the extension experimental and states that minimal testing and benchmarking were done. The Business Source License 1.1 it carries restricts offering the software to third parties on a hosted or embedded basis, so an embedding product needs a commercial licence. Telemetry is on by default and is switched off per session with `SET erpl_telemetry_enabled = false` or for the machine with `DATAZOO_DISABLE_TELEMETRY=1`.","to_build_on_it":"Only `erpl_rfc` and the trampoline are in this repository — `bics/`, `odp/` and `ape/` are private submodules, and the build loads them only if their `CMakeLists.txt` exists. Building needs vcpkg and a copy of the SAP NetWeaver RFC SDK placed in `nwrfcsdk/` per platform, and the SQL tests need a running SAP system, for which the maintainer uses the ABAP Platform Trial on Docker."},"links":{"repo":"https://github.com/DataZooDE/erpl","homepage":"https://erpl.io"},"maintainers":["actor:datazoode"],"provides":[{"capability":"capability:warehouse-loading","what_it_does":"Moves SAP ERP and SAP BW data into DuckDB as the analytical store, through ODP extraction in full and delta and through CDS entity reads over the ABAP Pipeline Engine where the delta carries deletes.","sources":[{"url":"https://github.com/datazoode/erpl","title":"DataZooDE/erpl — README","checked":"2026-10-17","quote":"**Data Replication**: Efficiently migrating data from SAP ERP or SAP BW into DuckDB for incorporation into DuckDB-centric data workflows."},{"url":"https://github.com/datazoode/erpl","title":"DataZooDE/erpl — README","checked":"2026-10-17","quote":"- CDS entity extraction via the ABAP Pipeline Engine, with delta including deletes"}]},{"capability":"capability:rfc-connectivity","what_it_does":"Calls any RFC function module from a DuckDB SQL statement, with the connection resolved from a DuckDB secret of type `sap_rfc`.","sources":[{"url":"https://github.com/datazoode/erpl","title":"DataZooDE/erpl — README","checked":"2026-10-17","quote":"- Execution of arbitrary RFC function modules"},{"url":"https://raw.githubusercontent.com/DataZooDE/erpl/master/CLAUDE.md","title":"DataZooDE/erpl — CLAUDE.md","checked":"2026-10-17","quote":"- **Secret types** via `RegisterSapSecretType(loader)` for `CREATE SECRET ... TYPE sap_rfc`"}]}],"requires":[{"ref":"external:duckdb","for":"The database the extension is installed and loaded into, started so that unsigned extensions are allowed.","requirement":"required","basis":"binding"},{"ref":"external:abap-platform","for":"The SAP system whose tables, CDS views and function modules are read.","requirement":"required","basis":"binding"}],"connects":[{"ref":"external:abap-platform","interface":"rfc","kind":"data","direction":"outbound","for":"Reading table and CDS view data, invoking function modules, and running BW queries over BICS.","sources":[{"url":"https://raw.githubusercontent.com/DataZooDE/erpl/master/CLAUDE.md","title":"DataZooDE/erpl — CLAUDE.md","checked":"2026-10-17","quote":"It connects to SAP systems via RFC (Remote Function Call) and BICS (Business Intelligence Consumer Services) protocols, using the proprietary SAP NetWeaver RFC SDK."}]},{"ref":"external:sap-erp","kind":"data","for":"Reading flight and schedule data directly from SAP ERP tables for interactive analytical queries.","protocols":["rfc"],"sources":[{"url":"https://github.com/datazoode/erpl","title":"erpl README","checked":"2026-10-18","quote":"Directly accessing data from SAP ERP (via RFC) and SAP BW (via BICS) for interactive analytical tasks."}]}],"interfaces":[{"key":"sql-functions","kind":"api","protocol":"sql","direction":"in","for":"Table functions and an `ATTACH` catalog type registered in DuckDB, so SAP data is read from a SQL statement.","sources":[{"url":"https://raw.githubusercontent.com/DataZooDE/erpl/master/CLAUDE.md","title":"DataZooDE/erpl — CLAUDE.md","checked":"2026-10-17","quote":"**ERPL** is a multi-extension DuckDB project that provides SAP data integration directly from SQL."}]}],"provenance":{"discovered_via":[{"source":"source:github"}],"first_seen":"2026-10-17"},"drafted_with_ai":true,"contributors":["actor:jrosskopf","actor:sipemu","actor:sm-datazoo"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"good","evidence":"3 contributors, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"good","evidence":"Main Extension Distribution Pipeline green, 2026-10-22"}],"practice":[{"label":"Tests","tier":"good","evidence":"69 test files"},{"label":"Docs","tier":"good","evidence":"README 27 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":65,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","npm":"not published under this name","stars":65,"forks":6,"open_issues":1,"archived":false,"pushed_at":"2026-10-22","license_spdx":null,"org_owned":true,"default_branch":"master","created_at":"2023-10-27T14:51:33Z","open_prs":0,"tree_truncated":false,"test_files":69,"workflows":3,"other_ci":false,"readme_bytes":27387,"docs_files":0,"changelog":true,"license_file":true,"dts_files":0,"first_commit":"2023-05-29","last_commit":"2026-10-22","commits":579,"contributors":3,"ci_status":"success","ci_run_at":"2026-10-22","ci_workflow":"Main Extension Distribution Pipeline","ci_event":"push","readme_path":"README.md","readme_sha":"3abf9a1f6f80d4de20d544e48f2f144059fc8da3","repo_read":"2026-10-26"},"release_notes":{"license":null,"quotable":false,"source":{"kind":"repo","path":"CHANGELOG.md","ref":"master","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md"},"format":"headings","releases":[{"version":"2026.10.21","heading":"v2026.10.21 — DuckDB 2.0","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20261021--duckdb-20","sections":[{"kind":"change","heading":"Changed","items":5},{"kind":"other","heading":"Internal","items":2},{"kind":"other","heading":"Known limitations","items":1}],"hash":"0676f75b9c384ea5"},{"version":"2026.10.09","heading":"v2026.10.09 — structure members, flat and addressable","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20261009--structure-members-flat-and-addressable","sections":[{"kind":"feature","heading":"Added","items":2},{"kind":"fix","heading":"Fixed","items":1}],"hash":"55dd3e2fba98ca00"},{"version":"2026.10.08","heading":"v2026.10.08 — hidden structure members, and hierarchy variables labelled right","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20261008--hidden-structure-members-and-hierarchy-variables-labelled-right","sections":[{"kind":"feature","heading":"Added","items":4},{"kind":"fix","heading":"Fixed","items":2}],"hash":"e4c3e6173851cc4b"},{"version":"2026.10.02","heading":"v2026.10.02 — DuckDB v1.5.6","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20261002--duckdb-v156","sections":[{"kind":"change","heading":"Changed","items":2}],"hash":"2fe6f6e8fc301289"},{"version":"2026.10.01","heading":"v2026.10.01 — query sessions that behave like cube sessions","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20261001--query-sessions-that-behave-like-cube-sessions","sections":[{"kind":"fix","heading":"Fixed","items":5},{"kind":"change","heading":"Changed","items":1},{"kind":"feature","heading":"Added","items":4}],"hash":"3bd683ffeb81c256"},{"version":"2026.09.23","heading":"v2026.09.23 — CDS delta with deletes, through SAP's own pipeline engine","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260923--cds-delta-with-deletes-through-saps-own-pipeline-engine","sections":[{"kind":"feature","heading":"Added","items":3},{"kind":"change","heading":"Changed","items":7},{"kind":"other","heading":"Notes","items":4},{"kind":"other","heading":"Known limitations","items":2}],"hash":"41fb961e2d856cd1"},{"version":"2026.09.16","heading":"v2026.09.16 — Custom RFCREADTABLE support, configurable delimiters, and bind-time secret validation","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260916--custom-rfcreadtable-support-configurable-delimiters-and-bind-time-secret-validation","sections":[{"kind":"feature","heading":"Added","items":4},{"kind":"change","heading":"Changed","items":3}],"hash":"000da87d788ae30a"},{"version":"2026.09.04","heading":"v2026.09.04 — scans that can be run twice, and a backend with no known gaps","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260904--scans-that-can-be-run-twice-and-a-backend-with-no-known-gaps","sections":[{"kind":"feature","heading":"Added","items":6},{"kind":"fix","heading":"Fixed","items":14},{"kind":"change","heading":"Changed","items":1},{"kind":"other","heading":"Build","items":1}],"hash":"f554ed7bc60412c2"},{"version":"2026.08.31","heading":"v2026.08.31 — every predicate applied, and most of them pushed to SAP","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260831--every-predicate-applied-and-most-of-them-pushed-to-sap","sections":[{"kind":"fix","heading":"Fixed","items":5},{"kind":"feature","heading":"Added","items":2}],"hash":"9897fd6d86410ea3"},{"version":"2026.08.29","heading":"v2026.08.29 — BEx result sets that fit in memory","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260829--bex-result-sets-that-fit-in-memory","sections":[{"kind":"fix","heading":"Fixed","items":3},{"kind":"feature","heading":"Added","items":2},{"kind":"change","heading":"Changed","items":3},{"kind":"other","heading":"Notes","items":2}],"hash":"c6809aa1b4356a84"},{"version":"2026.08.22","heading":"v2026.08.22 — A pure-Rust RFC backend, and the SSH tunnel moves out","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260822--a-pure-rust-rfc-backend-and-the-ssh-tunnel-moves-out","sections":[{"kind":"feature","heading":"Added","items":2},{"kind":"fix","heading":"Fixed","items":1},{"kind":"breaking","heading":"Breaking","items":2}],"hash":"43069020d45f4051"},{"version":"2026.08.19","heading":"v2026.08.19 — Non-ASCII text, raw byte columns, and a ten-day release outage","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260819--non-ascii-text-raw-byte-columns-and-a-ten-day-release-outage","sections":[{"kind":"other","heading":"SAP scan path","items":3},{"kind":"other","heading":"Type system","items":3},{"kind":"other","heading":"Stability","items":1},{"kind":"other","heading":"Build & CI","items":4}],"hash":"364f65d743bb8249"},{"version":"2026.07.30","heading":"v2026.07.30 — BEx query variables","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260730--bex-query-variables","sections":[{"kind":"other","heading":null,"items":9}],"hash":"db92dd14e9ab571b"},{"version":"2026.07.12","heading":"v2026.07.12 — Cross-product telemetry (schema 2)","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260712--cross-product-telemetry-schema-2","sections":[{"kind":"other","heading":null,"items":5}],"hash":"1e3937c610036e28"},{"version":"2026.07.02","heading":"v2026.07.02 — BICS transformation field mappings","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260702--bics-transformation-field-mappings","sections":[{"kind":"other","heading":null,"items":1}],"hash":"2062d4526876b782"},{"version":"2026.06.28","heading":"v2026.06.28 — ODP delta hardening","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260628--odp-delta-hardening","sections":[{"kind":"other","heading":null,"items":1}],"hash":"b3ef2c0234fbb71a"},{"version":"2026.06.27","heading":"v2026.06.27 — SAP ODP delta replication","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260627--sap-odp-delta-replication","sections":[{"kind":"other","heading":null,"items":4}],"hash":"c7ee7f9be66d697f"},{"version":"2026.06.17","heading":"v2026.06.17 — DuckDB v1.4.5 (LTS) + v1.5.4 (latest)","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260617--duckdb-v145-lts--v154-latest","sections":[{"kind":"other","heading":"Build & CI","items":4}],"hash":"db229b7d1ccd8e5a"},{"version":"2026.06.05","heading":"v2026.06.05 — BICS result: key figures no longer crash on DOUBLE → DATE","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260605--bics-result-key-figures-no-longer-crash-on-double--date","sections":[{"kind":"other","heading":"SAP scan path","items":2},{"kind":"other","heading":"Build & CI","items":1}],"hash":"7ae45837190fb5e9"},{"version":"2026.06.04","heading":"v2026.06.04 — BICS: actionable open errors and cross-release result fetch","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260604--bics-actionable-open-errors-and-cross-release-result-fetch","sections":[{"kind":"other","heading":"Clearer errors when opening a BW data provider","items":1},{"kind":"other","heading":"Result fetch works across BW releases","items":2},{"kind":"other","heading":"Build & CI","items":1}],"hash":"16c34e07458fdfdb"},{"version":"2026.06.01","heading":"v2026.06.01 — RFC connection teardown no longer crashes the host process","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260601--rfc-connection-teardown-no-longer-crashes-the-host-process","sections":[{"kind":"other","heading":"SAP scan path","items":4},{"kind":"other","heading":"Build & CI","items":1}],"hash":"84de7b541f9c8299"},{"version":"2026.05.30","heading":"v2026.05.30 — RFC authorization reference: saprfcauthorizations()","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260530--rfc-authorization-reference-saprfcauthorizations","sections":[{"kind":"other","heading":"Discovery & metadata","items":1}],"hash":"c18683d7e9c7f34a"},{"version":"2026.05.29","heading":"v2026.05.29 — BICS result: NULL date marshalling fix","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260529--bics-result-null-date-marshalling-fix","sections":[{"kind":"other","heading":"SAP scan path","items":1}],"hash":"9577b8f6dd9d8d92"},{"version":"2026.05.28","heading":"v2026.05.28 — Wide-scan memory: stream RFC results, bound the SDK buffer","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260528--wide-scan-memory-stream-rfc-results-bound-the-sdk-buffer","sections":[{"kind":"other","heading":"SAP scan path","items":2}],"hash":"f11c45def82f9044"},{"version":"2026.05.27","heading":"v2026.05.27 — SHOW TABLES on attached catalogs","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260527--show-tables-on-attached-catalogs","sections":[{"kind":"other","heading":"SAP scan path","items":1}],"hash":"049bfc4c4b8d4824"},{"version":"2026.05.24","heading":"v2026.05.24 — Wide-table CPIC exhaustion fix","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260524--wide-table-cpic-exhaustion-fix","sections":[{"kind":"other","heading":"SAP scan path","items":1},{"kind":"other","heading":"Errors and diagnostics","items":1},{"kind":"other","heading":"Tooling","items":1}],"hash":"c688f5213bb4b2b3"},{"version":"2026.05.22","heading":"v2026.05.22 — DuckDB 1.5.3 support, wide-table memory fix, NULL date handling","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260522--duckdb-153-support-wide-table-memory-fix-null-date-handling","sections":[{"kind":"other","heading":"Scan path","items":4},{"kind":"other","heading":"Configuration","items":1},{"kind":"other","heading":"Tests","items":2},{"kind":"other","heading":"Known residuals","items":2}],"hash":"63bfeb257dadf124"},{"version":"2026.05.20","heading":"v2026.05.20 — DuckDB v1.5.3 support","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260520--duckdb-v153-support","sections":[{"kind":"other","heading":null,"items":2}],"hash":"4fe4103b9b5beba6"},{"version":"2026.05.17","heading":"v2026.05.17 — sapreadtable parallelism, saprfcinvoke hardening, and BICS AfO-style char properties","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260517--sapreadtable-parallelism-saprfcinvoke-hardening-and-bics-afo-style-char-properties","sections":[{"kind":"other","heading":"RFC","items":5},{"kind":"other","heading":"BICS","items":8},{"kind":"docs","heading":"Docs","items":1}],"hash":"600c3daf98ede047"},{"version":"2026.05.14","heading":"v2026.05.14 — Type-system robustness, catalog-qualified function calls, ODP signature fix","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260514--type-system-robustness-catalog-qualified-function-calls-odp-signature-fix","sections":[{"kind":"other","heading":"RFC","items":4},{"kind":"other","heading":"BICS","items":1},{"kind":"other","heading":"ODP","items":3},{"kind":"other","heading":"Configuration","items":1}],"hash":"ed5b6772242ea55f"},{"version":"2026.05.10","heading":"v2026.05.10 — Process stability fixes","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260510--process-stability-fixes","sections":[{"kind":"other","heading":null,"items":2}],"hash":"f0e0a31820f7c1d5"},{"version":"2026.05.02","heading":"v2026.05.02 — Build pipeline hardening, OpenSSL/Windows fixes","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260502--build-pipeline-hardening-opensslwindows-fixes","sections":[{"kind":"other","heading":null,"items":5}],"hash":"26b8ae3df422f10e"},{"version":"2026.04.16","heading":"v2026.04.16 — DuckDB v1.5.2","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260416--duckdb-v152","sections":[{"kind":"other","heading":null,"items":1}],"hash":"7dc2ba2fcb11b252"},{"version":"2026.04.09","heading":"v2026.04.09 — duckdbfunctions() metadata across all sub-extensions","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260409--duckdbfunctions-metadata-across-all-sub-extensions","sections":[{"kind":"other","heading":null,"items":2}],"hash":"145eb0aa8f295263"},{"version":"2026.03.28","heading":"v2026.03.28 — DuckDB v1.5.1","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260328--duckdb-v151","sections":[{"kind":"other","heading":null,"items":1}],"hash":"f327d1068962bbb7"},{"version":"2026.03.11","heading":"v2026.03.11 — DuckDB v1.5.0 support","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260311--duckdb-v150-support","sections":[{"kind":"other","heading":null,"items":4}],"hash":"ddd621e6b3133c99"},{"version":"2026.02.11","heading":"v2026.02.11 — ATTACH syntax for SAP RFC, CDS view fix, BICS/ODP hardening","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260211--attach-syntax-for-sap-rfc-cds-view-fix-bicsodp-hardening","sections":[{"kind":"other","heading":"RFC","items":2},{"kind":"other","heading":"BICS","items":2},{"kind":"other","heading":"ODP","items":1}],"hash":"33781273f853935e"},{"version":"2026.01.28","heading":"v2026.01.28 — DuckDB v1.4.4 support (modern build matrix baseline)","url":"https://github.com/DataZooDE/erpl/blob/master/CHANGELOG.md#v20260128--duckdb-v144-support-modern-build-matrix-baseline","sections":[{"kind":"other","heading":null,"items":2}],"hash":"5c25a1a74a8398b2"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:datazoode","name":"DataZoo GmbH","json":"/actors/datazoode.json"}],"contributors":[{"ref":"actor:jrosskopf","name":"Joachim Rosskopf","json":"/actors/jrosskopf.json"},{"ref":"actor:sipemu","name":"Simon Müller","json":"/actors/sipemu.json"},{"ref":"actor:sm-datazoo","name":"sm-DataZoo","json":"/actors/sm-datazoo.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}