Skip to main content
search
0

Data Vault Link Temporality

Link Temporality: Handling Source Data Errors with Effectivity Satellites

In modern data warehousing, ensuring accurate historical records is paramount. The Data Vault methodology excels at capturing raw, unfiltered data changes over time. But what happens when your source system makes errors—linking an entity to the wrong counterpart—and then corrects them? Without the right approach, your Link tables can become confusing, making it hard to identify the true “current” relationship. This article explores an elegant solution: using an Effectivity Satellite to manage link temporality and error correction in your Data Vault.



The Problem: One-to-One Relationship with Source Data Fluctuations

Imagine two hubs in your Data Vault: Hub A and Hub B. A business rule dictates that each A-entity can be linked to exactly one B-entity at a time. Your Link table models these connections. The typical workflow is:

  1. Day 1: Source links A1 → B1 → you load this into your Link.
  2. Day 2: Source mistakenly links A1 → B2 → you load the new link.
  3. Day 3: Source corrects back to A1 → B1 → how do you capture this as the current, up-to-date link?

Since the Link table only records distinct relationships and ignores duplicates, reloading A1 → B1 on Day 3 won’t insert a new row or update any timestamp. You lose clarity on which relationship is active today.

Why Not Tweak the Link Table Directly?

You might be tempted to add LOAD_END_DATE or an “active” flag directly to the Link table to mark when a relationship becomes obsolete. However, this violates Data Vault best practices. The Link should remain a pure, append-only record of every relationship ever observed, without status flags or end dates. Instead, you delegate temporality to a dedicated satellite.

Introducing the Effectivity Satellite

An Effectivity Satellite sits alongside your Link and records the lifespan of each relationship. Its core columns include:

  • Link Hash Key: foreign key back to your Link record
  • LOAD_DATE_TIMESTAMP: when you first detected or ended this link
  • DELETE_DATE_TIMESTAMP: when the link was deactivated (or a far-future “end of time” for active rows)

This design cleanly separates the static relationship definition (Link) from its dynamic, time-dependent status (Effectivity Satellite).

Step-by-Step: Tracking Link Changes

Day 1: Initial Relationship

Link: A1–B1  
Effectivity Satellite:  
LOAD_DATE = D1  
DELETE_DATE = 8888-12-31

We load A1→B1 and mark it active by setting its DELETE_DATE to the end of all time.

Day 2: Erroneous Change

Link: add A1–B2  
Effectivity Satellite updates:  
– For A1–B1: DELETE_DATE = D2 (deactivated)  
– For A1–B2: LOAD_DATE = D2, DELETE_DATE = 8888-12-31

The old relationship is soft-deleted, and the new one is inserted and marked active.

Day 3: Correction Back to Original

Effectivity Satellite updates:  
– For A1–B2: DELETE_DATE = D3  
– For A1–B1: new row (reactivation): LOAD_DATE = D3, DELETE_DATE = 8888-12-31

Instead of touching the Link, we simply record two new deltas: ending B2 and re-activating B1. Querying the satellite for the active row (where DELETE_DATE = 8888-12-31) reveals the current link.

Loading Patterns: Full Loads vs. CDC vs. Incrementals

Your data delivery method influences how you detect deletions:

  • Full Loads: Compare all active links in the satellite against staging; any missing link implies a deletion. Insert a delta to end-date it.
  • Change Data Capture (CDC): Leverage the source’s delete events and timestamps as your DELETE_DATE_TIMESTAMP.
  • Incremental without Deletes: Combine staging deltas (inserts/updates) with a lightweight full load of just business keys. Missing keys signal deletions.

In all cases, the satellite becomes the single source of truth for link effectivity.

Handling Unreliable Source Deliveries with “Last Seen”

Sometimes, your source export may inadvertently drop rows (e.g., locked mainframe records). To avoid false deletions, maintain a Last Seen Date on your effectivity satellite. If a link hasn’t been seen for a configurable “grace period” (e.g., three weeks), a business rule in your Business Vault marks it deleted. This approach balances accuracy against source system quirks.

Querying Current Relationships

To retrieve only active links at any point:

SELECT L.*, S.LOAD_DATE_TIMESTAMP  
FROM Link L  
JOIN Effectivity_Sat S  
ON L.Link_HashKey = S.Link_HashKey  
WHERE S.DELETE_DATE_TIMESTAMP = '8888-12-31';

This simple filter returns the true, live relationships, abstracting away all historical noise and source-system corrections.

Benefits of the Satellite Approach

  • Auditability: Full history of when links were activated and deactivated.
  • Purity: Link tables remain simple, append-only, and free of flags/end dates.
  • Flexibility: Supports full loads, CDC, and incremental patterns seamlessly.
  • Business Rules: “Last seen” logic can live in Business Vault without polluting raw Data Vault layers.

Conclusion

Handling source data errors—especially when relationships ping-pong between states—requires a robust temporal strategy. By delegating link effectivity to a dedicated satellite, you maintain a clean Link table, capture every change, and easily identify the current relationship. Whether you’re dealing with full loads, CDC, or flaky source exports, this pattern scales, remains auditable, and adheres to Data Vault best practices. Implement effectivity satellites in your Data Vault to master link temporality and build a more resilient, transparent data platform.

Watch the Video

Version Control and Deployments: A Comprehensive Guide with coalesce.io

Version Control and Deployments

In today’s fast-paced software development landscape, robust version control and seamless deployment pipelines are not just nice-to-haves—they are essential components of any successful project. From ensuring traceability of every change to enabling cross-functional teams to collaborate without stepping on each other’s toes, version control systems and automated deployments form the backbone of modern DevOps practices. In this article, we’ll explore the core concepts behind version control and deployments, and dive into how coalesce.io—a powerful, Git-native platform—elevates these processes through integrated features and automation.



Why Version Control and Deployments Matter

Whether you’re a solo developer or part of a large organization, the challenges of managing code changes, coordinating releases, and maintaining accountability can quickly become overwhelming. Implementing robust version control and deployment strategies delivers four key benefits:

  • Traceability: Every change is tracked, with a clear audit trail of who did what, when, and why.
  • Collaboration: Multiple contributors can work in parallel on different features or bug fixes without conflict.
  • Accountability: With detailed commit histories and pull request reviews, it’s easy to see ownership and rationale for changes.
  • Automation: Automated testing and deployments reduce manual errors and accelerate release cycles.

Coalesce brings all of these advantages together by embedding Git-based version control and deployment automation directly into its platform, letting teams focus on building reliable data logic rather than wrestling with infrastructure.

General Version Control Concepts with Git

Git has firmly established itself as the industry standard for source code versioning. Its distributed nature allows every developer to have a full copy of the repository history, enabling powerful branching and merging workflows.

  • Branching Model: Use feature branches for development work, separate testing branches for QA, and protected branches (e.g., main or production) for stable releases.
  • Pull Requests: Facilitate code reviews by proposing changes via pull requests (PRs), where teammates can comment, request modifications, and approve merges.
  • Commit Discipline: Write clear, atomic commits that describe what changed and why, improving the readability of the project’s history.
  • Merge Strategies: Choose between fast-forward merges, merge commits, or rebases based on team preferences and release requirements.

These practices enable controlled, transparent workflows that scale with your team’s size and complexity.

Version Control with Git in coalesce.io

Coalesce takes Git integration a step further by making it a first-class citizen of the platform’s UI. Here’s how it works:

  • Native Git-Based Structure: Projects in coalesce.io are structured as Git repositories under the hood, with every node, template, and configuration file stored as code.
  • UI-Driven Branch Management: Create, switch, and merge branches directly within the coalesce.io interface—no command line needed.
  • Automatic Commits: Any structural change you make to data nodes, business logic, or metadata generates a Git commit automatically, ensuring you never lose track of adjustments.
  • External Platform Integration: Connect to GitHub, GitLab, Azure DevOps, or Bitbucket repositories. Coalesce recognizes remote branches, pull requests, and webhooks, enabling full CI/CD pipelines with your preferred tools.

By embedding these capabilities, coalesce.io minimizes context switching and simplifies the learning curve for teams already familiar with Git workflows.

General Deployment Concepts

Deployment is the process of moving code or data logic from development environments into production, ensuring that your latest changes are available to end users or downstream systems. Key deployment concepts include:

  • Environments: Maintain separate environments—such as development, staging, and production—to safely test changes before release.
  • CI/CD Pipelines: Continuous Integration (CI) automates building and testing code upon every commit, while Continuous Deployment (CD) automates the release to target environments.
  • Rollback Strategies: Implement mechanisms to revert to previous stable versions in case of regressions or critical failures.
  • Configuration Management: Ensure environment-specific settings (e.g., database connections, API keys) are managed securely and consistently.

Automating these steps reduces human error, accelerates time-to-market, and provides greater confidence in each release.

Deployment Automation with coalesce.io

Coalesce simplifies deployments by exposing its functionality through a command-line interface (CLI) and a RESTful API. Here are the highlights:

  • Coalesce CLI: Run commands such as coalesce deploy to push the latest node definitions, templates, and configurations to a target environment in one step.
  • API-Driven Pipelines: Integrate coalesce.io into existing CI/CD tools (e.g., Jenkins, GitHub Actions, Azure Pipelines) by calling the Coalesce API to trigger builds and deployments programmatically.
  • Automated Compilation: Before deployment, coalesce.io compiles your logic—validating node dependencies and configurations—to catch errors early in the pipeline.
  • Execution Hooks: Optionally run pre- and post-deployment scripts (e.g., smoke tests, data quality checks) to enforce standards and provide feedback to development teams.

This tight integration between version control and deployments ensures that your Git history is always in sync with what’s running in production.

Best Practices for Version Control and Deployments

To maximize the benefits of these systems, consider the following recommendations:

  • Enforce Branch Protection: Require pull request reviews and passing automated tests before merging into critical branches.
  • Implement Semantic Versioning: Tag releases with meaningful version numbers (e.g., v1.2.0) to track feature sets and bugfixes.
  • Use Feature Toggles: Deploy incomplete features in a disabled state, then enable them via configuration when they’re ready.
  • Monitor and Alert: Integrate observability tools to track deployment health and automatically roll back on critical failures.
  • Document Your Workflow: Maintain clear documentation of branching strategies, deployment steps, and rollback procedures for on‑boarding and audits.

Conclusion

Version control and deployments are foundational to reliable, scalable, and secure software delivery. By leveraging Git’s powerful branching and merge capabilities alongside automated CI/CD pipelines, teams can move faster while maintaining high quality standards. Coalesce advances these practices by integrating version control directly into its platform and providing CLI/API-driven deployment tools that mesh seamlessly with existing workflows. Whether you’re just starting to adopt DevOps principles or looking to streamline your current processes, coalesce.io offers a unified solution for traceability, collaboration, accountability, and automation.

Watch the Video

dbt Fusion Explained: The Next Step in dbt’s Evolution

dbt Fusion Engine

As data teams continue to scale and the demand for faster, more reliable analytics grows, the tools we depend on must evolve. Enter dbt Fusion, the latest high‑performance execution engine from dbt Labs that promises to take your dbt workflows to unprecedented speeds. In this post, we’ll dive deep into what dbt Fusion is, explore its key features, discuss supported platforms and migration paths, and help you decide if—and when—you should upgrade. Let’s get started!



Why a New Engine?

dbt (data build tool) has revolutionized how analytics engineers transform and test data directly within the data warehouse. Until now, both dbt Core and dbt Cloud have relied on a Python-based execution engine. While powerful, Python parsing and compilation can become a bottleneck as projects grow to thousands of models. Recognizing this, dbt Labs has developed dbt Fusion from the ground up in Rust, a language known for its speed and memory safety.

Key Benefit: Lightning‑Fast Parsing

One of dbt Fusion’s marquee improvements is its parsing speed. Traditional dbt projects—especially those with tens of thousands of models—could take minutes to parse. With Fusion’s Rust implementation, parsing times drop dramatically, often by up to 30× faster, bringing multi‑minute delays down to mere seconds (or even milliseconds). Faster parsing means quicker iterations, faster CI checks, and more responsive development workflows.

Ahead‑of‑Time Cycle Compilation

Typically, dbt compilation happens right before execution, which means syntax errors or schema mismatches only surface during run time. dbt Fusion introduces ahead‑of‑time cycle compilation, enabling the engine to analyze your SQL and model dependencies intelligently before executing any queries against your warehouse. This pre‑flight check catches errors early, saving compute costs and developer time by preventing failed runs on the warehouse.

Column‑Level Lineage & Data Type Validation

Data governance is becoming ever more critical. With dbt Fusion, you gain column‑level lineage and built‑in data type validation. This fine‑grained visibility ensures that every downstream model inherits accurate metadata. For instance, if you tag a column as “PII” or “Personal Information” at the source model, Fusion will automatically propagate that tag to any downstream models referencing the same column—streamlining compliance and auditability.

Smarter Orchestration & Cost Savings

dbt Cloud users already benefit from intelligent job scheduling, but Fusion takes orchestration to the next level. It can detect unchanged models and skip them, dramatically reducing unnecessary computation. In practice, this means your daily or hourly runs only re‑execute models that truly need it, leading to significant savings on warehousing costs.

Enhanced Developer Experience in VS Code

To complement the core engine improvements, dbt Labs has released an updated VS Code extension tailored for Fusion. Highlights include:

  • Autocomplete for model names, macros, and config blocks
  • Inline SQL preview so you see your compiled SQL before executing
  • Live feedback on syntax or type errors as you code

These enhancements further shrink the feedback loop, allowing analytics engineers to develop with confidence and speed.

Supported Platforms & Future Connectors

At launch (beta stage), dbt Fusion supports:

  • Snowflake
  • Databricks

dbt Labs has confirmed that additional connectors—such as BigQuery and Redshift—are on the roadmap. To stay up to date, subscribe to the official dbt community forums or follow the dbt Twitter account for announcement alerts.

Beta to GA: What to Expect

dbt Fusion is currently in beta, but the pace of innovation is rapid. dbt Labs aims to reach general availability soon. During the beta, you can:

  1. Experiment with your most complex projects to quantify performance gains.
  2. Report issues and help refine features via GitHub or the dbt community channels.
  3. Understand limitations—such as unsupported adapters or edge‑case macros—before rolling out to production.

Migration Paths for dbt Cloud & Core Users

If you’re on dbt Cloud, you don’t need to lift a finger: Fusion will become the default execution engine automatically once GA is reached. Your existing jobs and orchestrations will seamlessly target Fusion under the hood.

For dbt Core users, upgrading is straightforward:

  1. Install the latest dbt-fusion package alongside dbt-core.
  2. Follow the step‑by‑step migration guide on the dbt Labs documentation site.
  3. Run your test suite locally to confirm compatibility.

License & Pricing Considerations

dbt Fusion introduces a new tiered licensing model:

  • Local Development (dbt Core users): Source‑available, free, and fully functional for local builds (with some advanced features behind a paywall).
  • dbt Cloud customers: Fusion is included in paid tiers, unlocking all premium capabilities—such as enterprise connectors, deeper metadata lineage, and priority support.

Review the official pricing page to see which features align with your team’s needs.

Is dbt Fusion Right for You?

If your team regularly works on large-scale dbt projects or you’re chasing every millisecond of performance, dbt Fusion is a game‑changer. Early adopters report 10×–30× faster parsing, near‑instant validation feedback, and lower cloud compute bills thanks to smarter orchestration.

That said, if your project is small or you’re comfortable with existing runtimes, you may choose to wait until GA and additional adapters ship. Either way, Fusion is the future of dbt, and understanding its capabilities now will help you plan your analytics roadmap.

Next Steps

  • Read the dbt Fusion docs to explore detailed benchmarks and feature matrices.
  • Join the beta: enable Fusion in your dev environment and share feedback.
  • Monitor connector announcements to align Fusion with your warehouse of choice.

Watch the Video

From Warehouses to Platforms: Why Should We Change Our Wording?

From Data Warehouses to Data Platforms

The world of data architecture is evolving — fast. What started as traditional data warehouses has now become a dynamic ecosystem of technologies, roles, and use cases. At Scalefree, we no longer talk exclusively about data warehouses — we intentionally use the term data platforms. Why? Because it’s not just the technology that has changed, but also the people working with data and how they use it to generate value.



From Data Warehouses to Data Ecosystems

Traditional data warehouses were built for structured data with predefined schemas — relational, static, and stable. They were and still are the backbone for reporting and classic business intelligence in most cases.

The advent of data lakes offered a revolutionary capacity to house and manipulate unstructured data. However, the absence of clear structure and robust governance often resulted in environments colloquially known as “data swamps.”

Hybrid architectures and, later, data lakehouses emerged as a logical evolution, blending the strengths of warehouses and lakes. Their key benefit: enabling different data consumers to work on a unified foundation.

The New Reality: Platforms Instead of Silos
Today, multiple roles interact with data — and each has unique needs:

Data Engineers work across all architectural layers: from raw data ingestion to business rules and curated marts.

Business Analysts need structured, refined data for reports and dashboards.

Data Scientists explore raw, granular data for predictive models — often working directly with data lakes or raw vaults.

The traditional concept of a data warehouse no longer covers this variety of use cases. It’s simply not enough.

Why We at Scalefree Speak of Data Platforms

To us, Data Platform is not just a buzzword — it’s a strategic shift that reflects today’s real-world demands. A data platform needs to fulfill multiple criteria.
For example:

Neutrality
It’s not tied to specific technologies. Whether Snowflake, Databricks, or Coalesce — the concept stays relevant.

Flexibility
It supports any data architecture: from classic warehouses to lakes and lakehouses — and whatever comes next.

Role Inclusivity
All roles — engineers, analysts, scientists — can work on the same platform, using the same data, without structural or technical barriers.

Future-Readiness
New technologies can be adopted without redefining the concept of the platform itself.

AI Enablement
A modern data platform provides the foundation for AI and machine learning by making all relevant data — structured and unstructured — accessible, governable, and ready for advanced modeling.

Conclusion: Thinking in Platforms that serves EVERYONE

The world of data is no longer binary. It’s not just “reporting” vs. “analytics,” “structured” vs. “unstructured,” or “IT” vs. “business.”

By using the term Data Platform, we acknowledge this reality and offer a unifying concept that bridges technology, people, and innovation.

At Scalefree, we actively help shape this new world — using modern architectures, Data Vault 2.0, automation tools like dbt, Coalesce, and cloud-native platforms.

Watch the Video

Data Vault Links With Just One Hub Reference

Single-Hub Links

In Data Vault modeling, links play a central role in representing relationships between business keys stored in hubs. By design, most links connect two or more hubs, capturing many-to-many relationships or associations. But what happens when an event or transaction involves only a single business key? Can you still use a link structure—and if so, which type? In this article, we’ll explore the concept of non-historized links with a single hub reference, compare alternatives, and outline best practices for real-time event modeling.



Overview of Data Vault Components

Before diving into one-hub links, let’s briefly review the core building blocks of a Data Vault model:

  • Hubs: Store unique, immutable business keys (e.g., customer IDs, order numbers).
  • Links: Represent relationships or associations between two or more hubs.
  • Satellites: Hold descriptive attributes and contextual history for hubs and links.

This three-tiered architecture ensures agility, auditability, and scalability. Hubs guarantee uniqueness; links model relationships; satellites track changes over time.

Traditional Links and Their Purpose

Most Data Vault implementations utilize links to tie together business keys from multiple hubs. Common scenarios include:

  • Customer–Order relationships (customer purchases multiple orders).
  • Order–Product line items (each order can contain multiple products).
  • Employee–Department assignments.

These historized links capture the evolution of relationships over time, recording load dates and allowing queries that include past associations. In contrast, non-historized links focus on events at a single point in time.

Defining Non-Historized Links

A non-historized link (sometimes called an “event link” or “transaction link”) stores relationships for a single event or message without maintaining full historical context. Instead of recording every change, it captures a snapshot of an event at its arrival:

  • Load timestamp identifies when the event occurred or was ingested.
  • Hub references list one or more business keys involved in the event.
  • Non-historized Satellites may attach descriptive details, but typically without tracking attribute history.

This design is ideal for real-time message processing, streaming data, or systems where full history is not required for each event.

When Only One Business Key Is Involved

While many events involve multiple business keys—such as an order linking to both customer and product—some transactions or messages involve just one key. Examples include:

  • A single-customer ping or heartbeat event in an IoT system.
  • A retail message capturing stock-level change for one product.
  • An alert triggered by a lone account reaching a threshold.

In these cases, you might wonder if a link structure still makes sense when there’s only one hub reference. The answer is yes: you can implement a non-historized link that references a single hub key to represent that event.

Advantages of Single-Hub Links

Opting for a non-historized link with one hub reference brings several benefits:

  • Consistency: Sticks to the Data Vault pattern of links for events, avoiding mixed designs.
  • Scalability: Scales out to handle high volumes of incoming messages without heavy historical tracking.
  • Clarity: Clearly separates transactional/event data from descriptive satellites and core business keys.
  • Query Simplicity: Enables straightforward point-in-time queries of events linked to the relevant hub.

Alternative: Multi-Active Satellites

Another design might involve a multi-active satellite on the hub itself, capturing different event types or message variants keyed by a load timestamp or event type. However:

  • Multi-active satellites are designed to capture multiple concurrent “active” roles or statuses rather than transient events.
  • The lack of a dedicated link table can blur semantic distinctions between relationships and descriptive attributes.
  • Query performance and partitioning strategies may suffer when trying to manage high-frequency event data in a satellite.

Therefore, for discrete, passing-through events, a non-historized link generally outperforms a multi-active satellite approach.

Designing Your Single-Hub Non-Historized Link

When modeling a non-historized link that references only one hub, follow these guidelines:

  1. Link Table Structure: Include a surrogate primary key, load timestamp, and the single hub’s surrogate key.
  2. Foreign Key Constraint: Enforce referential integrity back to the hub, ensuring the business key exists.
  3. Descriptive Satellites: If extra attributes are needed (e.g., event payload details), create a non-historized satellite keyed to the link.
  4. Partitioning Strategy: Partition by load date for efficient querying and archiving of stale event data.
  5. Retention Policy: Define sliding windows or archival processes for old events if storage growth is a concern.

Here’s an example DDL snippet for reference:


CREATE TABLE l_event_single_hub (
l_event_id        BIGINT      IDENTITY PRIMARY KEY,
hub_key_id        BIGINT      NOT NULL,
load_date         DATETIME     NOT NULL,
-- optional metadata columns
source_system     VARCHAR(50),
record_hash       CHAR(32),
CONSTRAINT fk_l_event_hub
FOREIGN KEY (hub_key_id)
REFERENCES h_hub_entity(hub_key_id)
);

Use Case Scenarios

Organizations across industries leverage single-hub links for:

  • Banking: Recording individual account balance snapshot events.
  • Retail: Capturing stock level messages for each product unit.
  • IoT: Ingesting single-device telemetry pings.
  • Telecommunications: Logging individual phone number status changes (e.g., activated/deactivated).

In each scenario, the event is tied to one core business key, and history is either ephemeral or summarized elsewhere.

Best Practices and Considerations

When implementing single-hub non-historized links, consider the following:

  • Event Granularity: Define clear semantics—what constitutes one event, and how often will it be ingested?
  • Surrogate Keys: Always use surrogate keys for hubs and links to maintain consistency.
  • Hashing Strategy: Compute a record hash if you need idempotency or change detection on message payloads.
  • Load Performance: Optimize bulk or streaming loads with batching and minimal indexes on the link table.
  • Retention and Archival: Archive stale events into cheaper storage or summarize them into aggregate tables.

By following these practices, you’ll ensure a robust, maintainable design that adheres to Data Vault principles.

Conclusion

While it might seem counter-intuitive to create a link with only one hub reference, non-historized links with a single business key are both feasible and, in many real-time event scenarios, preferable to alternative designs. They preserve the semantic clarity of link tables, ensure data integrity, and scale efficiently for high-volume event streams. When events involve only one business key, reach for a one-hub non-historized link rather than shoehorning events into satellites or hybrid structures.

Watch the Video

Dealing with Corrupted Loads in Data Vault

Corrupted Loads in Data Vault

One of the foundational assumptions in Data Vault modeling is that business keys must be unique. This rule underpins how we model Hubs, Links, and Satellites. But what happens when your data doesn’t play by the rules? Specifically, what should you do when your data delivery contains multiple rows with the same business key—a situation that violates the core principles of your Raw Data Vault model?

In this article, we’ll explore practical strategies for managing corrupted data in Data Vault pipelines, focusing on maintaining auditability, consistency, and data integrity—even when upstream data delivery is flawed. We’ll also look at what to do when your business key assumptions no longer hold true.



Understanding the Problem: Duplicate Business Keys

Let’s start with the assumption that your Raw Data Vault is modeled around unique business keys. You’ve built Hubs, split Satellites, and established Links based on the expectation that a business key like customer_id uniquely identifies a customer.

Now, you receive a new delivery from your source system. Unexpectedly, it contains multiple rows with the same business key. This isn’t just a data quality issue—it fundamentally breaks your model. The typical loading process can no longer proceed cleanly, and worse, you risk contaminating your data warehouse with incorrect records.

Why You Can’t Ignore Corrupted Loads

It’s tempting to just skip the bad file or fix it manually. But in a proper Data Vault setup—particularly one that adheres to full auditability and compliance standards—this isn’t acceptable. You must be able to fully reconstruct each data delivery, even if it’s flawed. Every decision—whether to reject or load—must be trackable and justifiable.

Step 1: Capture Everything in a Data Lake

Today, many modern architectures use a data lake or Persistent Staging Area (PSA) as the first layer of data capture. This becomes your insurance policy. All incoming data—valid or corrupted—is ingested and stored here as-is, giving you a perfect record of what was delivered and when.

This approach also ensures your Raw Data Vault can skip flawed deliveries without data loss. By storing the original files in the data lake, you preserve the full delivery for later inspection, validation, or correction without halting the loading process entirely.

Step 2: Define Automated Data Quality Checks

Before data is loaded into the Raw Data Vault, it must pass validation. You can implement quality checks like:

  • Is the business key unique across the delivery?
  • Are column data types and lengths as expected?
  • Are required fields populated?

If any of these checks fail, the entire file should be rejected—not just individual records. Why? Because partial loads introduce ambiguity and audit challenges. Instead, flag the file as failed and notify the data provider to investigate and resend a corrected version.

Step 3: Track Rejections and Version Control Your Checks

You must keep detailed logs of every load attempt. This includes:

  • Which file was loaded or rejected
  • Which checks were applied
  • Which check failed and why
  • The version of the validation rule used

This ensures complete traceability. You can prove not just what was accepted, but also what was rejected and for what reason. This is crucial for regulatory compliance, audits, and operational transparency.

What If There’s No Data Lake?

In some cases, you may not have a data lake. You might be working with a transient relational staging area before the Raw Data Vault. Even then, you should still store failed deliveries. A separate location or table can be used to store the raw files that failed validation. Again, auditability is key—just because data isn’t valid doesn’t mean it can disappear.

When the Business Key Assumption Breaks

Sometimes, you dig deeper and realize that your assumption about the business key was flawed. Maybe you thought customer_id was unique, but the source system allows multiple entries per ID for different contexts. Now what?

This is where things get more complex. You need to refactor your model. Specifically, you must modify the Hub and possibly extend the business key by combining it with another column (e.g., customer_id + region) to enforce uniqueness.

Why You Must Refactor, Not Hack

Some might be tempted to patch the issue using a record source tracking Satellite or other technical workaround. But this introduces long-term maintenance and performance issues. Worse, it hides the real business reality behind a technical trick.

Instead, treat the business key as the central anchor of your model. If it changes, it impacts:

  • The Hub structure
  • All related Satellites
  • Any Links pointing to the Hub

Yes, it’s a big change. But it’s limited to a specific portion of your model and keeps your architecture clean and reliable.

What About Descriptive Data Errors?

If the corrupted data only affects descriptive attributes and not the business key, the fix is simpler. You can ingest a correction load directly into the Satellites with a backdated load date—just after the original bad load. Then, rebuild your PIT (Point-In-Time) tables. This resolves the issue for downstream consumption without any need to refactor Hubs or Links.

Final Thoughts: Build Resilience Into Your Pipeline

Corrupted data is not an exception—it’s an eventuality. Whether it’s duplicate business keys, incorrect formats, or structural changes in the source system, your data warehouse must be prepared. The best defenses are:

  • A reliable data lake or staging layer to capture raw deliveries
  • Automated validation and full-file rejection logic
  • Detailed auditing and version control on checks
  • Clear communication with source system owners
  • Willingness to refactor models when business reality shifts

Following these principles ensures your Data Vault model remains robust, scalable, and trustworthy—even in the face of corrupted loads.

Watch the Video

Leveraging the Coalesce API: A Practical Guide for Data Engineers

About the Coalesce API

In today’s fast-paced data-driven world, automation, integration, and scalability are crucial for modern data engineering. The Coalesce API empowers developers, analysts, and engineers to streamline their workflows, integrate with external tools, and build robust data pipelines. Whether you’re migrating data, monitoring runs, or embedding data tasks into your existing scheduling systems, the Coalesce API offers the flexibility and power you need.

This guide will walk you through the Coalesce API’s key features, show you how to get started, and explore real-world use cases that can elevate your data operations.



API Features

The Coalesce API is structured into two primary segments: the Coalesce API itself and the Run API. Each provides a specific set of endpoints designed to help you interact programmatically with the coalesce.io platform.

Coalesce API Endpoints

  • Get / List Environments: Fetch available environments where your coalesce.io projects live.
  • List / Get / Create / Set Nodes: Manage your data transformation nodes—essential building blocks of any pipeline.
  • List / Get Runs: Retrieve historical or current run information for traceability and auditing.
  • List Run Results: Analyze outputs and diagnostics of your executed runs.

Run API Endpoints

  • Start / Stop / Retry Run: Full control over triggering, halting, or retrying your pipeline executions.
  • Check Live Run Status: Monitor real-time status of ongoing processes.

These features provide a comprehensive toolkit for orchestrating and managing your Coalesce-powered data architecture.

Using the API

One of the strengths of the Coalesce API is its accessibility across a wide range of tools and platforms. Here’s how you can explore and interact with the API in your development environment:

  • API Explorer: Use the built-in API Explorer for hands-on experimentation and learning.
  • Postman Collection: Easily import the Coalesce API into Postman to structure and test API calls efficiently.
  • Insomnia: Another popular REST client for interacting with coalesce.io endpoints with ease.
  • Command Line: cURL and other CLI tools allow direct HTTP requests for automation and scripting.
  • Azure Data Factory: Seamlessly integrate coalesce.io into your Azure-based ETL pipelines.
  • Any API-compatible platform: Virtually any system that can make HTTP requests can work with coalesce.io.

Whether you’re a seasoned developer or just getting started with APIs, Coalesce’s compatibility makes it a flexible choice for various setups.

Real-World Use Cases

Now that you know what the API offers, let’s look at some practical scenarios where it can deliver significant value:

  • Migration Projects: Automate and validate data migration workflows by triggering and monitoring coalesce.io runs through the API.
  • Monitoring of Runs: Build dashboards or alerting systems using live run status and result endpoints.
  • External Scheduler Integration: Integrate with orchestration tools like Apache Airflow, Prefect, or Dagster to manage your coalesce.io executions.
  • Tool Synchronization: Keep multiple tools in sync by triggering workflows or pushing outputs via API commands.
  • And More: The flexible design means you can build custom solutions tailored to your organization’s specific needs.

The API is your gateway to turning coalesce.io into a true component of your larger data ecosystem.

How to Get Started

Getting up and running with the Coalesce API is straightforward. Here are the initial steps you need to take:

Base URL

The API’s base URL depends on your coalesce.io instance region. A common URL looks like this:
https://app.coalescesoftware.io

Bearer Token

For authentication, you’ll need a Bearer Token. You can create this securely within the coalesce.io platform under the Deploy section.

Environment ID (Optional)

You can use the API to list all environments if you’re unsure which ID to use. This is optional, depending on your endpoint needs.

Workspace ID

This is critical for API calls involving workspace-specific data. You can find your Workspace ID in the coalesce.io interface under Build Settings.

Once you have these items, you’re ready to begin sending requests and building out your automation workflows.

Conclusion

The Coalesce API opens a world of possibilities for enhancing your data workflows. With comprehensive functionality, real-time interaction, and seamless integration options, it’s an essential tool for any team looking to operationalize their data stack efficiently.

Start small—experiment with API Explorer or Postman—and gradually integrate Coalesce API calls into your ETL processes, monitoring tools, and data orchestration pipelines. The flexibility and control you gain will be well worth the investment.

Watch the Video

Defining the Error Mart in Data Vault

Defining the Error Mart

When working with data platforms that follow the Data Vault methodology, one often hears about components like the Raw Vault, Business Vault, and Information Marts. But among these well-known layers is a lesser-discussed yet critical structure: the Error Mart.

In this blog post, we take a comprehensive look at what an Error Mart is, what its main objectives are, and the best practices for designing one. This insight is based on an informative session led by Michael Olschimke, CEO of Scalefree, during a recent Data Vault Friday.



What is an Error Mart?

In traditional data warehousing approaches like Kimball, an Error Mart is used to store metrics about errors—for example, how many ETL jobs failed or which tables didn’t load successfully. These are primarily KPIs used for monitoring and are typically stored in what’s known as a Metrics Mart.

However, in the context of Data Vault 2.0, the Error Mart has a different, more tactical role: it acts as a catch-all for rejected records that fail to load during any of the staging or integration processes.

This could be due to a mismatch in expected data types, missing columns, or unexpected structural changes in the source data. These issues most frequently arise during:

  • Initial data ingestion from files, APIs, or real-time feeds
  • Loading data into the staging area or raw Data Vault
  • Applying hard rules based on schema assumptions

The Main Goal of an Error Mart

The primary goal of the Error Mart is to ensure that all incoming data—the good, the bad, and the ugly—is captured and traceable, even if it can’t immediately be loaded into the intended layer (such as the Raw Vault).

It’s a technical safety net that provides:

  • A secure location for rejected records
  • The ability to analyze and correct issues manually
  • A reprocessing workflow that ensures full data capture

The Error Mart is not meant for business logic errors (e.g., someone underage purchasing a product); rather, it handles technical discrepancies that prevent data from moving through the pipeline.

How Is It Structured?

Traditionally, one might think of creating multiple error tables to match each data model. However, Michael Olschimke recommends a single flexible structure—a table that stores rejected records as JSON strings. This allows you to capture various unexpected formats without predefined schemas.

Each record should be accompanied by key metadata:

  • Load date – Timestamp of ingestion
  • Record source – Source system or interface
  • Process identifier – The job or transformation that failed

This setup ensures that every error is auditable, traceable, and eventually resolvable.

Best Practices for Designing an Error Mart

Here are some key considerations when building your Error Mart:

1. Flexibility in Structure

Since rejected data often doesn’t conform to expected schemas, use a structure that can handle variability. A single table using JSON or Parquet formats offers great flexibility, especially when stored in a data lake.

2. Avoid Over-Engineering

There’s no need to create one table per error type. One well-documented and meta-tagged table is usually sufficient.

3. Logging and Auditing

Implement a companion log table or file to track which records have been reprocessed. Instead of deleting processed error records, use a status flag or separate tracking log to preserve data lineage and maintain transparency.

4. Trigger Monitoring and Alerts

Your system should monitor the Error Mart for unprocessed records. Set up alerts via email, log monitoring tools like CloudWatch or Greylog, or build dashboards that notify the data team when action is required.

5. Make It the Data Team’s Responsibility

A critical mindset shift: processing records in the Error Mart is not a business responsibility—it’s yours as the data engineering team. Do not offload this to end users.

6. Reprocessing Workflow

Once the technical root cause is identified (e.g., an overly strict field length), update the hard rules, reload the rejected data from the Error Mart into the target layer, and mark it as processed in your log.

7. Error Mart in Every Layer

While most errors occur in the initial stages (staging, Raw Vault), you should prepare to capture errors at every layer—Business Vault and Information Mart included.

8. Binary Data Considerations

If your incoming data includes blob fields, you can mime-encode them and store them alongside the error JSON or separately in the data lake.

Why the Error Mart Matters in Data Vault Architecture

Data Vault is built on the premise of complete and auditable data capture. To meet this principle, you must have a strategy for handling unexpected or failed data loads. The Error Mart acts as that strategy.

It’s not just a dumping ground for bad records—it’s a crucial feedback mechanism that helps you refine your ingestion and transformation rules, ensuring every piece of data, no matter how ugly, makes it into the platform.

Without an Error Mart, you risk data loss, broken lineage, and ultimately, lower trust in your data platform.

Conclusion

In summary, the Error Mart is an essential part of a resilient Data Vault architecture. It gives your data team the tools to identify, correct, and reprocess problematic data while maintaining auditability and trustworthiness.

If you’re implementing a Data Vault, don’t treat the Error Mart as an afterthought. Design it with flexibility, transparency, and process integration in mind. And remember: it’s your job to make sure no record gets left behind.

Watch the Video

Data Vault on Databricks: Does It Make Sense?

Data Vault and Medallion Architecture

In this article, we will try to explore the practical considerations of implementing Data Vault on Databricks, by analyzing Databricks’ ecosystem and its alignment with Data Vault’s core principles. We will go over the fundamentals of Databricks’ architecture, its compatibility with Data Vault’s layered approach, and how some of Databricks’ features can be leveraged to simplify, optimize, or even replace certain traditional aspects of a Data Vault implementation.

This article aims to provide a strategic perspective on how Databricks can support Data Vault principles such as historization, scalability, auditability, and modular design. We’ll discuss opportunities, such as using Delta Lake for time travel and schema evolution, and challenges, like the performance trade-offs introduced by Data Vault’s high number of joins.

Bridging EDW and Lakehouse: Implementing Data Vault on Databricks

Join us in this webinar as we explore the process of implementing Data Vault on Databricks. We will go over different integration strategies and potential challenges, as well as technical aspects like data modeling, performance considerations, and data governance. Register for our free webinar, June 17th, 2025!

Watch Webinar Recording

Understanding Data Vault 2.0

Data Vault is traditionally defined as a methodology encompassing implementation practices, an architectural framework, and a data modeling approach for building a business intelligence system. However, this article focuses on the architectural and modeling aspects of Data Vault, as these are most relevant topics for the implementation of Data Vault on Databricks.

The main advantage of adopting Data Vault’s architecture and modeling are:

  • Preservation of Historical Integrity and Auditability.
    • Insert-only historization
    • Reconstruction of data source deliveries
    • Simplified Governance and Compliance
  • Flexible and Scalable Architecture Data Model
    • Modular Data Model (Hub & Spoke)
    • Scalable
    • Decoupling of Hard and Soft Business rules
    • Tool Agnosticism

The Databricks Ecosystem

Databricks is a leading platform for data analytics, offering a unified environment for data processing, machine learning, and collaborative data science. Its lakehouse architecture, built on Apache Spark and Delta Lake, combines the flexibility of data lakes with the structure and performance of data warehouses. This approach allows organizations to store all types of data while enabling efficient SQL-based analytics and AI/ML workloads.

For Data Vault implementation, Databricks can be a practical choice. Delta Lake’s ACID compliance and transaction logs ensure data integrity and enable Time Travel for historical analysis. As we will see next, features like Delta Live Tables and Unity Catalog optimize data ingestion, transformation, and governance, making Databricks a compelling platform for implementing Data Vault.

Databricks and Data Vault: Do they work together?

To assess the combination of Databricks and Data Vault, we need to analyze their common ground: architecture and data modeling. Both are designed to handle large scales of volume and data processing, and a successful integration of both relies on understanding how they can complement each other.

Architectural Compatibility

Databricks, built on Apache Spark and Delta Lake, follows the Medallion Architecture, a layered approach designed to structure and refine data. Their Medallion Architecture provides a best practice for managing data within a lakehouse environment, utilizing a three-layered approach (Bronze, Silver, Gold) to progressively structure and refine data. This approach aligns well with Data Vault’s multi-layered architecture (Staging, Raw Data Vault, Business Vault, Information Marts).

Databricks Data Quality Architecture

Image 1: Databricks’ Medallion architecture

Now looking at Data Vault’s architecture, we see that to some extent it is quite similar to what Databricks proposes: a multi-layer solution composed of a Staging layer, a Raw Data Vault and a Business Vault, followed by the domain-specific information marts. In the image below, we can see an example of a Data Vault architecture.

Data Vault Architecture

Image 2: Data Vault Architecture

Integrating Data Vault with the Medallion Architecture allows for a synergistic approach, as we can see in image 3.

Data Vault and Medallion Architecture

Image 3: Data Vault and Medallion Architecture

The Bronze layer serves the same purpose as Data Vault’s Staging Area, where raw data is ingested from the different sources and stored in a single place. From then on, the Silver layer will store the Raw Data Vault, source tables will be split into hubs, links, and satellites. Here we can already consider some Databricks’ features, such as schema enforcement for integrity; and also Delta Live Tables and Spark SQL to maintain steady loading processes and automate quality checks. The Business Vault, which derives additional business-relevant data structures, sits between Silver and Gold layers, assisting with the information delivery process.

In the Business Vault, Databricks features such as Z-Ordering and data skipping can optimize performance by organizing data more efficiently. Additionally, Spark SQL can be used for aggregations and transformations supported in PIT and Bridge tables. Finally, in the Gold layer, we can start creating our Information Marts with Flat & Wide structures that improve the performance when querying the information out of the Vault.

Privacy and Security

Databricks’ data governance features included in Unity Catalog can optimize Data Vault implementations by simplifying security and privacy controls. Unity Catalog’s fine-grained access control and data masking capabilities can eliminate the need for satellite splits traditionally used to manage sensitive data. Additionally, the lakehouse architecture enables direct data querying, which facilitates compliance with GDPR and data privacy regulations, particularly for responding to data subject access requests (DSAR) and right-to-be-forgotten requests. These data governance features help to simplify the Data Vault model and reduce the final amount of tables in the Vault.

Historization

While both Data Vault and Databricks offer mechanisms for data historization, relying solely on Delta Lake’s Time Travel for historization in a Data Vault implementation on Databricks might not be the best choice. In Databricks, the VACUUM command can permanently delete older data files, potentially removing historical data needed for auditing, lineage analysis and regulatory compliance. Hence, alternative historization methods should be considered, such as maintaining traditional historization with Data Vault’s modelling insert-only approach, or leveraging Databricks’ Change Data Feed to capture a stream of changes made to Delta Lake tables. This ensures a complete and auditable history, even if older data versions are removed by the VACUUM command.

Performance Considerations

When implementing Data Vault on Databricks, performance optimization requires architectural considerations that comprehend the characteristics of both systems. The modular design of Data Vault can create numerous tables with complex join patterns, which can be challenging in Databricks’ Spark environment, since Delta Lake’s column-based Parquet files can struggle with extensive joins. To address this challenge, practitioners should minimize satellite splits (leveraging Databricks’ native security and privacy features instead), implement virtualization in the Business Vault through views, and utilize Point-in-Time and Bridge tables to precompute historical snapshots that reduce join complexity and aid in achieving the target granularity.

For optimal performance, information marts should adopt Flat & Wide structures that prioritize query speed over storage efficiency (an acceptable trade-off given today’s relatively low storage costs). Additional performance gains can be achieved by strategically applying Delta Lake features like Z-Ordering and data skipping to enhance the information delivery process. The decision between views and fully materialized information marts is also an aspect to consider; while views reduce redundancy and simplify management, materialized marts with denormalized tables provide substantial performance benefits for complex reporting scenarios that would otherwise require resource-intensive joins across multiple Data Vault structures. A balanced approach combining views and materialized views should be based on query complexity, data volume, and update frequency, ensuring that reporting, and analytics workloads remain performant. This way we ensure that a Data Vault implementation on Databricks can maintain both the modeling flexibility of Data Vault and the performance capabilities of the Databricks platform.

Data Vault on Databricks: The Best of both Worlds

Implementing Data Vault on Databricks represents a practical and effective combination that merges Data Vault’s tool-agnostic architecture with Databricks’ technical capabilities. To optimize this integration, organizations should make thoughtful adjustments that create synergies between the modeling methodology and platform, including leveraging Unity Catalog for security and privacy satellite management, combining architectural designs while maintaining historization and data lineage, and virtualizing queries in the downstream layers with Flat & Wide structures with PIT and Bridge tables as underlying elements to enhance performance. This balanced approach allows organizations to improve governance and simplify data management, while preserving the core strengths of both systems.

Conceptual vs Logical vs Physical Data Models

Why Are Data Models Important?

Before diving into the specifics, let’s understand the purpose of data modeling. Imagine building a house. You wouldn’t start hammering wood together randomly—you’d begin with a sketch, then a blueprint, and finally the construction. Data models serve a similar purpose for databases and data systems.

They help ensure everyone involved (business users, developers, engineers) shares the same understanding of how data is organized, connected, and accessed.



1. What Is a Conceptual Data Model?

The conceptual model is your high-level business map. It’s like the sketch of your house drawn on a napkin. It’s not concerned with technology or database structures. Instead, it focuses on the business concepts and how they relate.

In simple terms, it answers questions like:

  • What are the key things we care about? (e.g., Customers, Products, Orders)
  • How are they related? (e.g., Customers purchase Products)

Here’s a basic example:

  • Entities: Customer, Product, Purchase
  • Relationships: A Customer makes a Purchase; a Purchase involves a Product

You don’t list detailed fields or attributes yet—just the big picture. It’s usually created during the early discussions between business stakeholders and data professionals. It helps everyone align on the language and goals before jumping into technical design.

When Do You Use a Conceptual Model?

You use this at the start of a project, especially when:

  • You’re gathering requirements from the business
  • You’re building a shared understanding with non-technical stakeholders
  • You want to clarify business rules and entities

2. What Is a Logical Data Model?

Once you understand the business concepts, it’s time to turn those into a more detailed, technology-independent design. That’s the job of the logical model.

The logical model focuses on the structure of data—what fields each entity has, how they’re connected, and what kind of data they store. But it still doesn’t worry about the actual database platform or syntax.

Continuing the earlier example, a logical model might say:

  • Customer has attributes like First Name, Last Name, Email
  • Product has attributes like Product ID, Name, Price
  • Purchase links Customer and Product using unique IDs

In the context of Data Vault (a methodology for modeling enterprise data warehouses), this is where you define your:

  • Hubs: Core business entities (e.g., Customer, Product)
  • Links: Relationships between entities (e.g., Purchase)
  • Satellites: Descriptive data about Hubs and Links (e.g., customer name, address)

You also classify data here. For instance, you might mark some attributes as sensitive for privacy reasons or note how frequently they change.

When Do You Use a Logical Model?

This comes after your conceptual model, typically during solution design or system architecture planning. You use it when:

  • You need to define how data should be structured and connected
  • You’re planning your Data Vault architecture
  • You want to define metadata for automation tools like dbt, Wherescape, or Coalesce

3. What Is a Physical Data Model?

Now we get technical. The physical model is the actual implementation in a database system. It’s like building the house based on the blueprints.

This includes:

  • Create table statements
  • Insert/load scripts
  • Indexes and constraints (e.g., foreign keys)
  • Platform-specific configurations (e.g., Snowflake vs. Oracle)

In the physical model, you decide:

  • How data is stored (table structures, partitions)
  • How data is accessed (views, security layers)
  • How data is secured (row-level or column-level permissions)

For example, if your logical model says an attribute is sensitive, your physical model might enforce this by putting that attribute in a separate satellite or restricting access using database roles.

When Do You Use a Physical Model?

This comes last in the chain. You use it when:

  • You’re ready to implement in a database
  • You’re generating SQL from your metadata (often using automation tools)
  • You’re deploying the actual tables, views, and loading processes

Summary: The Three Layers Compared

Aspect Conceptual Model Logical Model Physical Model
Purpose High-level business understanding Detailed data structure without technology Actual implementation in a specific database
Focus Entities & relationships Attributes, keys, classifications SQL scripts, schemas, storage
Audience Business users & analysts Data architects & engineers DBAs & developers
Examples Customer purchases Product Customer has Name, Email; Link to Product CREATE TABLE Customer (…); GRANT SELECT ON ViewX

The Modeling Process: From Concept to Code

One of the key takeaways from Michael Olschimke’s explanation in the Data Vault Friday session is that these models are not alternatives—they’re steps in a process.

  1. Start with the conceptual model to understand the business.
  2. Create a logical model based on the incoming data and requirements.
  3. Generate the physical model using automation tools or code templates tailored to your database platform.

Each step builds on the one before it, guiding you from abstract ideas to concrete implementation.

Final Thoughts

If you’re new to data engineering, start small. Talk to the business. Sketch out their world. Then, gradually evolve those ideas into structured data models and finally into code. Understanding the differences between conceptual, logical, and physical models will make you a more effective engineer—and a better bridge between business and tech.

Watch the Video

Soft-Deleting Records in Data Vault: A Real-World Approach to Status Tracking Satellites

Soft-Deleting Records in Data Vault

When working with Data Vault in real-world enterprise data warehousing projects, managing soft-deleted records is more than just a theoretical exercise—it’s a necessity. While many books and training examples offer simplified scenarios, real-world implementations must take into account complex requirements such as status tracking from multiple source systems. In this article, we dive into how to virtualize dimensions in a Data Vault model with proper handling of status tracking satellites, ensuring that soft deletions are effectively managed and the integrity of historical records is preserved.



The Problem with Simplified Examples

Most Data Vault tutorials focus on core concepts: Hubs, Links, and standard Satellites. These foundational examples are useful for learning but fall short when we need to address data that has been logically removed or soft-deleted. In real-world systems, this is a common occurrence, and ignoring it risks producing inaccurate analytics and flawed dimension models.

The key challenge is to determine whether a business entity—like a customer, product, or concept—is still “active” in the eyes of the business. This gets even trickier when the data comes from multiple source systems, each with its own deletion logic. That’s where Status Tracking Satellites (also known as Effectivity Satellites) come in.

Scenario Overview: Multi-Source Concept with Soft Deletes

Consider a scenario where a Concept (e.g., “Customer”) is fed by two different source systems. Here’s a breakdown of the Data Vault objects involved:

  • Concept_PIT – A Point-In-Time (PIT) table indexing data across all satellites.
  • Concept_SAT_S_source1 – A standard satellite with descriptive data from Source 1.
  • Concept_SATST_source1 – A status tracking satellite for Source 1.
  • Concept_SAT_S_source2 – A standard satellite from Source 2 with more descriptive attributes.
  • Concept_SATST_source2 – A status tracking satellite for Source 2.

In this setup, each source system tracks its own deletions, independently of the other. That means a Concept could be deleted in one source but still be active in another. Properly modeling and querying this requires careful integration of all status indicators.

What Do Status Tracking Satellites Actually Do?

Contrary to some misunderstandings, status tracking satellites are not used to track the deletion of descriptive attributes. That’s the role of standard satellites. Instead, they track whether the entire business key has been logically deleted in the source system. For example, if a customer row is completely removed from a source table, the status tracking satellite records that deletion event.

This distinction is important: you might null out a field in the source system without deleting the record. The standard satellite captures that. But if the whole customer row is deleted, only the status tracking satellite will catch it.

How to Use the PIT Table

The PIT table is key to virtualizing dimensions. It acts as a bridge, linking together the various satellites—both descriptive and status tracking—by capturing the effective row per business key and timestamp. Your virtual dimension view selects from the PIT table and joins all relevant satellites using hash keys and load dates.

In this case, you treat the status tracking satellites just like standard satellites. You join them on hash keys and load dates using PIT indexes. This lets you bring in any flags, such as IsActive or deletion timestamps, as part of your view logic.

Business Rules for Determining Active Status

One of the biggest questions in designing this architecture is: How do we determine if a business key is still active?

There are a few approaches:

  • Single-source dominance: If the customer is deleted in the primary (golden) source, the business key is considered deleted.
  • All-source consensus: The business key is only considered deleted if it’s removed from all source systems.

Each approach has its pros and cons. The decision should be based on your business rules and requirements. You can use simple boolean flags like IsActive or more advanced logic combining multiple status indicators from different sources.

Should You Remove Deleted Entities from Dimensions?

This is a hot topic. Some organizations want to remove soft-deleted entities from their dimension tables entirely. While that may sound clean, it can create problems downstream—especially in fact tables where foreign key references still exist for those deleted entities.

The recommended approach? Flag them instead of deleting them. This preserves history and maintains referential integrity. It also helps analysts understand that, yes, the product or customer was deleted—but it still contributed to revenue or other KPIs in the past.

Virtualizing the Dimension View

Your final dimension view should:

  • Select from the PIT table for the appropriate concept.
  • Join to all descriptive satellites using the hash key and PIT load dates.
  • Join to all status tracking satellites similarly, treating them like descriptive sources.
  • Derive an IsActive or IsDeleted flag using business logic.

Here’s a simplified example of what that SQL might look like:

SELECT 
  pit.BusinessKey,
  sat1.Description1,
  sat2.Description2,
  CASE 
    WHEN st1.IsActive = 1 AND st2.IsActive = 1 THEN 1
    ELSE 0
  END AS IsActive
FROM Concept_PIT pit
LEFT JOIN Concept_SAT_S_source1 sat1 
  ON pit.HashKey = sat1.HashKey AND pit.LoadDate1 = sat1.LoadDate
LEFT JOIN Concept_SAT_S_source2 sat2 
  ON pit.HashKey = sat2.HashKey AND pit.LoadDate2 = sat2.LoadDate
LEFT JOIN Concept_SATST_source1 st1 
  ON pit.HashKey = st1.HashKey AND pit.LoadDateST1 = st1.LoadDate
LEFT JOIN Concept_SATST_source2 st2 
  ON pit.HashKey = st2.HashKey AND pit.LoadDateST2 = st2.LoadDate

This query structure ensures that all available data is consolidated and evaluated according to business-specific logic to determine the final dimension state.

Final Thoughts

Handling soft deletes in a Data Vault using status tracking satellites is a robust and scalable solution for real-world enterprise systems. The key is to treat these satellites as regular descriptive tables, include them in your PIT tables, and let business logic drive how deletions are interpreted in the dimension views.

Instead of deleting records from your dimensions—which can break fact table relationships—simply flag them. This gives you the full power of historical traceability while still providing clear information about current entity status. As always, your implementation should follow the business rules defined by your organization or your client.

Watch the Video

How to Model Address Data in Data Vault

Understanding the Nature of Address Data

In many systems, address data doesn’t come in a uniform format. Some systems may embed it directly in a contact or customer table—think “billing address” and “shipping address” fields in Salesforce—while others provide a separate table for addresses and even a relationship table showing links between addresses and business entities.

Let’s look at how to tackle both of these situations using Data Vault best practices.



Case 1: Addresses as Attributes Inside Another Table

If your source delivers addresses as part of another table (e.g., contact data with billing and shipping fields), the Raw Data Vault should model the data exactly as it comes. For example:

  • Create a Contact Hub with a business key for contacts.
  • Attach a Satellite containing billing and shipping address fields like city, street, and ZIP code.

Even if multiple contacts share the same address, duplication is acceptable in the Raw Vault—it’s a reflection of how the source system delivers the data. Optimization or deduplication can happen in the Business Vault or information marts.

Case 2: Addresses in a Separate Table

When your source system contains a dedicated address table, you have two main modeling options:

Option A: Treat Address as a Hub

  • Create an Address Hub using a business key. If no natural key exists, use a surrogate/technical key.
  • Attach a Satellite to store descriptive fields (e.g., street, city, ZIP).
  • Use a Link to relate addresses to other Hubs like Contact, Customer, or Lead.

This pattern is especially useful in industries like insurance, where addresses are treated as critical business objects (e.g., accident location).

Option B: Treat Address as Reference Data

  • Store addresses in a flat reference table.
  • Use an ID (like address_id = 55) as a code in a descriptive Satellite on related Hubs.

This is simpler but comes with limitations—it doesn’t track historical changes. For example, if a street name changes, the system won’t retain that history.

Tracking Changes in Reference Data

To address the historical limitation, consider modeling reference data with:

  • A Reference Hub (no hashed keys, just the code, load date, and record source).
  • A Reference Satellite to track changes over time using load date as part of the primary key.

This design allows you to maintain a history of changes in descriptive reference data without violating Data Vault principles.

Handling Many-to-Many Relationships Between Addresses and Entities

Things get more interesting when addresses are shared across multiple business objects (e.g., one address used by both a Lead and a Customer). If your source includes a bridge table (many-to-many), follow this approach:

  • Create an Address Hub.
  • Create individual Hubs for each business object (Lead, Customer, Contact).
  • Establish a Link using the bridge table to represent relationships.
  • Track relationship history using Effectivity Satellites.

If the bridge table uses a generalized object like “Customer” to reference multiple types (Contact, Account, Lead), you’ll need:

  • A Generic Customer Hub.
  • Use raw business keys or technical IDs (UUIDs).
  • Create Links between the Customer Hub and the Address Hub.
  • Use Satellites to track effectiveness (i.e., from when to when an address is associated).

Resolving Ambiguity with Conditional Relationships

Sometimes, the source system generalizes business objects (e.g., Microsoft CRM’s Customer entity could be an Account, Lead, or Contact). In these cases, build a generic Customer Hub first. Then, in the Business Vault, apply conditional logic to determine if a Customer is actually a Lead, Contact, or Account—but only in the Business Vault.

This conditional logic would take the form of queries that check whether a UUID from the generic Customer Hub exists in the Lead Hub. If so, you can establish a Business Vault Link between the generic Customer and the Lead.

Guiding Principles for Modeling Address Data

  • Stay Data-Driven: Model what you see, not what you think should be there.
  • Don’t Add Conditional Logic to the Raw Vault. It belongs in the Business Vault.
  • Use Hubs for real business objects like Address when they are shared across systems or have standalone value.
  • Use Reference Data when addresses are just descriptive codes without relationships.
  • Track History with Effectivity or Reference Satellites if needed.

Ultimately, the choice between treating address data as a business object or reference data depends on your use case. If you’re dealing with complex, shared addresses with historical importance, model them as Hubs. If not, use reference tables or Satellites. But always be consistent and avoid conditional logic in the Raw Vault.

Conclusion

Modeling address data in a Data Vault architecture isn’t one-size-fits-all. Whether it’s Salesforce, SAP, or Microsoft CRM, the goal is to be faithful to your data, follow the architecture’s guiding principles, and maintain flexibility. By doing so, you ensure scalability, auditability, and long-term maintainability of your data warehouse solution.

Watch the Video

Close Menu