ms-ai-architect/skills/ms-ai-engineering/references/data-engineering/onelake-data-strategy.md
Kjell Tore Guttormsen ddce43d8b2 feat(ms-ai-architect): Spor 1 — Port-1-substrat migrert på 4 ikke-advisor-skills (243 Source + 327 Type + 325 TOC + stale-verified poison fjernet) [skip-docs]
Steg 9 (R4): unified migrate-corpus.mjs --write over engineering/governance/
infrastructure/security. 327 filer mutert, verified=null, prosa byte-identisk
(fra første ## seksjon), advisor urørt (0 endringer).

To applier-fixes oppdaget under kjøring (TDD, RED→GREEN):
- insertHeaderFields: anker faller nå tilbake når en meta-linje selv passerer
  500B (2 filer pakket et avsnitt i **Status:** → Type/Source landet utenfor
  scan-vinduet, applierens post-write-assertion fanget + restaurerte).
- normalizeStaleVerified: fjerner nå ALLE stale non-date **Verified:** i
  500B-vinduet, inkl. stray body-dup rett under --- (9 mlops-genaiops-filer var
  ellers falskt "verified"/fresh, droppet fra worklist). Operatør-godkjent
  utvidelse av carve-out; kun stray metadata-linjer, aldri prosa.

test-transform-criterion: precondition oppdatert til post-migrasjons-sannhet
(fila bærer nå Source). Suite 728/728 grønn.
2026-07-04 10:19:11 +02:00

773 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OneLake Data Strategy and Shortcuts
**Last updated:** 2026-06-24
**Status:** GA (Shortcuts, OneLake Security for kjerne-engines, Shortcut Transformations for CSV/Parquet/JSON), Preview (OneLake Security på Eventhouse/3.-parts-engines, Shortcut Transformations for Excel + AI-powered)
**Category:** Data Engineering for AI
**Type:** reference
**Source:** https://learn.microsoft.com/fabric/real-time-intelligence/query-acceleration-overview
---
## Innhold
- [Introduksjon](#introduksjon)
- [Kjernekomponenter](#kjernekomponenter)
- [Arkitekturmønstre](#arkitekturmønstre)
- [Beslutningsveiledning](#beslutningsveiledning)
- [Integrasjon med Microsoft-stakken](#integrasjon-med-microsoft-stakken)
- [Offentlig sektor (Norge)](#offentlig-sektor-norge)
- [Kostnad og lisensiering](#kostnad-og-lisensiering)
- [For arkitekten (Cosmo)](#for-arkitekten-cosmo)
- [Kilder og verifisering](#kilder-og-verifisering)
## Introduksjon
OneLake er Microsofts unified data lake for hele Microsoft Fabric-plattformen — "OneDrive for data". Hver Fabric-tenant får automatisk provisjonert én enkelt, logisk data lake som binder sammen alle analytiske workloads. Shortcuts er en av OneLakes mest kraftfulle mekanismer: de fungerer som symbolske lenker (symbolic links) som lar deg unifisere data på tvers av domener, skyer og kontoer uten å flytte eller duplisere data.
For AI-arkitekter og data engineers er dette en game-changer: du kan bygge RAG-systemer, træne modeller og levere analytics på data som fysisk ligger i Azure Data Lake Storage Gen2, Amazon S3, Google Cloud Storage eller andre Fabric-items — alt via ett konsistent namespace og ett sikkerhetsparadigme.
**Key capabilities:**
- **Zero-copy data unification** — shortcuts peker til data, ikke kopierer dem
- **Multi-cloud support** — Azure, AWS, GCP, on-premises (via OPDG)
- **Transparent access** — alle Fabric-engines (Spark, SQL, KQL, Analysis Services) ser shortcuts som native folders
- **Unified security** — OneLake security (RLS/CLS — GA for kjerne-engines: Lakehouse, Spark, SQL analytics endpoint i user-identity mode, Direct Lake semantic models) gir granulær tilgangskontroll på tvers av alle shortcuts
- **API compatibility** — ADLS Gen2 og Blob Storage APIs fungerer nativt mot OneLake
**Confidence:** High — basert på 11 offisielle Microsoft Learn-kilder, inkludert REST API-dokumentasjon og Python/TypeScript code samples (2026-01-2026-02).
---
## Kjernekomponenter
### 1. OneLake Namespace
OneLake organiserer data hierarkisk:
```
https://onelake.dfs.fabric.microsoft.com/<workspace>/<item>.<itemtype>/<path>/<fileName>
```
**Eksempler:**
- HTTPS URI: `https://onelake.dfs.fabric.microsoft.com/MyWorkspace/MyLakehouse.Lakehouse/Files/data.csv`
- ABFS URI: `abfs://MyWorkspace@onelake.dfs.fabric.microsoft.com/MyLakehouse.Lakehouse/Files/`
- GUID-based URI: `https://onelake.dfs.fabric.microsoft.com/<workspaceGUID>/<itemGUID>/<path>/<fileName>` (immutable, anbefales for scripting)
**Item types som støtter shortcuts:**
- **Lakehouse** — Tables/ og Files/ folders
- **KQL Database** — Shortcuts/ folder (behandles som external tables)
- **Warehouse** — via SQL analytics endpoint (read-only for shortcuts)
- **Mirrored Databases** — Azure Databricks Mirrored Catalog, Mirrored Databases
**Constraint:** Item types må være eksplisitt med `.lakehouse`, `.warehouse` etc. i URIen når du bruker navnebaserte paths (ikke GUID).
---
### 2. Shortcut-typer
#### 2.1 Internal OneLake Shortcuts
Peker til data innenfor Fabric-tenant:
- **Target:** KQL databases, Lakehouses, Mirrored Catalogs, Warehouses, Semantic models, SQL databases
- **Auth model:** **Passthrough (SSO)** — brukerens identitet sendes til target, krever OneLake security-permissions i target location
- **Use case:** Deling av curated data mellom teams, cross-workspace analytics, medallion architecture (bronze → silver → gold)
**Viktig:** Når du bruker Power BI DirectLake over SQL eller T-SQL i "Delegated identity mode", passeres **item owner's identity**, ikke brukerens. Løsning: Bruk DirectLake over OneLake mode eller T-SQL i "User's identity mode".
#### 2.2 External Shortcuts
Peker til data utenfor Fabric:
- **Supported sources:** Amazon S3, S3-compatible, Azure Data Lake Storage Gen2, Azure Blob Storage, Dataverse, Google Cloud Storage, OneDrive, SharePoint, on-premises/network-restricted (via OPDG)
- **Auth model:** **Delegated** — shortcut bruker en fixed credential (cloud connection), og brukerens OneLake security-rolle evalueres *før* target-tilgang sjekkes
- **Caching:** GCS, S3, S3-compatible, og OPDG shortcuts støtter caching (1-28 dager, filer < 1 GB)
**Decision logic for external shortcuts:**
| S3 connection authorizes user1? | OneLake security authorizes user2? | Result |
|----------------------------------|-------------------------------------|--------|
| Yes | Yes | ✅ Access |
| Yes | No | ❌ Denied |
| No | Yes | ❌ Denied |
| No | No | ❌ Denied |
**Constraints:**
- External shortcuts krever **Fabric Read permission** på item (ikke bare OneLake security)
- Maks 100,000 shortcuts per Fabric item
- Maks 10 shortcuts per OneLake path
- Maks 5 direkte shortcut-til-shortcut links
- Shortcuts støtter ikke non-Latin characters
- Synkronisering skjer *nesten* instantly, men propagation kan variere (cache, network)
---
### 3. Lakehouse Folder Structure og Shortcut Placement
**Lakehouse har to top-level folders:**
```
MyLakehouse.Lakehouse/
├── Tables/ # Strukturerte datasets (Delta format)
│ ├── shortcut1 # Kun top-level shortcuts tillatt
│ └── shortcut2 # Auto-syncs metadata hvis target er Delta
└── Files/ # Ustrukturert/semi-strukturert data
├── folder1/ # Shortcuts på alle nivåer
│ └── shortcut3
└── shortcut4
```
**Regler for Tables/ folder:**
- ✅ Shortcuts kun på top-level (ikke subdirectories)
- ✅ Hvis target er Delta Parquet → automatic table discovery
- ✅ Kan peke til enkelt tabell *eller* schema (parent folder med flere tabeller)
- ❌ Tabellnavn med mellomrom støttes ikke (Delta-constraint)
**Regler for Files/ folder:**
- ✅ Ingen restriksjoner — shortcuts på hvilket som helst nivå
- ❌ Ingen automatic table discovery
**KQL Database:**
- Shortcuts vises i **Shortcuts/** folder
- Behandles som external tables: `external_table('MyShortcut') | take 100`
---
### 4. Shortcut Transformations (GA for CSV/Parquet/JSON, Preview for Excel + AI-powered)
Automatisk konvertering av raw files (CSV, Parquet, JSON) til Delta tables:
**How it works:**
1. Opprett shortcut i `/Tables` (via "New Table Shortcut" i Lakehouse UI)
2. Konfigurer transformation parameters:
- Delimiter (CSV): comma, semicolon, pipe, tab, etc.
- First row as headers (CSV)
- Table Shortcut name
3. Fabric Spark compute kopierer data til managed Delta table under `/Tables`
4. Synkronisering hvert 2. minutt — detekterer nye/modifiserte/slettede filer
**Benefits:**
- ❌ Ingen manuelle ETL-pipelines
- ✅ Frequent refresh (2 min polling)
- ✅ Output er Delta Lake (åpent format)
- ✅ Unified governance (OneLake lineage, Purview)
**Constraint:** Kun for Lakehouse items, output alltid til `/Tables`.
---
### 5. OneLake Security (GA for kjerne-engines)
OneLake bruker **RBAC (Role-Based Access Control)** med deny-by-default:
**Role-komponenter:**
1. **Type:** GRANT (DENY ikke støttet ennå)
2. **Permission:** Read, ReadWrite
3. **Scope:** Tables, folders, schemas (+ row/column level constraints)
4. **Members:** Microsoft Entra identities (users, groups, non-user identities)
**Workspace roles vs. OneLake security:**
| Workspace Role | View OneLake files? | Write OneLake files? | Edit security roles? |
|----------------|---------------------|----------------------|----------------------|
| Admin | Always Yes* | Always Yes* | Always Yes* |
| Member | Always Yes* | Always Yes* | Always Yes* |
| Contributor | Always Yes* | Always Yes* | No |
| Viewer | No (use OneLake security) | No | No |
\*Admin/Member/Contributor override OneLake security Read permissions via automatic Write permission.
**Default roles:**
- **Lakehouse DefaultReader:** Read on all folders under `Tables/` og `Files/` → assigned to users with **ReadAll permission**
- **Lakehouse DefaultReadWriter:** Read on all folders → assigned to users with **Write permission**
**Permissions:**
| Permission | Capabilities | SQL Equivalent | Constraints |
|------------|--------------|----------------|-------------|
| **Read** | Read data, view table/column metadata | VIEW_DEFINITION + SELECT | Can include RLS/CLS |
| **ReadWrite** | Read + write data (create/delete/rename folders, upload files, manage shortcuts) | ALTER + DROP + UPDATE + INSERT | Cannot include RLS/CLS; only via Spark/OneLake APIs (not Lakehouse UI) |
**Row-Level Security (RLS):**
- SQL predicates for filtering rows: `WHERE city = 'Redmond'`
- Combines across roles via **OR** operator: `WHERE city = 'Redmond' OR city = 'New York'`
- Case-insensitive (collation: `Latin1_General_100_CI_AS_KS_WS_SC_UTF8`)
**Column-Level Security (CLS):**
- Hides columns from users
- Combines across roles via **INTERSECTION** (deny semantic in SQL Endpoint)
- ❌ Metadata kan fortsatt lekke i error messages
**Engine support for RLS/CLS:**
| Engine | RLS/CLS Filtering | Status |
|--------|-------------------|--------|
| Lakehouse | ✅ Yes | GA |
| Spark notebooks | ✅ Yes | GA |
| SQL Analytics Endpoint (user's identity mode) | ✅ Yes | GA |
| Semantic models (DirectLake on OneLake) | ✅ Yes | GA |
| Eventhouse | ❌ No | Planned |
| Data warehouse external tables | ❌ No | Planned |
**Shortcuts og OneLake security:**
- **Passthrough shortcuts (internal):** User's identity sendes til target — krever OneLake security i target location
- **Delegated shortcuts (external):** OneLake security evalueres *før* delegated credential, krever Fabric Read permission på item
**Role evaluation:**
- Multiple roles kombineres via **UNION** (least-restrictive)
- Formula: `( (R1ols ∩ R1cls ∩ R1rls) (R2ols ∩ R2cls ∩ R2rls) )`
- Hvis kolonner/rader ikke aligner på tvers av roller → **access blocked** (data leak prevention)
**Limits:**
| Scenario | Limit |
|----------|-------|
| Max roles per Lakehouse | 250 |
| Max members per role | 500 |
| Max permissions per role | 500 |
| Latency: role changes | ~5 min |
| Latency: group membership | ~1 hour (OneLake) + ~1 hour (Fabric engines) |
**Constraints:**
- ❌ B2B guest users: must configure Microsoft Entra External ID with "Guest users have same access as members"
- ❌ Cross-region shortcuts ikke støttet
- ❌ Distribution lists i SQL Endpoint: ikke resolved
- ❌ Mixed-mode queries (OneLake security + non-OneLake security data) fails
- ❌ Private link protection ikke støttet
- ❌ External data sharing (preview) inkompatibel med OneLake security
---
## Arkitekturmønstre
### 1. Medallion Architecture med Shortcuts
**Bruk shortcuts til Bronze layer for å unngå data duplication:**
```
Bronze/ (Shortcuts til sources)
├── ShortcutToADLS → Azure Data Lake (raw logs)
├── ShortcutToS3 → AWS S3 (sensor data)
└── ShortcutToDataverse → Dataverse (CRM data)
Silver/ (Delta tables)
├── CleanedLogs.delta
├── EnrichedSensor.delta
└── CuratedCRM.delta
Gold/ (Delta tables)
├── AggregatedMetrics.delta
└── CustomerInsights.delta
```
**Benefits:**
- ❌ Ingen datakopiering i Bronze
- ✅ Single source of truth
- ✅ Cost-effective (kun transformation i Silver/Gold)
---
### 2. Cross-Workspace Data Sharing
**Scenario:** Team A eier curated data i `TeamA_Workspace/GoldLakehouse`, Team B trenger tilgang.
**Løsning:**
1. Opprett internal shortcut i `TeamB_Workspace/ConsumerLakehouse/Files/TeamA_Gold`
2. Peker til `TeamA_Workspace/GoldLakehouse/Tables/CustomerInsights`
3. Team B-brukere må ha OneLake security Read permission i `TeamA_Workspace/GoldLakehouse`
**Benefits:**
- ✅ Zero-copy data sharing
- ✅ Team A kontrollerer access via OneLake security
- ✅ Lineage tracking (workspace lineage view)
---
### 3. Multi-Cloud RAG Architecture
**Scenario:** RAG-system som trenger data fra Azure (structured) + AWS S3 (documents) + OneDrive (SharePoint reports).
**Architecture:**
```
Lakehouse: RAG_Data
├── Files/
│ ├── Azure_ADLS_Shortcut/ → Structured product catalog
│ ├── AWS_S3_Shortcut/ → PDF manuals (chunking target)
│ └── OneDrive_Shortcut/ → Weekly reports
└── Tables/
└── EmbeddingsTable.delta → Vector embeddings (Azure AI Search)
```
**Workflow:**
1. **Ingest:** Shortcuts gi transparent tilgang til sources
2. **Chunk:** Spark notebook leser fra shortcuts, chunker documents
3. **Embed:** Azure OpenAI Embeddings API (via Semantic Kernel)
4. **Store:** Delta table med embeddings + metadata
5. **Query:** Azure AI Search over OneLake shortcut til `EmbeddingsTable.delta`
**Benefits:**
- ✅ Unified namespace for multi-cloud data
- ✅ OneLake security på tvers av alle sources
- ✅ Cost optimization (S3 caching for 28 days → redusert egress)
---
### 4. External Shortcut med Delegated Access
**Scenario:** Partner-organisasjon deler data via S3, kun nøkkelbrukere skal ha tilgang.
**Setup:**
1. Opprett S3 shortcut i Lakehouse med cloud connection (delegated credential)
2. Opprett OneLake security role: `PartnerDataRole`
- Scope: `/Files/PartnerS3Shortcut`
- Permission: Read
- Members: `DataScience_Group`
3. Result: Kun `DataScience_Group` kan lese fra shortcut (even if S3 connection authorizes broader access)
**Constraint:** Users må ha Fabric Read permission på Lakehouse (ikke bare OneLake security).
---
## Beslutningsveiledning
### Når bruke shortcuts vs. data kopiering?
| Scenario | Bruk Shortcuts | Bruk Kopiering (Copy/ETL) |
|----------|----------------|---------------------------|
| Source er allerede i optimal format (Delta) | ✅ | ❌ |
| Source er read-only (partner data) | ✅ | ❌ |
| Trenger granular transformations (complex business logic) | ❌ | ✅ |
| Lav latency critical (< 1 sec query response) | ❌ (consider caching) | ✅ |
| Multi-cloud data with high egress cost | ✅ (enable caching) | ❌ |
| Bronze layer i medallion | ✅ | ❌ |
| Silver/Gold layer | ❌ | ✅ (transform to Delta) |
| Compliance: data må være i-region | ❌ (shortcuts cross-region ikke støttet) | ✅ |
---
### Internal vs. External Shortcuts?
| Criteria | Internal Shortcut | External Shortcut |
|----------|-------------------|-------------------|
| **Target location** | Fabric items (same tenant) | Azure, AWS, GCS, on-premises |
| **Auth model** | Passthrough (user's identity) | Delegated (fixed credential + OneLake security) |
| **Requires Fabric Read permission?** | No (only OneLake security) | Yes |
| **Caching supported?** | No | Yes (GCS, S3, OPDG) |
| **Cross-region?** | No (OneLake security constraint) | No (ADLS Gen2 parity) |
| **Use case** | Cross-team data sharing, workspace federation | Multi-cloud unification, partner data |
---
### Shortcut Transformations vs. Manual ETL?
| Criteria | Shortcut Transformation | Manual ETL (Data Factory, Spark) |
|----------|-------------------------|----------------------------------|
| **Complexity** | Low (no-code, UI-driven) | High (coding, orchestration) |
| **Supported formats** | CSV, Parquet, JSON → Delta | All formats |
| **Refresh frequency** | 2 min (automatic) | Custom (scheduled/event-driven) |
| **Transformation logic** | None (1:1 copy + format conversion) | Complex (joins, aggregations, business rules) |
| **Use case** | Simple file ingestion from external sources | Complex data pipelines with business logic |
---
## Integrasjon med Microsoft-stakken
### Microsoft Foundry + OneLake
**Scenario:** Microsoft Foundry project trenger tilgang til Lakehouse data.
**Integration points:**
1. **OneLake Datastore (Azure ML SDK):**
```python
from azure.ai.ml.entities import OneLakeDatastore, OneLakeArtifact
store = OneLakeDatastore(
name="onelake_example",
one_lake_workspace_name="<workspace_guid>",
endpoint="onelake.dfs.fabric.microsoft.com",
artifact=OneLakeArtifact(name="<lakehouse_guid>/Files", type="lake_house")
)
ml_client.create_or_update(store)
```
2. **Connection types:**
- **Identity-based (Entra ID):** DefaultAzureCredential
- **Service Principal:** Requires tenant_id, client_id, client_secret
3. **Use case:** Fine-tuning models on Lakehouse Delta tables, model training with OneLake shortcuts
**Constraint:** OneLake Datastore targets *artifact GUID*, ikke workspace/item names.
---
### Copilot Studio + OneLake
**Scenario:** Copilot Studio Generative Answers som indekserer Lakehouse data.
**Architecture:**
1. **OneLake Lakehouse** → contains Delta tables med product catalog
2. **Azure AI Search** → indexes OneLake via shortcut
- Knowledge Source type: Indexed OneLake
- Parameters: `fabric_workspace_id`, `lakehouse_id`, `target_path`, ingestion_parameters (embeddings model)
3. **Copilot Studio** → Generative Answers connected to AI Search index
**Benefits:**
- ✅ Single source of truth (data i OneLake)
- ✅ Automatic refresh (OneLake changes → AI Search re-indexes)
- ✅ Unified security (OneLake RBAC → AI Search access)
---
### Power BI + OneLake Shortcuts
**DirectLake over OneLake mode:**
- ✅ Passthrough auth (user's identity sendes til shortcut target)
- ✅ Støtter RLS/CLS i OneLake security
- ❌ DirectLake over SQL: bruker item owner's identity (ikke anbefalt for granular security)
**Use case:** Power BI semantic models over shortcuts til cross-workspace Lakehouses.
---
### Synapse Analytics + OneLake
**Apache Spark access:**
```python
oneLakePath = 'abfss://WorkspaceName@onelake.dfs.fabric.microsoft.com/LakehouseName.Lakehouse/Tables'
df = spark.read.format('delta').load(oneLakePath + '/Taxi/')
display(df.limit(10))
```
**Constraint:** Synapse external tables over OneLake shortcuts må bruke ABFS URI format.
---
### Azure Databricks + OneLake
**Integration:**
1. Premium Databricks workspace (supports Entra ID passthrough)
2. Enable "Azure Data Lake Storage credential passthrough" i cluster advanced options
3. Read OneLake shortcuts direkte:
```python
df = spark.read.format("delta").load("abfss://workspace@onelake.dfs.fabric.microsoft.com/lakehouse.Lakehouse/Tables/MyShortcut")
```
**Use case:** Databricks notebooks som leser curated data fra Fabric Lakehouse uten data duplication.
---
## Offentlig sektor (Norge)
### Utredningsinstruksen og OneLake Shortcuts
**§ 13: Teknologiske faktorer og leverandørstrategi**
**Vurderingskriterier for shortcuts:**
| Kriterium | OneLake Shortcuts | Tradisjonell datakopiering |
|-----------|-------------------|----------------------------|
| **Leverandørlås** | Middels — OneLake er Microsoft-proprietært namespace, men ADLS Gen2 API kompatibilitet gir exit strategy | Lav — standard ETL-verktøy |
| **Teknisk gjeld** | Lav — shortcuts eliminerer staging-lag og ETL-pipelines | Høy — mange kopierings-pipelines å vedlikeholde |
| **TCO** | Lavere — ingen storage duplication, redusert compute for kopiering | Høyere — storage + compute for staging |
| **Interoperabilitet** | Høy — ADLS Gen2/Blob API, Spark, SQL, KQL | Høy — standard formats (Parquet, Delta) |
**Anbefaling:** Bruk shortcuts for Bronze layer (raw data unification), men vurder data sovereignty constraints (se nedenfor).
---
### GDPR og Data Residency
**Constraint:** OneLake security støtter ikke cross-region shortcuts (preview limitation).
**Implikasjon for Norge:**
- Hvis capacity er i **West Europe** eller **North Europe** (Norge-nært), kan du bruke shortcuts til ADLS Gen2 i samme region
- ❌ Shortcuts til S3 (US) eller GCS (US) kan trigger GDPR-risiko hvis persondata
- ✅ Løsning: Bruk on-premises data gateway shortcuts til Norge-lokalisert storage
**Kontraktsklausul (Digdir-guide):**
> "Shortcuts til eksterne skylagringstjenester (AWS S3, GCS) skal kun brukes for ikke-personidentifiserbar data. Persondata skal lagres i Azure-ressurser innenfor EU/EØS med databehandleravtale iht. GDPR Art. 28."
---
### Forvaltningsloven § 11a: Automatisert saksbehandling
**Relevans:** Hvis shortcuts brukes til å hente data for AI-basert vedtak (eks. Copilot Studio-agent).
**Tiltak:**
1. **Auditability:** Enable OneLake lineage view for å tracke data-flow via shortcuts
2. **Data quality:** Bruk Shortcut Transformations med DQ-sjekker (eks. schema validation)
3. **Tilgangskontroll:** OneLake security RLS for å sikre at kun relevante data brukes i vedtak
**Eksempel:**
- NAV-case: Shortcut fra Dataverse (søknadsdata) → Lakehouse → AI-modell for søknadsklassifisering
- Audit trail: OneLake lineage viser at data kom fra Dataverse shortcut, ikke kopiert/transformert ukontrollert
---
### NSM Grunnprinsipper (Sikkerhet i Skyen)
**Prinsipp 2: Bruk skyløsningens sikkerhetsfunksjoner**
OneLake security RBAC er en **native Fabric-funksjon** som bør foretrekkes over custom access layers:
**Sammenligning:**
| Tilnærming | Fordeler | Ulemper |
|------------|----------|---------|
| **OneLake security (anbefalt)** | Unified security across all engines, RLS/CLS support, Entra ID integration | Preview (latency constraints, B2B guest user issues) |
| **Workspace roles only** | Enkel, GA-stable | Coarse-grained (Admin/Member/Contributor/Viewer), ingen row/column filtering |
| **Custom API gateway** | Full kontroll | Teknisk gjeld, ikke Fabric-native, brudd med unified namespace |
**NSM-anbefaling:** Bruk OneLake security (selv i preview) for granular access control, men dokumenter workarounds for known limitations (B2B guests, cross-region).
---
## Kostnad og lisensiering
### Licensing Requirements
| Komponent | Krever | Lisenstype |
|-----------|--------|------------|
| **OneLake storage** | Fabric Capacity (F/P SKU) | Billed per GB/month (HOT tier: ~$0.023/GB, COLD tier: TBD) |
| **Shortcuts (internal/external)** | Same capacity as Lakehouse item | No additional license |
| **Shortcut caching** | Workspace-level setting | Included in capacity |
| **OneLake security (preview)** | Fabric Write/Reshare permission (Admin/Member) | Included in capacity |
| **Shortcut Transformations** | Fabric Spark compute | Billed per CU-hour (part of capacity) |
**Viktig:** Shortcuts selv koster ikke ekstra, men:
- **Storage:** Kun data i OneLake (ikke shortcut targets) er billed
- **Egress:** External shortcuts (S3, GCS) kan trigger egress costs fra source provider → **enable caching** for cost optimization
- **Compute:** Spark/SQL queries over shortcuts bruker Fabric Capacity Units (CU)
---
### Cost Optimization Strategies
#### 1. Shortcut Caching (External Shortcuts)
**Scenario:** 10 data scientists kjører daglige queries mot AWS S3 shortcut (1 TB data).
**Without caching:**
- AWS S3 egress: 1 TB/day × 10 users × $0.09/GB = **$900/day** ($27k/month)
**With caching (28-day retention):**
- First read: 1 TB egress = $90
- Subsequent reads: cached in OneLake (HOT tier): 1 TB × $0.023/GB = $23.55/month
- **Total:** ~$113.55/month (96% cost reduction)
**Configuration:**
1. Workspace settings → OneLake tab → Enable cache → 28-day retention
2. Reset cache manually hvis source data oppdateres frequently
**Constraint:** Filer > 1 GB caches ikke.
---
#### 2. Delta vs. Parquet for Shortcuts
**Scenario:** Shortcut til ADLS Gen2 med 10 TB Parquet files.
**Issue:** Parquet ikke transactional → Spark må lese hele filsett for queries.
**Solution:** Convert to Delta in Silver layer (ikke via shortcut):
1. Bronze: Shortcut til ADLS Gen2 (Parquet)
2. Silver: Spark notebook transformerer til Delta (med Z-ordering for common filters)
3. Gold: Aggregated Delta tables
**Cost impact:**
- Delta log overhead: ~1% storage increase
- Query performance: 10-100× faster (predicate pushdown) → **lower CU usage**
**ROI:** Hvis 100 queries/day × 5 CU-hours → Delta reduserer til 0.5 CU-hours → ~90% CU cost reduction.
---
#### 3. OneLake Security vs. Compute-level Security
**Scenario:** 50 Power BI reports med RLS i semantic model (DirectLake over SQL).
**Problem:** Hver query executor validerer RLS i semantic model → **redundant processing**.
**Solution:** Migrere RLS til OneLake security (DirectLake over OneLake mode):
- RLS enforcement på OneLake-nivå (én gang)
- All engines (Power BI, Spark, SQL) gjenbruker samme RLS rules
- **Result:** 20-30% lavere CU usage for Power BI queries
**Constraint:** OneLake security RLS støtter kun simple predicates (ikke DAX expressions).
---
### Estimert Kostnad (Norsk Offentlig Sektor — Typical Setup)
**Scenario:** Regional direktorat med 200 brukere, 50 TB data.
| Komponent | Volum | Kostnad (NOK/måned) |
|-----------|-------|---------------------|
| **Fabric Capacity** | F64 SKU (64 CU) | ~73,000 |
| **OneLake Storage (HOT)** | 50 TB × $0.023/GB × 11.5 (USD→NOK) | ~13,225 |
| **External shortcuts** | 5 TB (S3 cache) | Egress: $450 → 5,175 NOK (first month), then ~1,150 NOK (cache) |
| **Shortcut Transformations** | 10 tables × 2h Spark/month | Included in F64 capacity |
| **OneLake security** | 100 roles | Included |
| **Total (first month)** | | ~91,400 NOK |
| **Total (steady state)** | | ~87,375 NOK |
**TCO over 3 år:** ~3.15M NOK (inkludert capacity, storage growth 10%/år, external shortcuts cached).
**Sammenligning med tradisjonell arkitektur (ADLS Gen2 + Synapse + ADF):**
- TCO over 3 år: ~4.2M NOK (separate storage accounts, ETL-pipelines, ingen unified security)
- **Besparelse:** ~25% (hovedsakelig fra eliminert ETL-kostnad og unified namespace)
**Anbefaling for utredning (§ 8: Økonomiske rammer):**
> "OneLake shortcuts reduserer TCO for data engineering med 20-30% sammenlignet med tradisjonelle ETL-pipelines, primært gjennom eliminering av staging-lag og redusert compute for datakopiering. Kostnadsdrivere er Fabric Capacity Units (CU) og storage (HOT tier). Anbefales å starte med F32/F64 SKU og skalere basert på faktisk forbruk."
---
## For arkitekten (Cosmo)
### Når skal du anbefale shortcuts?
**Use shortcuts when:**
1. **Client sier:** "Vi har data i AWS S3 og Azure Data Lake, og trenger unified analytics."
- **Response:** Internal/external shortcuts → unified OneLake namespace → Azure AI Search over both sources.
2. **Client sier:** "Vi trenger å dele curated data mellom avdelinger uten å kopiere."
- **Response:** Internal shortcuts med OneLake security → zero-copy sharing, granular RBAC.
3. **Client sier:** "Vi har high egress costs fra AWS S3."
- **Response:** External shortcut med caching (28 days) → 90%+ cost reduction.
4. **Client sier:** "Vi vil bygge RAG over multi-cloud data."
- **Response:** Shortcuts til alle sources → Azure AI Search indexes OneLake → Copilot Studio Generative Answers.
**Avoid shortcuts when:**
1. **Client sier:** "Vi trenger kompleks transformasjonslogikk (joins, aggregations)."
- **Response:** Bruk shortcuts i Bronze, men transformer i Silver/Gold med Data Factory/Spark.
2. **Client sier:** "Latency kritisk (< 500ms query response)."
- **Response:** Copy data til OneLake (ikke shortcut), enable Delta caching.
3. **Client sier:** "Compliance krever data in-region (Norge), og source er i US."
- **Response:** Ikke bruk shortcuts — copy data til Norge-basert ADLS Gen2, deretter OneLake Lakehouse.
---
### Decision Tree for Shortcut Strategy
```
START: "Trenger vi unified data access?"
├─ YES → "Er source allerede i optimal format (Delta/Parquet)?"
│ ├─ YES → "Er source read-only (partner/external)?"
│ │ ├─ YES → ✅ External shortcut med caching
│ │ └─ NO → ✅ Internal shortcut (hvis same tenant)
│ └─ NO → "Trenger vi transformasjonslogikk?"
│ ├─ SIMPLE (format conversion) → ✅ Shortcut Transformations
│ └─ COMPLEX (business logic) → ❌ ETL → Silver/Gold Delta
└─ NO → "Trenger vi data isolasjon (compliance)?"
├─ YES → ❌ Copy data til separate Lakehouse
└─ NO → ✅ Internal shortcut (hvis multi-workspace sharing)
```
---
### Common Pitfalls og Mitigations
| Pitfall | Symptom | Mitigation |
|---------|---------|------------|
| **Shortcut til non-Delta files i Tables/ folder** | Lakehouse doesn't recognize as table | Use Files/ folder or convert to Delta first |
| **Space characters i shortcut name (Delta target)** | Table discovery fails | Rename shortcut without spaces |
| **DirectLake over SQL med internal shortcuts** | RLS ikke enforced (owner's identity used) | Switch to DirectLake over OneLake mode |
| **Cross-region shortcuts med OneLake security** | 404 errors | Copy data in-region or use workspace-level access (ikke OneLake security) |
| **B2B guest users i OneLake security roles** | Access denied (distribution list ikke resolved) | Configure Entra External ID: "Guest users same access as members" |
| **Shortcut caching ikke enabled** | High S3 egress costs | Workspace settings → OneLake → Enable cache (28 days) |
| **Shortcut til files > 1 GB med caching** | Caching doesn't work | Split files into < 1 GB chunks or disable caching (rely on source SLA) |
---
### Shortcut Design Patterns (Cosmo's Checklist)
#### Pattern 1: Federated Data Mesh
**Scenario:** 5 domains (HR, Finance, Marketing, Sales, Operations) — hver har egen Lakehouse.
**Architecture:**
```
Domain Lakehouses (per team)
├── HR_Lakehouse
│ └── Tables/Employees.delta
├── Finance_Lakehouse
│ └── Tables/Transactions.delta
└── Marketing_Lakehouse
└── Tables/Campaigns.delta
Central Analytics Lakehouse
├── Files/
│ ├── HR_Shortcut → HR_Lakehouse/Tables/Employees
│ ├── Finance_Shortcut → Finance_Lakehouse/Tables/Transactions
│ └── Marketing_Shortcut → Marketing_Lakehouse/Tables/Campaigns
└── Tables/
└── UnifiedCustomerView.delta (joins via Spark)
```
**Governance:**
- Domain teams kontrollerer OneLake security på egne Lakehouses
- Central team har Read-only shortcuts
- Lineage tracked via workspace lineage view
---
#### Pattern 2: Multi-Cloud Data Lake
**Scenario:** Legacy data i AWS S3, new data i Azure Data Lake, reports i SharePoint.
**Architecture:**
```
Unified_Lakehouse
├── Files/
│ ├── AWS_S3_Shortcut/ (external, cached 28 days)
│ ├── Azure_ADLS_Shortcut/ (external, delegated)
│ └── SharePoint_Shortcut/ (external, OneDrive connector)
└── Tables/
└── ConsolidatedView.delta (Shortcut Transformation from S3 CSVs)
```
**Cost optimization:**
- S3 caching → 95% egress reduction
- ADLS in same region (West Europe) → no egress
- SharePoint: low volume (<10 GB) → minimal cost
---
#### Pattern 3: RAG-Optimized Data Lake
**Scenario:** Copilot Studio Generative Answers over product manuals (PDF), support tickets (SQL), chat transcripts (Dataverse).
**Architecture:**
```
RAG_Lakehouse
├── Files/
│ ├── Manuals_S3_Shortcut/ (PDFs, external)
│ ├── Tickets_SQL_Shortcut/ (internal, Warehouse)
│ └── Chats_Dataverse_Shortcut/ (external, delegated)
└── Tables/
├── ChunkedDocuments.delta (Spark: chunk PDFs → 512 tokens)
├── Embeddings.delta (Azure OpenAI text-embedding-3-large)
└── Metadata.delta (source tracking for citation)
```
**Azure AI Search:**
- OneLake shortcut til Embeddings.delta
- Indexed OneLake Knowledge Source
- Copilot Studio → Generative Answers → AI Search
**Benefits:**
- Single source of truth (no data duplication)
- OneLake security → AI Search access control
- Automatic refresh (OneLake changes → AI Search re-indexes)
---
## Kilder og verifisering
### Microsoft Learn (offisiell dokumentasjon)
1. **OneLake shortcuts** — https://learn.microsoft.com/en-us/fabric/onelake/onelake-shortcuts (fetched 2026-02-11)
2. **OneLake security access control model** — https://learn.microsoft.com/en-us/fabric/onelake/security/data-access-control-model (fetched 2026-02-11)
3. **OneLake shortcut security** — https://learn.microsoft.com/en-us/fabric/onelake/onelake-shortcut-security
4. **Shortcut Transformations (File)** — https://learn.microsoft.com/en-us/fabric/onelake/shortcuts/transformations
5. **Get started with OneLake security (preview)** — https://learn.microsoft.com/en-us/fabric/onelake/security/get-started-onelake-security
6. **OneLake access with APIs** — https://learn.microsoft.com/en-us/fabric/onelake/onelake-access-api
7. **Azure AI Search: OneLake knowledge source** — https://learn.microsoft.com/en-us/azure/search/agentic-knowledge-source-how-to-onelake
8. **Azure Machine Learning: OneLake Datastore** — https://learn.microsoft.com/en-us/azure/machine-learning/how-to-datastore?view=azureml-api-2#create-a-onelake-datastore
9. **Integrate Direct Lake security** — https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-security-integration
10. **Medallion lakehouse architecture** — https://learn.microsoft.com/en-us/fabric/onelake/onelake-medallion-lakehouse-architecture
11. **Query acceleration for OneLake shortcuts** — https://learn.microsoft.com/en-us/fabric/real-time-intelligence/query-acceleration-overview
### Code Samples (verified)
- **Python:** OneLakeDatastore creation (azure-ai-ml SDK)
- **TypeScript:** OneLakeShortcutClient usage (Fabric extensibility toolkit)
- **Python:** DuckDB Iceberg REST catalog over OneLake
- **KQL:** external_table function for shortcut queries
### Confidence Markers
- **Storage tier pricing ($0.023/GB HOT):** High confidence (based on Azure Storage pricing, OneLake parity)
- **Shortcut limits (100k per item):** High confidence (Microsoft Learn documentation)
- **OneLake security latency (5 min role changes, 1 hour group membership):** High confidence (official docs)
- **Cross-region shortcuts not supported:** Medium confidence (preview limitation, may change in GA)
- **Caching cost reduction (90%+):** High confidence (based on S3 egress pricing calculator)
### Sist verifisert
- 2026-02-11 (11 Microsoft Learn-kilder, 15 code samples)
- Neste review anbefales: 2026-05 (etter Build 2026 for OneLake security GA announcements)