Amazon Redshift
Redshift is AWS's data warehouse service, designed for teams that run their entire stack on AWS and want tight integration with S3, Glue, and Kinesis. It offers both provisioned clusters (fixed capacity) and Redshift Serverless (auto-scaling). Redshift is cheaper than Snowflake for sustained workloads but requires more tuning (distribution keys, sort keys, vacuum jobs). Teams use it for cost-sensitive GTM analytics when AWS ecosystem lock-in is acceptable.
Why it ranks here
- Lowest cost per query among major warehouses for sustained, high-throughput workloads; reserved instances cut costs further.
- Native integration with AWS services (S3, Glue, Lambda, Kinesis) eliminates data movement and egress fees.
- Redshift Spectrum queries data in S3 without loading it into the warehouse, extending the platform into a lakehouse pattern.
Where it sits
- Snowflake offers better concurrency, simpler operations, and a richer third-party ecosystem.
- BigQuery is easier to set up and cheaper for infrequent, large scans; Redshift requires cluster management.
- Databricks provides unified batch, streaming, and ML; Redshift is SQL-only and requires separate tools for ML.
How GTM Systems teams use it
- Load Salesforce, Marketo, and product usage data via Fivetran or AWS Glue, then build dbt models that produce customer and opportunity fact tables for Tableau or Sigma.
- Use Redshift Spectrum to query raw JSON logs in S3 alongside structured CRM data in Redshift tables, cutting storage costs for high-volume event data.
- Schedule transformation jobs with Airflow or Step Functions, run VACUUM and ANALYZE commands in maintenance windows to keep query performance stable.
- Grant IAM-based access to analysts and BI tools; use Redshift data sharing to expose curated datasets to other AWS accounts without copying data.
In-depth notes
- Provisioned clusters and serverless options available; compare total cost against Snowflake for your workload.
- Redshift requires tuning: choose distribution keys (EVEN, KEY, ALL) and sort keys to optimize joins and filters. Poorly tuned tables degrade performance.
- VACUUM and ANALYZE commands are semi-automatic but require monitoring; neglecting them causes query slowdowns over time.
- Concurrency Scaling adds automatic read replicas during peak load; useful for dashboard spikes but adds cost.
- Cross-region queries and S3 access incur egress fees; keep Redshift, S3, and application workloads in the same AWS region.
Best for
AWS-native teams with sustained, high-volume query workloads; cost-sensitive organizations willing to invest in tuning and maintenance.
Avoid if
You run a multi-cloud stack or need Snowflake's zero-tuning simplicity. Redshift's operational overhead outweighs cost savings for small teams.
The rest of Data warehouse & modeling
Learning guide
Setup
Provision a Redshift cluster in the AWS Console (start with dc2.large, 2 nodes) or enable Redshift Serverless for auto-scaling. Load sample data from S3 using COPY FROM and verify query performance with a simple SELECT.
First thing to build
Create a fact table from raw Salesforce data using CREATE TABLE with distribution and sort keys. Choose DISTKEY on the most-joined column (account_id or opportunity_id) and SORTKEY on the most-filtered column (close_date or created_date).
What actually matters
- Distribution keys: use KEY for large fact tables joined by a single column, ALL for small dimension tables under 1 million rows, and EVEN for tables with no clear join pattern.
- Sort keys: compound sort keys (multiple columns) optimize range filters on dates and IDs; interleaved sort keys work for multiple filter patterns but slow down ingestion.
- VACUUM and ANALYZE: schedule VACUUM DELETE to reclaim space after deletes and ANALYZE to refresh query planner statistics; run weekly or after large loads.
- Concurrency Scaling: enable it to auto-add read replicas during dashboard spikes; you pay per-second for the extra compute.
Watch out
Skipping distribution and sort key design on large tables causes slow joins and full-table scans; plan the schema before loading production data.