AWS Data Modeling and Warehouse/Lakehouse Design: S3, Redshift, Databricks and Snowflake

Learn how to model analytical data and design AWS warehouse and lakehouse solutions with S3, Redshift, Databricks and Snowflake, including a sales star-schema example, lifecycle planning, SQL tuning and mitigation practices.
Good data modeling makes analytics easier to trust, faster to query and less expensive to operate. In an AWS-centered design, Amazon S3 can hold durable source and lakehouse data, while Redshift, Databricks and Snowflake provide different ways to transform and serve it. Choose the pattern from the workload, skills, latency needs and operating cost—not from a product checklist.
Start with the business questions
Before choosing tables or services, identify who will use the data, which questions they need answered, how fresh the data must be, and what access and retention rules apply. Document the source systems, entities, business definitions, expected volumes, query patterns and service-level targets. These choices shape the model and the platform.
Modeling example: an online retailer
Suppose a retailer needs sales by day, product, store and customer segment. Define the grain first: one row in the sales fact table represents one product line on one order. Then create:
- FactSales: order-line key, date key, product key, store key, customer key, quantity, gross amount, discount and net amount.
- DimDate: calendar date, week, month, quarter and financial year.
- DimProduct: product identifier, name, brand and category.
- DimStore: store identifier, city, region and channel.
- DimCustomer: customer identifier and approved analytical attributes, with sensitive personal data restricted or excluded.
This is a star schema: a central fact table joins to descriptive dimensions. It is straightforward for BI tools and common reporting. If a product belongs to several categories, or dimensions need shared normalized structures, a snowflake schema may reduce duplicated attributes, at the cost of additional joins. Keep the business grain and metric definitions explicit in either design.
Warehouse, lakehouse and S3 roles
- Amazon S3: Durable object storage for source extracts, open table data, archives and data exchange.
- Amazon Redshift: A managed, massively parallel SQL data warehouse for curated analytical tables and BI workloads.
- Databricks on AWS: A lakehouse platform for Spark-based engineering, machine learning and SQL analytics on governed lake data.
- Snowflake on AWS: A cloud data platform with managed SQL compute and storage for data transformation, warehousing and sharing.
These services can coexist, but every duplicated dataset creates storage, governance, data movement and reconciliation work. Decide which platform owns each curated data product and which copy is authoritative.
Amazon S3: layers, layout and lifecycle
A practical lake layout separates data by purpose. A raw or bronze area preserves source records with ingestion metadata. A refined or silver area applies validation, deduplication, standard types and conformed identifiers. A curated or gold area contains business-ready tables, aggregates and data products.
Use consistent paths such as s3://bucket/domain/entity/ingest_date=YYYY-MM-DD/. Partition only on fields that help common query filters, such as event date or region. Too many tiny partitions increase listing and metadata work; huge unpartitioned files can force readers to scan more data than needed. Prefer suitable columnar formats such as Parquet for analytical reads, and compact small files when the workload creates them.
S3 Lifecycle rules let teams transition or expire selected objects according to age, prefix, tags or other supported filters. For example, a team might keep current curated data in a frequently accessed class, transition older raw extracts to an archival class after confirming retrieval needs, and expire temporary files after a short retention period.
- Define retention with data owners, security, legal and compliance teams before enabling deletion.
- Check retrieval time, retrieval charges, minimum storage duration and transition request costs before archiving data.
- In versioned buckets, configure noncurrent-version transitions and expiration separately; expiring a current version may create a delete marker while older versions remain stored.
- Test rules against representative prefixes and tags, because a rule can apply to existing as well as newly added objects.
- Monitor storage by class, noncurrent versions and lifecycle actions; keep recovery data available for the agreed replay window.
Amazon Redshift modeling and SQL
Redshift works well when teams need managed SQL analytics with predictable warehouse patterns. Load data in bulk where practical, define dimensions and facts around business grain, and tune based on the real query workload. Redshift uses distribution and sort design to reduce data movement and scan work; automatic table optimization can make some of these choices for the service.
For the sales example, a sort key on a frequently filtered transaction date may help date-range queries. A distribution key may help if a large fact table is repeatedly joined to a dimension on the same key and the values distribute evenly. A small, frequently joined dimension could use an appropriate replicated distribution style, but replication increases storage and load work. Do not choose keys by habit: compare query plans, skew, load time and storage using representative data.
Write SQL that filters early, selects only needed columns, uses appropriate date and numeric types, and avoids wrapping commonly filtered sort-key columns in functions. Use EXPLAIN and workload metrics to find expensive scans, data redistribution, skew and concurrency pressure. Consider materialized views or aggregates only for repeated queries where their refresh cost is justified.
Databricks lakehouse modeling
Databricks is a strong fit when data engineering, streaming, machine learning and SQL analytics need to work over lake data. A common medallion pattern stores raw source data in bronze, cleans and conforms it in silver, and publishes business-ready tables in gold. Delta Lake adds transactional table behavior and supports schema and change-management patterns for lakehouse data.
Use the sales fact and dimensions as curated Delta tables in the gold layer. Keep transformations reproducible from controlled inputs, validate schema changes, and use Unity Catalog or the organization’s chosen governance setup to manage discovery and permissions. For large tables, optimize file sizes and layout based on access patterns; avoid adding partitions or clustering solely because a column exists.
Snowflake modeling and SQL
Snowflake suits SQL-centric analytics and managed warehouse workloads where teams value independent virtual warehouse compute and shared data access. Build dimensional models for stable BI metrics, and use governed views or curated tables to expose business definitions consistently. Snowflake automatically organizes standard tables into micro-partitions; clustering keys are a targeted tuning option for large tables when measured pruning or maintenance benefits justify their ongoing cost.
For example, a sales table frequently queried by transaction date and region can be loaded and measured first. Review query profiles and pruning before adding clustering. Scale warehouse size or concurrency settings based on workload evidence, and suspend compute when it is idle where the operating pattern permits.
Choosing a modeling and platform pattern
- Use a star schema for approachable BI and predictable joins between a fact and descriptive dimensions.
- Use a snowflake schema when normalized shared hierarchies reduce meaningful duplication and teams can manage the extra joins.
- Use S3 plus a lakehouse when retaining open data, replaying transformations, engineering diverse formats or supporting ML is central.
- Use Redshift or Snowflake warehousing when managed SQL analytics and BI workloads are the main need; benchmark against workload, concurrency and existing skills.
- Use a hybrid design only when a specific workload needs it and ownership, data movement, security and cost are clearly defined.
Key challenges, mitigation and best practices
- Unclear business grain: State what one fact row means, define metric ownership, and test totals against source reports before scaling.
- Inconsistent definitions: Publish a shared business glossary and certified dimensions/measures; centralize reusable transformations.
- Slow joins or scans: Inspect query plans and runtime profiles, then tune data layout, distribution, sort order, clustering or aggregates based on evidence.
- Skew and hot keys: Find uneven key distributions and long-running tasks; use appropriate distribution, salting or pre-aggregation only where measurement supports it.
- Schema drift: Version data contracts, allow compatible changes deliberately, quarantine invalid records and test downstream models.
- Small files and excess partitions: Compact files, keep partition columns useful and bounded, and monitor metadata and file counts.
- Lifecycle deletion or unexpected archive cost: Test scoped rules, account for versions and restore time, and review retention with data owners.
- Duplicated platforms: Assign a system of record per data product, document copies and refresh ownership, and track egress, storage and operational costs.
Best-practice delivery steps
- Capture reporting questions, data entities, grain, refresh needs, access rules and retention requirements.
- Profile source data and agree on identifiers, quality checks and business definitions.
- Choose the warehouse, lakehouse or hybrid pattern from real query and engineering needs.
- Design S3 prefixes, file formats and partitions; establish lifecycle rules only after retention and restore behavior are agreed.
- Build raw, refined and curated pipelines with validation, lineage, retries and reproducible transformations.
- Model facts and dimensions, then test SQL against representative volume and concurrent workloads.
- Track query performance, freshness, completeness, storage growth, compute usage and cost per business workload.
- Review data contracts, access permissions, lifecycle rules and model definitions as the sources and business needs change.
A good architecture keeps the meaning of the data clear from source to report. Start with the business grain and access patterns, use S3 lifecycle to match retention needs, and tune Redshift, Databricks or Snowflake only after measuring the workloads they must serve.


