This page requires JavaScript to display.
A
Unpacking...
← Cloud Platforms
Cloud Platforms

Azure Reference

Azure for data engineers: identity and RBAC, ADLS Gen2, Data Factory, Azure Databricks, Synapse, Fabric, Event Hubs and Stream Analytics, Cosmos DB, Key Vault and Purview, monitoring, Bicep and CI/CD, with a reference architecture and AWS/GCP mapping.

Contents
1. Azure Fundamentals 2. Identity & Access (Entra ID, RBAC, Managed Identities) 3. Storage: ADLS Gen2 & Blob Storage 4. Azure Data Factory 5. Azure Databricks 6. Azure Synapse Analytics 7. Microsoft Fabric 8. Streaming: Event Hubs, Stream Analytics & Event Grid 9. Databases: Azure SQL & Cosmos DB 10. Security & Governance: Key Vault, Networking, Purview 11. Monitoring & Cost 12. Infrastructure as Code & CI/CD 13. Reference Architecture: Azure Lakehouse 14. AWS ↔ Azure ↔ GCP Service Map 15. Common Interview Questions

1. Azure Fundamentals

Everything in Azure lives in a hierarchy. Policies and access granted at a level are inherited by everything below it:

 Microsoft Entra ID tenant (identities: users, groups, apps)
   └── Management groups      (e.g. "Bank" → "Prod", "NonProd"; Azure Policy applied here)
         └── Subscriptions    (billing + quota boundary: sub-data-prod, sub-data-dev)
               └── Resource groups   (lifecycle unit: rg-lakehouse-prod)
                     └── Resources   (storage accounts, Data Factory, Databricks workspace …)
ConceptMeaning
RegionA set of datacenters, e.g. Central India (Pune), South India (Chennai), West Europe
Availability zonePhysically separate datacenters within a region; zone-redundant services survive a datacenter outage
Region pairTwo regions in the same geography used for geo-replication and DR (e.g. Central India ↔ South India)
Resource groupLogical container whose resources share a lifecycle: deploy, tag, secure and delete together
Azure PolicyGuardrails such as "only Indian regions", "storage must deny public access", "require tags"
az login                                         # browser / device-code sign-in
az account list -o table
az account set --subscription "sub-data-dev"
az group create --name rg-lakehouse-dev --location centralindia \
  --tags env=dev owner=data-platform costcentre=fraud
az resource list -g rg-lakehouse-dev -o table

2. Identity & Access (Entra ID, RBAC, Managed Identities)

IdentityUse
User / groupPeople; assign roles to groups, never to individuals
Service principalAn app registration's identity for CI/CD or external tools; has a secret or certificate to rotate
Managed identityAn identity Azure manages for a resource (Data Factory, Databricks access connector, VM, Function). No secrets to store; preferred wherever supported

Azure RBAC = who (security principal) + what (role definition) + where (scope: management group, subscription, resource group or resource).

RolePlaneGrants
Owner / Contributor / ReaderControl planeManage resources (create, configure, delete), not read the data in them
Storage Blob Data Owner / Contributor / ReaderData planeRead and write blobs and files in storage using Entra ID
Key Vault Secrets UserData planeRead secret values
Data Factory ContributorControl planeCreate and manage factories and pipelines
# let Data Factory's managed identity write to the lake (data-plane role, scoped to one account)
ADF_MI=$(az datafactory show -g rg-lakehouse-dev -n adf-acme-dev --query identity.principalId -o tsv)
LAKE_ID=$(az storage account show -g rg-lakehouse-dev -n stacmelakedev --query id -o tsv)

az role assignment create --assignee-object-id "$ADF_MI" --assignee-principal-type ServicePrincipal \
  --role "Storage Blob Data Contributor" --scope "$LAKE_ID"

Classic trap: a user with Contributor on a storage account still gets "authorization permission mismatch" reading blobs with Entra ID auth, because Contributor is a control-plane role. Data access needs a Storage Blob Data role (or ACLs on ADLS Gen2).

3. Storage: ADLS Gen2 & Blob Storage

Azure Data Lake Storage Gen2 is a Blob Storage account with the hierarchical namespace enabled: real directories, atomic directory renames, and POSIX-style ACLs, which is what Spark and Hadoop need. It is the standard lake storage on Azure.

az storage account create -n stacmelakedev -g rg-lakehouse-dev -l centralindia \
  --sku Standard_ZRS --kind StorageV2 --hns true \
  --min-tls-version TLS1_2 --allow-blob-public-access false

for c in raw bronze silver gold; do
  az storage fs create -n $c --account-name stacmelakedev --auth-mode login
done

az storage fs directory create -f raw -n landing/transactions --account-name stacmelakedev --auth-mode login
az storage fs file upload -f raw -s ./txn_2026-10-26.json \
  -p landing/transactions/txn_2026-10-26.json --account-name stacmelakedev --auth-mode login

Paths use the abfss:// scheme: abfss://<container>@<account>.dfs.core.windows.net/<path>.

RedundancyCopiesSurvives
LRS3 copies in one datacenterDisk/server failure
ZRS3 copies across availability zonesDatacenter (zone) outage
GRS / RA-GRSLRS + async copy to the paired region (RA = readable secondary)Regional outage
GZRS / RA-GZRSZRS + async copy to the paired regionZone and regional outages
Access tierMinimum retentionUse
Hot—Frequently read data
Cool30 daysInfrequently read, still online
Cold90 daysRarely read, online
Archive180 daysOffline; must be rehydrated (hours) before reading
{
  "rules": [{
    "enabled": true, "name": "raw-tiering", "type": "Lifecycle",
    "definition": {
      "filters": { "blobTypes": ["blockBlob"], "prefixMatch": ["raw/landing/"] },
      "actions": { "baseBlob": {
        "tierToCool":    { "daysAfterModificationGreaterThan": 30 },
        "tierToArchive": { "daysAfterModificationGreaterThan": 180 },
        "delete":        { "daysAfterModificationGreaterThan": 2555 } } }
    }
  }]
}

Apply with az storage account management-policy create --account-name stacmelakedev -g rg-lakehouse-dev --policy @policy.json. Combine with soft delete, versioning and immutability (WORM) policies for records that must be retained.

Reading ADLS from Spark

# Open-source Spark / Synapse with a service principal (OAuth). On Databricks prefer Unity Catalog.
acct = "stacmelakedev.dfs.core.windows.net"
spark.conf.set(f"fs.azure.account.auth.type.{acct}", "OAuth")
spark.conf.set(f"fs.azure.account.oauth.provider.type.{acct}",
               "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set(f"fs.azure.account.oauth2.client.id.{acct}", client_id)
spark.conf.set(f"fs.azure.account.oauth2.client.secret.{acct}", client_secret)   # from Key Vault
spark.conf.set(f"fs.azure.account.oauth2.client.endpoint.{acct}",
               f"https://login.microsoftonline.com/{tenant_id}/oauth2/token")

df = spark.read.json("abfss://raw@stacmelakedev.dfs.core.windows.net/landing/transactions/")
df.write.format("delta").mode("append").save("abfss://bronze@stacmelakedev.dfs.core.windows.net/transactions")

4. Azure Data Factory

Azure Data Factory (ADF) is Azure's managed orchestration and data-movement service: 90+ connectors, visual pipelines, and scheduling. It moves and orchestrates; heavy transformation is usually delegated to Databricks, Synapse or SQL.

Building blockWhat it is
PipelineA workflow of activities with dependencies, parameters and variables
ActivityOne step: Copy, Data Flow, Lookup, ForEach, If Condition, Until, Wait, Web, Stored Procedure, Databricks Notebook / Python / Job, Execute Pipeline
Linked serviceConnection information (like a connection string), ideally with managed identity and Key Vault secrets
DatasetA named view of data within a linked service (a table, a folder, a file pattern), parameterisable
Integration runtimeAzure IR (cloud compute), Self-hosted IR (installed on-prem to reach private networks/databases), Azure-SSIS IR (run SSIS packages)
TriggerSchedule, Tumbling window (fixed windows, backfill, dependencies, retries), Storage event (blob created/deleted), Custom event (Event Grid)

Expressions

@pipeline().parameters.runDate                         -- a pipeline parameter
@pipeline().RunId                                      -- unique id of this run
@trigger().outputs.windowStartTime                     -- tumbling-window start
@activity('LookupWatermark').output.firstRow.last_wm   -- output of an earlier activity
@formatDateTime(utcNow(), 'yyyy/MM/dd')                -- date folders
@concat('landing/orders/', formatDateTime(pipeline().parameters.runDate, 'yyyy-MM-dd'))
"SELECT * FROM dbo.orders WHERE updated_at > '@{activity('LookupWatermark').output.firstRow.last_wm}'"
                                                       -- @{ } interpolates inside a string

Incremental copy with a watermark

 LookupOldWatermark ──► LookupNewWatermark ──► CopyChangedRows ──► UpdateWatermark
 (SELECT last_wm FROM    (SELECT MAX(updated_at)   (source query between       (stored procedure writes
  etl.watermarks)         AS new_wm FROM orders)    old and new watermark)      new_wm back)
{
  "name": "CopyChangedRows",
  "type": "Copy",
  "dependsOn": [
    { "activity": "LookupOldWatermark", "dependencyConditions": ["Succeeded"] },
    { "activity": "LookupNewWatermark", "dependencyConditions": ["Succeeded"] }
  ],
  "typeProperties": {
    "source": {
      "type": "AzureSqlSource",
      "sqlReaderQuery": {
        "value": "SELECT * FROM dbo.orders WHERE updated_at > '@{activity('LookupOldWatermark').output.firstRow.last_wm}' AND updated_at <= '@{activity('LookupNewWatermark').output.firstRow.new_wm}'",
        "type": "Expression"
      }
    },
    "sink": { "type": "ParquetSink" }
  },
  "inputs":  [ { "referenceName": "ds_sql_orders", "type": "DatasetReference" } ],
  "outputs": [ { "referenceName": "ds_adls_orders_parquet", "type": "DatasetReference",
                 "parameters": { "folder": "@formatDateTime(pipeline().parameters.runDate, 'yyyy/MM/dd')" } } ]
}

5. Azure Databricks

Azure Databricks is Databricks as a first-party Azure service, billed through Azure and integrated with Entra ID, ADLS, Key Vault and VNets. Everything in the Spark & Databricks reference applies; this is the Azure-specific wiring.

 Unity Catalog metastore (one per region)
   └── Storage credential  ──uses──►  Access Connector for Azure Databricks (managed identity)
                                         └─ granted "Storage Blob Data Contributor" on the ADLS account
   └── External location   abfss://raw@stacmelakedev.dfs.core.windows.net/landing
   └── Catalogs → schemas → tables / volumes (managed storage on ADLS)
-- after creating the storage credential from the access connector (UI or API)
CREATE EXTERNAL LOCATION IF NOT EXISTS raw_landing
  URL 'abfss://raw@stacmelakedev.dfs.core.windows.net/landing'
  WITH (STORAGE CREDENTIAL acme_lake_mi);

GRANT READ FILES ON EXTERNAL LOCATION raw_landing TO `data-engineers`;

CREATE CATALOG IF NOT EXISTS fraud_dev
  MANAGED LOCATION 'abfss://managed@stacmelakedev.dfs.core.windows.net/fraud_dev';
# secrets from an Azure Key Vault-backed secret scope (values are redacted in notebook output)
sql_password = dbutils.secrets.get(scope="kv-acme-dev", key="sql-etl-password")

# Auto Loader straight from ADLS (governed by the external location)
(spark.readStream.format("cloudFiles")
    .option("cloudFiles.format", "json")
    .option("cloudFiles.schemaLocation", "/Volumes/fraud_dev/bronze/chk/txn_schema")
    .load("abfss://raw@stacmelakedev.dfs.core.windows.net/landing/transactions/")
    .writeStream.option("checkpointLocation", "/Volumes/fraud_dev/bronze/chk/txn")
    .trigger(availableNow=True)
    .toTable("fraud_dev.bronze.transactions"))

Mount points (dbutils.fs.mount) and account keys in notebooks are legacy patterns. Use Unity Catalog external locations and managed identities instead. For private networking, deploy the workspace into your own VNet (VNet injection) with Private Link and secure cluster connectivity (no public IPs).

6. Azure Synapse Analytics

Synapse combines an MPP data warehouse, serverless SQL over the lake, Spark pools and ADF-style pipelines in one workspace. Microsoft now positions Fabric as the successor for new analytics projects, but Synapse remains widely used in existing estates and interviews.

ComponentWhat it isBilling
Dedicated SQL poolMPP warehouse (formerly SQL DW): data spread over 60 distributions, columnstore storageProvisioned DWUs; pause when idle
Serverless SQL poolT-SQL directly over files in ADLS (Parquet, CSV, Delta) with no loadingPer TB of data processed
Apache Spark poolManaged Spark clusters with notebooksPer node-hour, auto-pause
PipelinesThe ADF engine inside SynapsePer activity run
-- Dedicated pool: choose a distribution per table
CREATE TABLE dbo.fact_sales (
  sale_id BIGINT, customer_id INT, date_id INT, amount DECIMAL(18,2))
WITH (DISTRIBUTION = HASH(customer_id), CLUSTERED COLUMNSTORE INDEX);

CREATE TABLE dbo.dim_date (date_id INT, full_date DATE, month_name VARCHAR(12))
WITH (DISTRIBUTION = REPLICATE);          -- small dimension copied to every compute node

-- fastest load path: COPY INTO from the lake using the workspace managed identity
COPY INTO dbo.fact_sales
FROM 'https://stacmelakedev.blob.core.windows.net/gold/fact_sales/*.parquet'
WITH (FILE_TYPE = 'PARQUET', CREDENTIAL = (IDENTITY = 'Managed Identity'));
-- Serverless pool: query the lake in place, pay per TB scanned
SELECT channel, COUNT(*) AS txns, SUM(amount) AS total
FROM OPENROWSET(
       BULK 'https://stacmelakedev.dfs.core.windows.net/silver/transactions/',
       FORMAT = 'DELTA') AS t
WHERE event_date = '2026-10-25'
GROUP BY channel;
DistributionUseWatch out for
HASH(col)Large fact tables; pick a high-cardinality join column with even spreadSkew if the column has hot values or many NULLs
ROUND_ROBINStaging tables and fast loadsJoins need data movement
REPLICATESmall dimensions (under ~2 GB)Rebuilt after changes; not for large or volatile tables

7. Microsoft Fabric

Microsoft Fabric is a SaaS analytics platform that unifies data engineering, warehousing, real-time analytics and Power BI on one copy of data in OneLake.

OneLake
One logical lake per tenant, built on ADLS Gen2; all tables are stored as Delta Parquet.
Lakehouse
Files + Delta tables with Spark notebooks and an automatic SQL analytics endpoint.
Warehouse
Full T-SQL warehouse (DML, transactions) storing data as Delta in OneLake.
Data Factory in Fabric
Pipelines plus Dataflow Gen2 (Power Query) for ingestion and transformation.
Real-Time Intelligence
Eventstreams and Eventhouses (KQL databases) for streaming and log analytics.
Power BI Direct Lake
Reports read Delta tables in OneLake directly, without import or DirectQuery.
Shortcuts
Reference data in ADLS Gen2, S3, GCS or other workspaces without copying it.
Mirroring
Continuously replicate Azure SQL, Cosmos DB, Snowflake and others into OneLake.

Fabric is bought as capacity (F SKUs) shared by all workloads in assigned workspaces. Typical choice today: Azure Databricks for complex engineering and ML, Fabric for Microsoft/Power BI-centric analytics. Many organisations combine them, since both speak Delta.

8. Streaming: Event Hubs, Stream Analytics & Event Grid

ServiceRoleAWS analogue
Event HubsHigh-throughput event ingestion with partitions, consumer groups and retention; Kafka-compatible endpoint (Standard tier and above)Kinesis Data Streams / MSK
Event Hubs CaptureAutomatically writes the stream to ADLS/Blob (Avro) on a time or size windowFirehose to S3
Stream AnalyticsManaged streaming SQL with windows; inputs Event Hubs/IoT Hub, outputs ADLS, SQL, Power BI, Cosmos DBManaged Service for Apache Flink (SQL)
Event GridPush-based routing of discrete events (e.g. "blob created") to Functions, ADF, queuesEventBridge
Service BusEnterprise messaging: queues and topics with ordering, sessions and dead-letteringSQS / SNS
# pip install azure-eventhub azure-identity
import json
from azure.eventhub import EventHubProducerClient, EventData
from azure.identity import DefaultAzureCredential

producer = EventHubProducerClient(
    fully_qualified_namespace="evh-acme-dev.servicebus.windows.net",
    eventhub_name="txn-events",
    credential=DefaultAzureCredential())          # managed identity / az login, no keys

with producer:
    batch = producer.create_batch(partition_key="ACC000001")   # same key → same partition → ordered
    batch.add(EventData(json.dumps({"txn_id": "T1", "account_id": "ACC000001", "amount": 2500})))
    producer.send_batch(batch)
# Spark reading Event Hubs through its Kafka endpoint
EH_NS = "evh-acme-dev.servicebus.windows.net"
conn = dbutils.secrets.get("kv-acme-dev", "evh-listen-connection-string")
jaas = ('kafkashaded.org.apache.kafka.common.security.plain.PlainLoginModule required '   # Databricks
        f'username="$ConnectionString" password="{conn}";')                              # (drop "kafkashaded." elsewhere)

stream = (spark.readStream.format("kafka")
    .option("kafka.bootstrap.servers", f"{EH_NS}:9093")
    .option("subscribe", "txn-events")                   # Event Hub name = Kafka topic
    .option("kafka.security.protocol", "SASL_SSL")
    .option("kafka.sasl.mechanism", "PLAIN")
    .option("kafka.sasl.jaas.config", jaas)
    .option("startingOffsets", "latest")
    .load())
-- Stream Analytics: per-minute totals by channel, using event time
SELECT
    System.Timestamp() AS window_end,
    channel,
    COUNT(*)           AS txns,
    SUM(amount)        AS total_amount
INTO [adls-gold-output]
FROM [evh-txn-input] TIMESTAMP BY event_time
GROUP BY channel, TumblingWindow(minute, 1)

9. Databases: Azure SQL & Cosmos DB

ServiceUseNotes
Azure SQL DatabaseManaged SQL Server for OLTP and app databasesvCore or DTU purchasing; serverless tier auto-pauses; Hyperscale for very large databases
Azure SQL Managed InstanceNear-100% SQL Server compatibility for lift-and-shiftSQL Agent, cross-database queries, VNet-native
Azure Database for PostgreSQL / MySQLManaged open-source databases (Flexible Server)Common CDC sources for the lake
Cosmos DBGlobally distributed NoSQL with single-digit-ms readsAPIs: NoSQL, MongoDB, Cassandra, Gremlin, Table, PostgreSQL

Cosmos DB essentials

10. Security & Governance: Key Vault, Networking, Purview

az keyvault create -n kv-acme-dev -g rg-lakehouse-dev -l centralindia --enable-rbac-authorization true
az keyvault secret set --vault-name kv-acme-dev -n sql-etl-password --value "<from a secure source>"
az role assignment create --assignee-object-id "$ADF_MI" --assignee-principal-type ServicePrincipal \
  --role "Key Vault Secrets User" \
  --scope "$(az keyvault show -n kv-acme-dev --query id -o tsv)"

11. Monitoring & Cost

Send diagnostic settings from ADF, Databricks, Synapse, storage and Event Hubs to a Log Analytics workspace, then query and alert with KQL:

// failed ADF activities in the last 24 hours, by pipeline
ADFActivityRun
| where TimeGenerated > ago(24h) and Status == "Failed"
| summarize failures = count(), last_error = any(ErrorMessage) by PipelineName, ActivityName
| order by failures desc

// pipeline duration trend
ADFPipelineRun
| where Status == "Succeeded"
| extend minutes = datetime_diff('minute', End, Start)
| summarize avg(minutes), max(minutes) by PipelineName, bin(TimeGenerated, 1d)

12. Infrastructure as Code & CI/CD

// lake.bicep: ADLS Gen2 account with secure defaults
param location string = resourceGroup().location
param env string

resource lake 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: 'stacmelake${env}'
  location: location
  sku: { name: 'Standard_ZRS' }
  kind: 'StorageV2'
  properties: {
    isHnsEnabled: true                // ADLS Gen2
    minimumTlsVersion: 'TLS1_2'
    allowBlobPublicAccess: false
    supportsHttpsTrafficOnly: true
  }
  tags: { env: env, owner: 'data-platform' }
}

output lakeId string = lake.id
az deployment group what-if -g rg-lakehouse-dev -f lake.bicep -p env=dev    # preview changes
az deployment group create  -g rg-lakehouse-dev -f lake.bicep -p env=dev
# azure-pipelines.yml: test, then deploy infrastructure
trigger:
  branches: { include: [main] }

pool: { vmImage: ubuntu-latest }

stages:
  - stage: Test
    jobs:
      - job: unit
        steps:
          - task: UsePythonVersion@0
            inputs: { versionSpec: '3.11' }
          - script: pip install -r requirements-dev.txt && pytest -q
  - stage: DeployDev
    dependsOn: Test
    jobs:
      - deployment: infra
        environment: dev                 # approvals and checks are configured on environments
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
                - task: AzureCLI@2
                  inputs:
                    azureSubscription: sc-data-dev      # service connection (workload identity federation)
                    scriptType: bash
                    scriptLocation: inlineScript
                    inlineScript: az deployment group create -g rg-lakehouse-dev -f infra/lake.bicep -p env=dev

Terraform (azurerm and databricks providers) is equally common, especially in multi-cloud teams. Either way, keep infrastructure in Git, preview with what-if / plan in pull requests, and deploy through pipelines using service connections with federated credentials rather than stored secrets.

13. Reference Architecture: Azure Lakehouse

 SOURCES                 INGEST                    LAKE (ADLS Gen2, Delta)              SERVE
 Core banking (SQL) ──►  ADF (self-hosted IR,  ──► raw ─► bronze ─► silver ─► gold ──► Synapse serverless / SQL warehouse
 SaaS / APIs        ──►  incremental copy)          (Azure Databricks: Auto Loader,       Power BI (Direct Lake / Fabric)
 Files (SFTP)       ──►                              MERGE, SCD2, DQ checks)              Cosmos DB (low-latency lookups)
 Apps / devices     ──►  Event Hubs ─► Databricks Structured Streaming / Stream Analytics ──► alerts, real-time dashboards

 CROSS-CUTTING: Entra ID + managed identities · Key Vault · Unity Catalog + Purview · Private endpoints + VNet injection
                Azure Monitor / Log Analytics · Cost Management · Bicep/Terraform + Azure DevOps or GitHub Actions

14. AWS ↔ Azure ↔ GCP Service Map

CapabilityAWSAzureGCP
Object storage / lakeS3Blob Storage / ADLS Gen2Cloud Storage
Orchestration / data movementGlue workflows, Step Functions, MWAAData Factory (and Fabric Data Factory)Cloud Composer, Workflows
Managed SparkEMR, GlueAzure Databricks, Synapse Spark, Fabric SparkDataproc
Data warehouseRedshiftSynapse dedicated SQL, Fabric WarehouseBigQuery
Serverless SQL on the lakeAthenaSynapse serverless SQL, Fabric SQL endpointBigQuery external tables
Event streamingKinesis, MSKEvent HubsPub/Sub
Stream processingManaged Service for Apache FlinkStream Analytics, Databricks streamingDataflow
NoSQLDynamoDBCosmos DBFirestore, Bigtable
Relational OLTPRDS, AuroraAzure SQL, PostgreSQL/MySQL Flexible ServerCloud SQL, AlloyDB
Catalog / governanceGlue Data Catalog, Lake FormationPurview, Unity CatalogDataplex
Identity for workloadsIAM rolesEntra ID + managed identities + RBACService accounts + IAM
SecretsSecrets ManagerKey VaultSecret Manager
Serverless functionsLambdaAzure FunctionsCloud Run functions
Event routingEventBridgeEvent GridEventarc
MonitoringCloudWatchAzure Monitor, Log AnalyticsCloud Monitoring, Logging
Infrastructure as codeCloudFormation, CDKARM templates, BicepInfrastructure Manager

15. Common Interview Questions

QuestionShort answer
ADLS Gen2 vs Blob Storage?ADLS Gen2 is Blob Storage with the hierarchical namespace enabled: real directories, atomic renames and POSIX ACLs, which suit Spark and Hadoop workloads
Managed identity vs service principal?Both are Entra ID identities for workloads; a managed identity is tied to an Azure resource and has no secret to store or rotate, so prefer it whenever the service supports it
A user is Contributor on the storage account but cannot read files. Why?Contributor is a control-plane role; reading data with Entra ID needs a data-plane role such as Storage Blob Data Reader, or ACLs on ADLS Gen2
Self-hosted vs Azure integration runtime?Azure IR runs in Azure and reaches public or private-endpoint sources; a self-hosted IR is installed inside your network to reach on-prem or VNet-isolated sources
Schedule vs tumbling window trigger?Schedule fires at times; tumbling window covers fixed, non-overlapping intervals with state, so it supports backfill, retries per window and dependencies between windows
How do you load only new rows with ADF?Watermark pattern (Lookup old and new watermark, Copy with a range query, update the watermark), CDC from the source, or file-based triggers for new files
How do you promote ADF pipelines to prod?Git integration in dev, publish generates ARM templates, a release pipeline deploys them to test and prod with environment parameters; no manual edits outside dev
Synapse dedicated vs serverless SQL?Dedicated is a provisioned MPP warehouse with loaded data and predictable performance; serverless queries files in the lake on demand and bills per TB processed
How do you choose a Cosmos DB partition key?High cardinality, even distribution of reads and writes, and used in most query filters, so queries hit a single partition and no logical partition exceeds 20 GB
How does Spark read Event Hubs?Through the Kafka-compatible endpoint on port 9093 with SASL_SSL and the connection string as the password (or the Event Hubs Spark connector)
Where does Fabric fit vs Databricks?Fabric is a SaaS, Power BI-centric platform on OneLake; Databricks is a deeper engineering and ML platform. Both store Delta, so they interoperate via shortcuts and mirroring