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.
773 lines
34 KiB
Markdown
773 lines
34 KiB
Markdown
# 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)
|