Skip to content
  • There are no suggestions because the search field is empty.

Non-Historized Business Link Satellite

Applies to
Platform: Microsoft SQL Server · Snowflake · Snowflake dbt · Databricks · Databricks dbt · Fabric Lakehouse · Fabric Warehouse · Oracle
Architecture: Data Vault

A Non-Historized Business Link Satellite stores the descriptive data of each Link row once, without row hash and validity, in a Business Vault table. Use it for transaction data that a business rule takes from the Raw Vault and that does not change after it arrives, such as invoice lines. After each load, the result view shows one row per Link row with the load that inserted it.

A Non-Historized Business Link Satellite works like a Non-Historized Link Satellite. It differs in its sources, its layer, its relationship targets and the BDV_ prefix of its objects.

Sources and relationships

A Non-Historized Business Link Satellite reads the result views of Raw Vault objects, in one or more dataflows: Hubs, all Link types, all satellite types, Current Views and History Views. It also reads BusinessVault Composites. It has exactly one relationship to a Link or Business Link, and its foreign-key terms must be mapped. Vault Out can read it.

Create the model object

Loading behavior

The Non-Historized Business Link Satellite loads each Link key once. Later rows for the same Link key are not loaded, even when their values differ. The loader only inserts rows; it never updates or deletes them.

Properties

Persist Validity and Version Valid From Term do not apply.

Default Terms

There is no BG_RowHash, BG_ValidFromTimestamp or BG_ValidToTimestamp.

Generated objects

These are the names on Microsoft SQL Server for the Non-Historized Business Link Satellite load_incremental_bnlsat with one dataflow:

RoleGenerated namePurpose
IncrementSourceBDV_NHLSAT_load_incremental_bnlsat_IncrementSourceFinds the new increment
IncrementBDV_NHLSAT_load_incremental_bnlsat_IncrementStores the increments
SourceBDV_NHLSAT_load_incremental_bnlsat_SourceReads the sources
DeduplicationBDV_NHLSAT_load_incremental_bnlsat_DeduplicationRemoves duplicate rows
HashingBDV_NHLSAT_load_incremental_bnlsat_HashingCalculates Link_HK
HashingStorageBDV_NHLSAT_load_incremental_bnlsat_HashingTableStores the hashed rows
HashingLoaderBDV_NHLSAT_load_incremental_bnlsat_HashingLoaderFills the hashing table
EmbryoLoaderBDV_NHLSAT_load_incremental_bnlsat_EmbryoLoaderAdds missing Link keys
DeltaBDV_NHLSAT_load_incremental_bnlsat_DeltaSelects new Link keys
LoaderBDV_NHLSAT_load_incremental_bnlsat_LoaderInserts the new rows
StorageBDV_NHLSAT_load_incremental_bnlsatSatellite table
ResultBDV_NHLSAT_load_incremental_bnlsat_ResultQuery view
  • Loaders are stored procedures; the satellite table, the increment table and the hashing table are tables; all other objects are views.
  • The increment table exists only with an incremental load, that is, when a dataflow maps BG_IncrementalFilter; the increment source view only with Increment Management Type Auto.
  • The deduplication view exists only with a Deduplication Method other than None.
  • The hashing table and hashing loader exist only with Load Caching Hashing.
  • The embryo loader exists only when Use Embryo Loader is true on the relationship. It runs before the loader.
  • The result view exists only with Create Result Views.
  • With several dataflows, all objects except the table and the result view exist once per dataflow, with the dataflow name in their names.
  • The table has no unknown-member row.

The example object loads incrementally, so a load runs this chain:

_IncrementSource -> _Loader -> _Increment (new increment)
Raw Vault _Result views + _Increment -> _Source -> _Hashing
_Hashing -> _Delta -> _Loader -> BDV_NHLSAT_load_incremental_bnlsat
BDV_NHLSAT_load_incremental_bnlsat -> _Result
_Result -> _Delta (Link keys already stored)

The loader first stores the new increment, the highest BG_IncrementalFilter of the source. The source view reads the rows between the previous and the new increment from the result views of its sources. The delta view keeps the rows whose Link_HK is not in the result view, and the loader inserts them. Without an incremental load, the chain starts at _Source.

Example

The Non-Historized Business Link Satellite load_incremental_bnlsat on Microsoft SQL Server has a relationship to the Link common_sales between invoices and invoice lines. It reads that Link joined with the Non-Historized Link Satellite load_nlsat of the Raw Vault. BG_IncrementalFilter is mapped to the BG_LoadTimestamp of load_nlsat, with Increment Management Type Auto. The Raw Vault and then the Business Vault load four times:

  • Load 1 on 2026-10-28 08:00: load_nlsat stores invoice INV-1, line 1, quantity 2.
  • Load 2 on 2026-10-29 08:00: load_nlsat stores the new invoice INV-2, line 1, quantity 1. INV-1 line 1 arrives again with quantity 3 and is not loaded there.
  • Loads 3 and 4 on 2026-10-30 and 2026-10-31 08:00: load_nlsat stores no new row.

Check the result

Query the result view with the keys of the Link, here in the schemas p3b and p3:

SELECT l.FK_common_saleshead_INVOICE_NO AS INVOICE_NO,
       l.FK_common_salesline_LINE_NO AS LINE_NO,
       s.QUANTITY, s.BG_LoadTimestamp
FROM p3b.BDV_NHLSAT_load_incremental_bnlsat_Result AS s
JOIN p3.RDV_LNK_common_sales_Result AS l ON l.Link_HK = s.Link_HK
ORDER BY INVOICE_NO;

This is the result after load 4:

INVOICE_NO  LINE_NO  QUANTITY  BG_LoadTimestamp
INV-1       1        2.000     2026-10-28 08:00
INV-2       1        1.000     2026-10-29 08:00
  • Each load read only the rows that the Non-Historized Link Satellite had stored since the previous increment. The increment table recorded the increments 2026-10-28 08:00 and 2026-10-29 08:00.
  • Loads 3 and 4 found no new rows and inserted nothing.

Platform differences

  • Snowflake: names are in capitals, and the loader is a stored procedure. The load control task LC_BDV_NHLSAT_<model object name>_TASK calls it. The dataflow properties Use Stream and Warehouse Placeholder Variable Name apply.
  • Databricks and Fabric Lakehouse: table and view names are in lowercase, and the loader is the notebook BDV_NHLSAT_<model object name>_Loader. The properties File Format, Optimization Method, Optimization Method Columns and Use Sequential Dataflow Execution apply. Fabric Lakehouse allows only Foreign Key Mode None.
  • Databricks dbt and Snowflake dbt: the satellite becomes the dbt models bdv_nhlsat_<model object name>_source and bdv_nhlsat_<model object name>. The model bdv_nhlsat_<model object name>_result exists only when Create Result Views is true; the default on dbt is false. Load Caching, Increment Management Type and Use Embryo Loader are not available.
  • Fabric Warehouse: the same objects as on Microsoft SQL Server, deployed by notebooks.
  • Oracle: names are in capitals, and the loader is a PL/SQL package. Partition Clause adds its text to the CREATE TABLE statement. Table Compression, the tablespaces and the statistics properties also apply.
  • Foreign Key Mode Create Enforced exists only on Microsoft SQL Server and Oracle.

Limitations

  • A Non-Historized Business Link Satellite has exactly one relationship, to a Link or Business Link. Business keys raise a validation warning.
  • Corrections of an already loaded Link key do not reach the table. A Business Link Satellite stores changing data with its history.
  • A dataflow that delivers the same Link key twice in one load makes the loader fail with a primary key violation. A Deduplication Method removes such duplicates before hashing.

Release differences

  • Generator 2.2: Increment Management Type and Use Embryo Loader are available.

Related articles