pipeline-design
Design ETL/ELT pipeline architectures with proper patterns for reliability and scalability.
When & Why to Use This Skill
This Claude skill empowers users to architect high-performance ETL/ELT data pipelines with a focus on reliability and scalability. It provides expert guidance on selecting optimal processing patterns—whether batch or streaming—and implementing industry best practices like idempotency, observability, and robust error handling to ensure data integrity across modern data warehouses.
Use Cases
- Case 1: Designing scalable ELT architectures for modern cloud data warehouses such as Snowflake, BigQuery, or Redshift to optimize compute efficiency.
- Case 2: Architecting real-time, event-driven streaming pipelines using Kafka or Kinesis with exactly-once processing semantics.
- Case 3: Implementing idempotent and incremental loading patterns to ensure data consistency and reduce redundant processing costs.
- Case 4: Developing resilient error-handling strategies, including dead letter queues and exponential backoff, to maintain high pipeline uptime.
| name | pipeline-design |
|---|---|
| description | Design ETL/ELT pipeline architectures with proper patterns for reliability and scalability. |
Pipeline Design
ETL vs ELT
| Approach | When to Use |
|---|---|
| ETL | Transform before load, limited warehouse compute |
| ELT | Modern warehouses (Snowflake, BigQuery, Redshift) |
Pipeline Patterns
Batch
Source → Extract → Stage → Transform → Load → Target
│ │
└── Checkpoint ──────┘
- Scheduled intervals (hourly, daily)
- Full or incremental loads
- Idempotent operations
Streaming
Source → Kafka/Kinesis → Process → Sink
│
└── State Store
- Real-time requirements
- Event-driven architecture
- Exactly-once semantics
Design Principles
- Idempotent - Safe to re-run
- Incremental - Process only new/changed data
- Observable - Metrics, logs, alerts
- Testable - Unit tests for transformations
- Recoverable - Checkpoints, retry logic
Staging Pattern
-- 1. Land raw data
COPY INTO raw.source_data FROM @stage;
-- 2. Deduplicate
CREATE TABLE staging.deduped AS
SELECT * FROM raw.source_data
QUALIFY ROW_NUMBER() OVER (PARTITION BY id ORDER BY _loaded_at DESC) = 1;
-- 3. Transform to target
MERGE INTO target.dim_customer
USING staging.deduped
ON target.id = staging.id
WHEN MATCHED THEN UPDATE ...
WHEN NOT MATCHED THEN INSERT ...;
Error Handling
- Dead letter queues for failed records
- Retry with exponential backoff
- Alert on threshold breaches
- Quarantine bad data for review