advanced⏱60 minLesson 2 of 12

Core Architecture Deep Dive

Dive deep into the architectural differences between AWS's service mesh, Snowflake's three-layer model, and Databricks' Lakehouse to see how each implements storage and compute separation.

Core Architecture Deep Dive

Bottom Line: All three platforms embrace storage/compute separation, but the implementation of that separation β€” and what sits in between β€” defines their entire character. Snowflake's Cloud Services layer, Databricks' Delta Lake + Photon stack, and AWS's disaggregated service mesh are fundamentally different solutions to the same distributed systems problems.


2.1 The Universal Starting Point: Storage/Compute Separation

Before cloud data warehouses, compute and storage were co-located on the same physical servers (think: traditional MPP appliances like Teradata or Netezza). Cloud-native platforms broke this coupling. The principle:

Traditional MPP (On-Prem): Cloud-Native (All Three): β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Node 1: CPU + Local SSD β”‚ β”‚ Compute Layer β”‚ β”‚ Node 2: CPU + Local SSD β”‚ β”‚ (Scales independently) β”‚ β”‚ Node 3: CPU + Local SSD β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ High-speed network Storage CANNOT scale without compute. β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Storage Layer β”‚ β”‚ (S3 / GCS / ADLS Gen2) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Storage scales independently.

The critical difference between the three platforms is what happens in between.


2.2 AWS Architecture: The Service Mesh Model

AWS provides storage (S3) and then offers a menu of compute engines that query it. There is no single "AWS data platform architecture" β€” you compose one.

The Typical AWS Data Lake Architecture

100%

AWS Key Architectural Entities

ComponentRoleScaling Model
Amazon S3Universal storage layerInfinite, automatic
AWS Glue CatalogMetadata and schema registryManaged, serverless
AWS Glue ETLServerless Spark ETL jobsJob-level auto-scaling
Amazon EMRLong-running Spark/Hive clustersCluster auto-scaling (EC2/EKS)
Amazon RedshiftMPP SQL data warehouseProvisioned nodes OR serverless RPUs
Amazon AthenaServerless ad-hoc SQL on S3Pay-per-query, fully automatic
AWS Lake FormationGovernance layerTag-based, across services

⚠️ Gotcha: The Glue Catalog, Redshift, and EMR all have slightly different security models and may require explicit Lake Formation grants to interoperate. Integration is not automatic.


2.3 Snowflake Architecture: The Three-Layer Model

Snowflake's architecture is its most distinctive feature and the source of almost all of its advantages in simplicity and concurrency.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CLOUD SERVICES LAYER β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Query β”‚ β”‚ Transaction β”‚ β”‚ Security & β”‚ β”‚ β”‚ β”‚ Optimizer β”‚ β”‚ Manager β”‚ β”‚ Authentication β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Metadata β”‚ β”‚ Result β”‚ β”‚ Infrastructure β”‚ β”‚ β”‚ β”‚ Manager β”‚ β”‚ Cache β”‚ β”‚ Manager β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ (Always on, shared, no user cost) β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ COMPUTE LAYER (Virtual Warehouses) β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ VW: ANALYTICS β”‚ β”‚ VW: LOADING β”‚ ← Independent β”‚ β”‚ β”‚ (XL, Auto-susp) β”‚ β”‚ (M, always-on) β”‚ scaling per β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ workload β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ VW: ML_FEATURE β”‚ β”‚ VW: FINANCE β”‚ β”‚ β”‚ β”‚ (Snowpark) β”‚ β”‚ (Multi-cluster) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ (All VWs read from the same storage) β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ STORAGE LAYER β”‚ β”‚ β”‚ β”‚ Internally managed columnar format (FDN) β”‚ β”‚ Hosted on S3 / GCS / Azure Blob (customer-transparent) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚Micro- β”‚ β”‚Micro- β”‚ β”‚Micro- β”‚ β”‚Micro- β”‚ β”‚ β”‚ β”‚partitionβ”‚ β”‚partitionβ”‚ β”‚partitionβ”‚ β”‚partitionβ”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ (Immutable, compressed, columnar blocks β€” ~16MB each) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Snowflake's Secret Weapon: Micro-Partitioning

Snowflake automatically divides data into micro-partitions of 50–500MB (uncompressed), storing them in a proprietary columnar format. Critically:

  • Automatic clustering metadata is maintained, enabling partition pruning without manual index management.
  • Immutability means DML operations create new micro-partitions; Time Travel accesses old ones.
  • Result cache at the Cloud Services layer means identical queries re-execute for free (within 24 hours).
sql
-- This is Snowflake's caching hierarchy: -- 1. Result Cache (Cloud Services Layer) β€” instant, 24hr TTL -- 2. Remote Disk Cache (per Virtual Warehouse local SSD) β€” warm queries -- 3. Full S3 read β€” cold queries (still fast due to micro-partition pruning) SELECT region, SUM(revenue) FROM sales WHERE sale_date BETWEEN '2024-01-01' AND '2024-03-31' GROUP BY region; -- Second run of this exact query: ~0ms (result cache hit)

2.4 Databricks Architecture: The Lakehouse Model

Databricks' architecture is built on the conviction that Delta Lake can make object storage behave like a reliable warehouse, collapsing the traditional two-tier (lake + warehouse) architecture.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ UNITY CATALOG (Control Plane) β”‚ β”‚ β”‚ β”‚ Metastore β†’ Catalogs β†’ Schemas β†’ Tables/Views/Functions β”‚ β”‚ Covers: Tables, Files, ML Models, Dashboards, Notebooks β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ DATABRICKS WORKSPACE (Data Plane) β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ SQL Warehouses β”‚ β”‚ All-Purpose β”‚ β”‚ Job Clusters β”‚ β”‚ β”‚ β”‚ (Serverless / β”‚ β”‚ Clusters β”‚ β”‚ (Automated β”‚ β”‚ β”‚ β”‚ Classic) β”‚ β”‚ (Interactive) β”‚ β”‚ Pipelines) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ PHOTON ENGINE (C++ Vectorized) β”‚β”‚ β”‚ β”‚ Accelerates SQL workloads on Spark clusters β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ DELTA LAKE LAYER β”‚β”‚ β”‚ β”‚ β”‚β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚β”‚ β”‚ β”‚ β”‚ Bronze β”‚ β”‚ Silver β”‚ β”‚ Gold β”‚ β”‚β”‚ β”‚ β”‚ β”‚ (Raw) β”‚ β”‚ (Cleaned) β”‚ β”‚ (Aggregatedβ”‚ β”‚β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚ β”‚ β”‚ β”‚β”‚ β”‚ β”‚ Delta Log (_delta_log/) β€” Transaction log (JSON) β”‚β”‚ β”‚ β”‚ Parquet Data Files β€” Actual column data β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ OBJECT STORAGE (Customer-Managed) β”‚ β”‚ S3 / ADLS Gen2 / GCS β€” Open Parquet format β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The Delta Log: How Lakehouse Reliability Works

The Delta Log is a transaction journal stored as JSON files alongside the Parquet data. Every write, delete, or schema change appends an entry. This is what makes Delta Lake ACID-compliant on eventually-consistent object storage:

s3://my-bucket/delta-table/ β”œβ”€β”€ _delta_log/ β”‚ β”œβ”€β”€ 00000000000000000000.json ← Initial table creation β”‚ β”œβ”€β”€ 00000000000000000001.json ← First INSERT β”‚ β”œβ”€β”€ 00000000000000000002.json ← UPDATE (marks old files as removed) β”‚ β”œβ”€β”€ 00000000000000000010.checkpoint.parquet ← Checkpoint (every N commits) β”‚ └── _last_checkpoint ← Points to latest checkpoint β”œβ”€β”€ part-00001-abc.snappy.parquet β”œβ”€β”€ part-00002-def.snappy.parquet └── part-00003-ghi.snappy.parquet ← New file from UPDATE

2.5 Scaling Model Comparison

Scaling Axes

PlatformScale-Out (More Nodes)Scale-Up (Bigger Nodes)Concurrency Scaling
AWS Redshift ServerlessAutomatic (RPUs)Automatic (RPUs)Manual via WLM config
AWS Redshift ProvisionedManual node additionManual node type changeManual workload groups
AWS EMRAuto Scaling (EC2)Instance type selectionQueue-based (YARN)
AWS AthenaFully managedN/A (serverless)Per-query parallelism
SnowflakeMulti-cluster VW (automatic)VW T-shirt size⚑ Automatic, seamless
Databricks SQL WarehouseAuto-scale worker nodesDriver/worker instance typeQueue-based
Databricks All-PurposeManual or auto-scaleInstance type / DBUPer-cluster isolation

Snowflake's Multi-Cluster Concurrency Model

This is Snowflake's most powerful concurrency feature and is often misunderstood:

sql
-- Standard Virtual Warehouse: 1 cluster handles all queries sequentially (or limited parallel) -- Multi-cluster Virtual Warehouse: Snowflake SPINS UP NEW CLUSTERS automatically when queued CREATE WAREHOUSE analytics_wh WAREHOUSE_SIZE = 'LARGE' MIN_CLUSTER_COUNT = 1 -- Starts with 1 cluster MAX_CLUSTER_COUNT = 5 -- Can scale to 5 identical clusters under load SCALING_POLICY = 'STANDARD'; -- 'ECONOMY' waits longer before scaling out

This means 500 concurrent BI users can all get sub-second responses without any manual tuning β€” each cluster independently serves a subset of queries. The cost: you pay for all active clusters simultaneously. πŸ’°


2.6 Query Execution Architecture

How a Query Executes: Platform Internals

AWS Redshift (Provisioned): User Query β†’ Leader Node (query planning) β†’ Compute Nodes (parallel execution) ↓ Result Cache check ↓ Compile to C++ machine code ↓ Distribute slices to nodes ↓ Reduce to leader ↓ Return Snowflake: User Query β†’ Cloud Services (parse, plan, optimize, result cache check) β†’ Virtual Warehouse (local disk cache check, read from S3 if miss) β†’ MPP execution within VW nodes β†’ Result returned AND cached Databricks (Photon): User Query β†’ Spark SQL parser β†’ Catalyst Optimizer (logical + physical plan) β†’ Photon Engine (if SQL/DataFrame) or JVM Spark (complex UDFs) β†’ Distributed execution across worker nodes β†’ Result cache (Delta caching on worker local SSDs)

Query Optimizer Comparison

FeatureAWS RedshiftSnowflakeDatabricks
Optimizer TypeCost-basedCost-based + ML-assistedCatalyst (cost-based)
StatisticsManual ANALYZE or autoFully automaticAutomatic (with delta stats)
Join ReorderingYesYesYes (Adaptive Query Execution)
Adaptive ExecutionLimitedYes (automatic)⚑ Yes (Spark AQE β€” runtime plan changes)
User HintsLimitedYes (/*+ ... */)Yes (Spark hints)
Result CachingYes (result cache node)⚑ Yes (24hr, Cloud Services)Yes (Delta cache, local SSD)

2.7 Storage Format Deep Dive

AttributeAWS (S3 + Glue)SnowflakeDatabricks (Delta Lake)
Internal FormatParquet / ORC / IcebergProprietary FDN columnarApache Parquet
External Table SupportYes (Athena, Spectrum)Yes (S3, ADLS, GCS)Yes (any object storage)
ACID TransactionsVia Iceberg / LF Governedβœ… Native (micro-partition immutability)βœ… Native (Delta Log)
Time TravelVia S3 Versioning (expensive)βœ… 0–90 days (Fail-safe + Time Travel)βœ… 30 days default (configurable)
Schema EvolutionManual Glue Catalog updateβœ… Automatic with EVOLVE_SCHEMAβœ… MERGE schema evolution
Partition StrategyManual (Hive-style)Automatic (micro-partitions)Manual + OPTIMIZE + ZORDER
CompactionManual (Glue job or EMR)Automatic (transparent)βœ… OPTIMIZE command + Auto Optimize
Open Formatβœ… Yes❌ No (proprietary; External Tables use open formats)βœ… Yes (Parquet + open Delta spec)

2.8 The Data Plane vs. Control Plane Distinction (Databricks)

Databricks has a unique security model worth understanding deeply:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CONTROL PLANE (Databricks-managed) β”‚ β”‚ β”‚ β”‚ Workspace UI, Notebooks, Job Scheduler, Unity Catalog β”‚ β”‚ APIs, Cluster Manager, MLflow Tracking Server β”‚ β”‚ (Hosted on Databricks' cloud account) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ Encrypted channels only β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ DATA PLANE (Customer-managed) β”‚ β”‚ β”‚ β”‚ Actual Spark Clusters (EC2/AKS/GCE VMs in YOUR VPC) β”‚ β”‚ S3 / ADLS / GCS (YOUR storage accounts) β”‚ β”‚ Delta Lake tables (YOUR data, YOUR encryption keys) β”‚ β”‚ (Customer controls IAM, network, KMS keys) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

This separation means customer data never leaves the customer's cloud account, addressing a common enterprise security concern. Snowflake's model is different β€” the storage layer is managed by Snowflake on their cloud tenant (though customers can use Snowflake on their own cloud account with Snowflake on AWS PrivateLink or Bring Your Own Storage patterns).

Progress17%