Skip to main content

ETL helpers focused on Fabric SQL workloads

Project description

dataprepkit metadata-driven SCD2 orchestrator

dataprepkit turns CSV snapshots into evolving dimensions by declaring the schema, keys, and dependency joins in metadata. The loader and scd2.apply_changes take care of schema evolution, dependency joins, normalizing datetimes, and the SCD2 workflow.

Metadata format

Each metadata entry registered via register_metadata(name, metadata) must include:

Key Description
target_table Table name (schemaless or schema-qualified; target_schema can fill in the schema).
target_schema Optional schema name. The loader auto-prefixes it during registration and creates the schema if missing.
natural_key_cols List of natural key columns—required.
natural_key_specs Optional overrides (ColumnSpec) for natural keys (type, nullable, unique, default).
data_columns Map of column names → ColumnSpec. Required.
surrogate_key / join_numeric_key System column names.
filepath CSV path (or lakehouse path) to read.
schema_handling.mode "suggest" (default) or "evolve" (auto-add missing columns).
processing_class Optional callable that transforms the incoming pandas DataFrame.
dependencies Optional dependency definitions (see below).
run_policy Determines failure handling (continue or abort).
archive_path Optional location for parquet archives.

ColumnSpec fields:

  • type: SQL type (e.g., NVARCHAR(4000), DATETIME2(3)).
  • nullable: boolean.
  • unique: boolean flag.
  • default: SQL default expression.
  • parse_format: optional format string for datetime parsing before staging.

Example:

{
  "schema_handling": {"mode": "evolve"},
  "target_table": "tbl_d_company",
  "target_schema": "Dimensions",
  "natural_key_cols": ["Organisation_Cd"],
  "data_columns": {
    "Legacy_Company_Name": {"type": "NVARCHAR(4000)", "nullable": true},
    "New_Column_From_Join": {"type": "NVARCHAR(4000)", "nullable": true}
  },
  "surrogate_key": "surrogate_key",
  "join_numeric_key": "join_numeric_key",
  "filepath": "/lakehouse/.../company_dim.csv",
  "dependencies": [
    {
      "schema": "Dimensions",
      "table": "tbl_d_company_service",
      "on": [{"source": "Service_Type_Cd", "target": "Service_Type_Cd"}],
      "select": {"Service_Description": "New_Column_From_Join"},
      "where": {"target": ["Current_Ind == 1"]},
      "how": "left",
      "on_missing": "null"
    }
  ]
}

Dependency joins

DependencyJoin entries support:

  • schema / table: lookup table to join to.
  • on: list of {source, target} mappings between incoming and lookup columns.
  • select: mapping of lookup column → alias added to the incoming frame.
  • where: optional SQL filters applied before the join.
  • filter_target_current: restricts to Current_Ind = 1 rows (default True).
  • how: "left" or "inner".
  • on_missing: "null" or "error".

Joins run inside SQL; pandas only reads the filtered result set, renames columns, and maps the selected values to the incoming DataFrame.

Runtime flow

  1. Register metadata (see examples/run_metadata_example_fabric.py).
  2. Call run_dimension(engine, metadata_name, csv_reader=...).
  3. Loader steps:
    • read CSV (custom reader may handle lakehouse authentication);
    • cast datetimes using optional parse_format;
    • ensure schema/table exist (auto-create/evolve if needed);
    • run SQL dependency joins;
    • call scd2.apply_changes with computed hashes and nullable columns.

Tests

  • python -m pytest dataprepkit/tests/test_metadata_loader.py — metadata parsing, datetime casting, dependency joins, schema aliases.
  • python -m pytest dataprepkit/tests/scd2/test_apply_changes.py::test_nullable_data_column_allows_null_staging — staging with nullable columns.

Examples

  • examples/run_metadata_example_fabric.py – registers multiple metadata objects and drives Fabric-based loading.
  • examples/run_scd2_fabric.py – demo insert/update/delete/reinsert phases on Fabric tables.

Notes

  • Metadata entries are validated via Pydantic; missing keys raise errors.
  • Update metadata before rerunning run_dimension to maintain the registry.
  • The system is designed for declarative metadata so you can add dimensions by editing metadata, not code.

Helpers modules

dataprepkit.helpers exposes reusable utilities:

  • helpers/connectors/fabric.py – Fabric SQL connection builder that handles MSI tokens, driver selection, and pooling. Use create_engine_for_fabric(endpoint, database, preferred_driver, ...) plus validate(engine) before running any metadata loads.
  • helpers/storage.py – Lakehouse/mount helpers (mounting, paths) used by the Fabric examples; consult it for paths when you need to read raw CSVs stored in your lakehouse.
  • Additional helper modules (e.g., connector-specific tooling) are referenced by the examples so you can replicate the Fabric patterns on other platforms.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ofwat_dataprepkit-0.11.tar.gz (40.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ofwat_dataprepkit-0.11-py3-none-any.whl (41.7 kB view details)

Uploaded Python 3

File details

Details for the file ofwat_dataprepkit-0.11.tar.gz.

File metadata

  • Download URL: ofwat_dataprepkit-0.11.tar.gz
  • Upload date:
  • Size: 40.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ofwat_dataprepkit-0.11.tar.gz
Algorithm Hash digest
SHA256 4d027bbd50cd67991bf26dd6e627ac4ff9d54b700c6d4569d7ccb865433fcc20
MD5 ea3c880dba1b67a55a543acfd88861e6
BLAKE2b-256 dbd202893a6d5c783e24d9d0b373a07efd70dd5c5e696addda4446267092ab69

See more details on using hashes here.

Provenance

The following attestation bundles were made for ofwat_dataprepkit-0.11.tar.gz:

Publisher: publish-to-pypi.yml on Ofwat/dataprepkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ofwat_dataprepkit-0.11-py3-none-any.whl.

File metadata

File hashes

Hashes for ofwat_dataprepkit-0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 67272cb674326249353bf8b67bd46cbc3b26a4ff7ffc72b4fe81cc3af0adc4f2
MD5 de87b95da079e8cd52647dbae3508b2d
BLAKE2b-256 671948e64f8a1032e00a71a0b7a80b7bab2ee53e9256ddb42ec8c4bb5dc4b8c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for ofwat_dataprepkit-0.11-py3-none-any.whl:

Publisher: publish-to-pypi.yml on Ofwat/dataprepkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page