Skip to main content

Glossary

This glossary explains the core concepts of Yres. Technical identifiers (schema, table, procedure and column names) are shown exactly as they appear in the code — they often still contain IRIS, because the product was formerly called IRIS. In running text we use the product name Yres.

Going deeper

The load engine, SCD2 history and the seven load types are covered in detail in Yres explained and Load types.

Product and organization

TermMeaning
YresThe Azure data platform (data warehouse automation). Formerly IRIS.
IRISOld product name of Yres. Still appears in resource names (IRIS_DWH, kv-iris-…), internal URLs and code identifiers.
PlainwaterThe company behind Yres; develops and hosts the control plane.
OrganizationIsolated space in which a customer uses Yres; contains one or more environments. The first environment is always dev.
EnvironmentIsolated version of an organization. Each environment has its own ADF factory and its own IRIS_DWH database. The first environment is always dev; depending on the license also test, acceptance, prod.
DTAPDevelopment, Test, Acceptance, Production — the pattern of separated environments along which changes are promoted. The Change schemas in IRIS_DWH support this change management.
ProjectCategorizes work within an environment; contains changes and has a due date. Only available for organizations with multiple environments.
ChangeSet of edits to the data warehouse, to be released and installed to other environments (DTAP).
Scripted objectCustom SQL object (table, stored procedure, function) not generated by Yres, managed under a change.

The two planes

TermMeaning
Control planePlainwater's multi-tenant SaaS web app (one deployment for all customers). Manages organizations, users, environments and billing in a PostgreSQL database. Never holds customer data — it provisions and drives each data plane via the Azure Management, ADF, Key Vault and Azure DevOps APIs and a direct SQL connection.
Data planeOne ADF factory + one IRIS_DWH Azure SQL database per organization × environment, running inside the customer's own Azure tenant. This is where the data actually moves. This is where the load engine lives.

Sources and metadata

TermMeaning
Data sourceConnected source from which data is loaded (database, application, OData/REST, file server). Created via the "Create source" wizard.
SourceTypeThe source type that determines the load behavior (e.g. MSSQL_ADF, DB2, POSTGRESQL, MYSQL, ODATA, SALESFORCE, SAP_BDC). For each sourceType, fxExtractor generates the correct extract command and the delta WHERE clause.
ADFAzure Data Factory — the orchestration layer. Yres generates the pipelines to it; ADF copies bytes from source to STAGE and then calls SQL. ADF contains no load logic.
Integration Runtime (IR)ADF compute that reaches the source. Default AutoResolveIntegrationRuntime (cloud) for cloud-reachable sources; a self-hosted IR (pwccIntegrationRuntimeLinked) for on-prem/firewalled databases and file servers.
DictionaryStored source metadata (tables, columns, data types, keys, relations) in LoadManagement.Dictionary. Populated by "Refresh metadata" and required before adding tables. File and REST sources skip this step.
vwExtractorThe contract view [LoadManagement].[vwExtractor] that ADF reads to determine what needs to be loaded. It is a thin wrapper: SELECT * FROM [LoadManagement].[fxExtractor](NULL, NULL).
fxExtractorThe table-valued function [LoadManagement].[fxExtractor](@LoadFilter, @LoadType) that holds all extractor logic. Each returned row = one table to load, with all the parameters ADF passes downstream (load type, DeltaScript, target schemas, file/parsing options, pagination).

Layers in the data warehouse

TermMeaning
STAGEStaging schema where ADF lands the raw source extract (schema name via setting SchemaStage, default STAGE). This is where the framework columns ETL_Date, KeyHash and RowHash are computed.
HISHistory layer with the full SCD2 history (schema name via setting SchemaHIS). The HIS schema name is not hard-coded; in verifiable environments SchemaHIS resolves to ODS.
ODSOperational Data Store. Also the default value of SchemaHIS — in practice the HIS layer lands in the ODS schema.
ExposeThe reporting/expose layer (Exposed, Expose, user schemas). Contains the reporting-oriented views/tables plus RBAC, built by spMaterializeViews.
Data LakeOptional Parquet landing in Azure Data Lake Gen2. ADF copies STAGE to Parquet (with RowHash/KeyHash/EtlDate), partitioned on Source/Schema/Target/Year/Month.
STAGE → HIS → Expose

The fixed data spine is: source → ADF Copy → STAGEspLoadDWHspHIS_InsertAndUpdateHIS (SCD2) → spMaterializeViews → Expose. ADF moves only bytes; all load logic lives in SQL.

SCD2 history and hashing

TermMeaning
SCD2Slowly Changing Dimension type 2 — the historization model of the HIS layer. On a change, the old version is retained as a closed row and a new current version is inserted.
KeyHashvarbinary(66) hash (HASHBYTES('SHA2_512', …)) over the key columns, as a persisted computed column on STAGE. The match join is STAGE.Keyhash = HIS.Keyhash AND HIS.isCurrent = 1.
RowHashvarbinary(66) hash (HASHBYTES('SHA2_512', …)) over the rowhash-marked columns. Change detection is STAGE.Rowhash <> HIS.Rowhash. A column with Rowhash = 0 is excluded from change detection.
ETL_DateLoad timestamp of the row; one ETL_Date per run, set at the start of the source pipeline.
ETL_EndDateEnd date of a row version. For the current (open) version this is the sentinel 2999-01-01 00:00:00. When a row is closed, ETL_EndDate is set to the ETL_Date of the new version.
isCurrentbit flag: 1 = current version, 0 = closed/historical. Always 1 or 0, never NULL. There is exactly one current row per key.
Deltanvarchar(1) flag on the HIS row: 'N' = new, 'D' = changed.
<stripped>_RowIdIDENTITY surrogate column per HIS table. The name is the target table name, lowercased with non-alphanumeric characters removed, plus _RowId (e.g. AX_dbo_Custaxdbocust_RowId).
Surrogate keyOptional Yres-generated integer key for the natural key, stored in [LoadManagement].[SurrogateKeys]. Driven by fxGetSurrogate(@Target) and the setting DefaultSurrogate.
Delta (watermark)The change-column value that DELTA/DELTAIMAGE/ADDITIONAL keep as a watermark. After the load, UsedTables.LatestRecord = MAX(<DeltaColumn>) is updated, so the next run only fetches newer records.

Load engine

TermMeaning
Load typeDetermines what happens to the existing HIS data. There are seven types: FULL, DELTA, DELTAIMAGE, IMAGE, OVERWRITE, RELOAD, ADDITIONAL. Set per table in LoadManagement.UsedTables.LoadType, overridable per run. See Load types.
spLoadDWHThe entry point ADF calls after STAGE is populated. A thin pass-through that calls spHIS_InsertAndUpdate directly (the old spUpdateETL_EndDate call is commented out; end-dating now happens inside spHIS_InsertAndUpdate).
spHIS_InsertAndUpdateThe SCD2 merge engine that processes STAGE → HIS. Handles six load types explicitly (DELTA, DELTAIMAGE, IMAGE, OVERWRITE, RELOAD, ADDITIONAL); FULL is the implicit default path.
spMaterializeViewsAfter the load, refreshes the materialized/persisted views in the Expose layer.
Persisted viewStored result of a view query; reloaded in level order.
Master pipelineADF pipeline configured from the frontend with conditional flow (on success / failure / completion). Available from v1.53.
Dynamic Workflow YRESThe generic load pipeline that runs on metadata (parameters: Source, Schema, Table, LoadType). On older versions it is still called Dynamic Workflow IRIS.

Monitoring and logging

TermMeaning
spWriteLoadStatusThe central load-status logger ([Monitoring].[spWriteLoadStatus]). Writes LS_Pipeline (at the start of a workflow/load), always LS_Trans, and sets the LoadLog status to RUNNING/SUCCEEDED/FAILED.
PLANNED / SKIPPEDThe two statuses that spPrepareWorkload (not spWriteLoadStatus) sets in LoadLog before the load even starts: PLANNED = this table load is actually picked up by the ForEach loop; SKIPPED = a not-yet-finished (PLANNED/RUNNING) load for the same table already existed, so this request is logged but not executed. See Monitoring & logging.
LoadLog[LoadManagement].[LoadLog] — one durable row per table load with the status (LoadStatus: PLANNED → RUNNING → SUCCEEDED/FAILED, or PLANNED → SKIPPED), start/end time, error message and a JSON snapshot of the config. Forms the join backbone of vwMonitor.
LS_Pipeline / LS_Trans[Monitoring].[LS_Pipeline] = one row per pipeline/workflow run; [Monitoring].[LS_Trans] = one row per step (the fine-grained timeline).
vwLoadsThe canonical per-pipeline load timeline [Monitoring].[vwLoads] (start + runtime per step, row counts, status).
vwMonitorBroader monitor view [Monitoring].[vwMonitor] that also includes materialized views and Power BI refreshes.
No vwLoadMonitor

The view vwLoadMonitor does not exist in the live database. Use vwLoads (pipeline timeline) or vwMonitor (broader). See the SQL reference.

Settings, security and infrastructure

TermMeaning
SettingConfiguration value in [Config].[Settings], read via [Config].[fxGetSetting](@SettingName). Determines schema names, storage type, pagination, scaling, and so on.
SchemaHIS / SchemaStageSettings that determine the HIS and STAGE schema names (default ODS and STAGE respectively), resolved per table by Config.fxGetSchemaName.
DefaultStoreSetting for row- (read/write) or column-oriented (queries) storage of STAGE. Default ROW.
Service tierThe Azure SQL database tier (settings DefaultServiceTier/HighServiceTier). Yres can automatically scale up and down around a load.
Surrogate keySee SCD2 history and hashing.
SSOSingle Sign-On via Azure; enforceable per user.
RBACRole-based access control; roles defined as CRUD per permission type. The database role Yres_dbreader is built by spGenerateDbreader.
Key VaultAzure Key Vault where all credentials live. The frontend never stores secrets; source credentials go to the customer's Key Vault (adf-{sourceName}-…) and the linked service references them.