- Starter
- Business
- Enterprise
- On-Premise
- Add-on
Overview
Change Data Capture (CDC) pipeline allows extracting changes in real-time from the databases which support CDC and loading them into Amazon Redshift.
Etlworks includes a built-in, deeply integrated CDC engine based on a customized version of Debezium.
There is nothing to install or manage separately—the CDC engine runs as part of the flow execution.
Supported source databases
- MySQL
- SQL Server
- PostgreSQL
- Oracle
- DB2
- MongoDB
- AS400 (IBMI platfroms)
When to use this pipeline
Use the pipeline described in this article to extract data from the CDC-enabled database and load it into Amazon Redshift in [almost] real-time.
Flows optimized for Redshift
| Flow type | When to use | |
|
When you need to extract data from any source, transform it and load it into Redshift. | |
| Bulk load files in S3 into Redshift | When you need to bulk-load files that already exist in S3 without applying any transformations. The flow automatically generates the COPY command and MERGEs data into the destination. | |
| Stream CDC events into Redshift | You are here | When you need to stream updates from the database which supports Change Data Capture (CDC) into Redshift in real-time. |
| Stream messages from queue into Redshift | When you need to stream messages from the message queue which supports streaming into Redshift in real-time. | |
| COPY files into Redshift | When you need to bulk-load data from the file-based or cloud storage, API, or NoSQL database into Redshift without applying any transformations. This flow requires providing the user-defined COPY command. Unlike Bulk load files in S3 into Redshift, this flow does not support automatic MERGE. |
How it works
A CDC pipeline into Redshift captures real-time changes from a CDC-enabled source database, stages them in S3 and loads them using Redshift’s native ingestion mechanisms.
You can build the pipeline using two options, depending on your reliability, performance, and scaling needs:
Option 1: Single Flow – Stream and Load Together
Use this option for simplicity and quick setup.
-
A single flow streams CDC events into S3 and periodically loads them into target tables using native Redshift bulk load (as frequently as every second).
-
Only one flow to configure, schedule, and monitor.
-
The flow is fully fault-tolerant: if streaming or loading fails, the entire process resumes from the last successful checkpoint once the issue is resolved.
-
Best for: low to moderate data volumes and teams prioritizing simplicity.
-
Consideration: Since streaming and loading are tightly coupled, a failure in one pauses both.
Option 2: Separate Extract and Load Flows
Use this option for maximum throughput, fault isolation, and horizontal scaling.
-
Build two independent flows:
-
Extract Flow: streams CDC events into S3 stage.
-
Load Flow: loads staged data into Redshift using native bulk operations.
-
-
The flows run in parallel and can be deployed across multiple nodes for large-scale workloads.
-
Best for: high-volume, low-latency pipelines and mission-critical systems where stability and performance are essential.
Prerequisites
1. Enable CDC in the source database:
- Enable CDC for Microsoft SQL Server
- Enable CDC MySQL
- Enable CDC for Oracle
- Enable CDC for PostgreSQL
- Enable CDC for DB2
- Enable CDC for MongoDB
- Enable CDC for AS400 (IBMI platfroms)
2. The Redshift is up and running and available from the Internet.
3. The Redshift user hasINSERTprivilege for the table(s).
4. The Amazon S3 bucket is created, and Redshift is able to access the bucket.
A pipeline with a single flow
Redshift CDC flow streams CDC events into the designated S3 bucket in real-time and periodically (as often as every second) loads the data into Redshift in parallel with the stream.
Note: There is no need to create a separate Flow for the initial load. The first time it connects to a CDC-enabled source database, it reads a consistent snapshot of all of the included databases and tables. When that snapshot is complete, the Flow continuously reads the changes that were committed to the transaction log and generates the corresponding insert, update, and delete events.
Read more about CDC in Etlworks.
Step 1. Create a CDC Connection for the source.
Read how to create a CDC connection.
Step 2. Create connection for staging files in AWS S3
Redshift loads staged files from S3 storage. Read how to create S3 connection.
Step 3. Create a Redshift connection for the destination.
Step 4. Create a connection for history and offset files.
Read how to create CDC Offset and History connection.
Etlworks CDC connectors store the history of DDL changes for the monitored database in the history file and the current position in the transaction log in the offset file.
Typical CDC extract flow starts by snapshotting the monitored tables (A) or starts from the oldest known position in the transaction (redo) log (B), then proceeds to stream changes in the source database (C). If the Flow is stopped and restarted, it resumes from the last recorded position in the transaction log. The connection created in this step can be used to reset the CDC pipeline and restart the process from scratch.
The connection, by default, points to the directory{app.data}/debezium_data.
Step 5. Create Redshift CDC flow.
In Flows clickAdd flow. Type incdc in Select Flow type. SelectStream CDC events into Amazon Redshift.
Step 6. Add source-to-destination transformation
Left to right:
- select the CDC connection
- select tables to monitor in FROM
- select the Redshift connection created in step 3
- select or enter the Redshift table name in TO. When streaming data from multiple source tables set the destination table using a wildcard template in the following format:schema.prefix_*_suffix, whereschemais a Redshift schema to load data into.
Step 7. Set connection for staging files in AWS S3.
Select Connections tab, select connection created in step 2 and select CSV format.
Step 8. Configure load parameters
Click theMAPPINGbutton, select theParameterstab.
Set String for SQL NULL
By default, when the CDC connector generates CSV files, it sets null values to "null". This is causing an issue when loading nulls into numeric columns in Redshift.
Enter 'null' in String used to convert top SQL NULL to configure the Redshift COPY command to treat "null" as SQL NULL.
Modify the following Load parameters:
- Load data into Redshift every (ms): by default, the flow loads data into Redshift every 5 minutes (300000 milliseconds). The load runs in parallel with the CDC stream, which never stops. Decrease this parameter to load data into Redshift more often or increase it to reduce the number of consumed Redshift credits.
- Wait (ms) to let running load finish when CDC stream stops: By default, the flow loads data into Redshift every 5 minutes. The CDC stream and load are running in parallel, so when streaming stops, the flow executes the load last more time to finish loading the remaining data in the queue. It is possible that the load flow is still running when the stream stops. Use this parameter to configure how long the flow should wait before executing the load last time. Clear this parameter to disable the wait. In this case, if the load task is still running, the flow will finish without executing the load one last time. The flow will load the remaining data in the queue on the next run.
- Action: the action can beMERGE(default) orINSERT. If the action is set toMERGEthe flow will INSERT records that do not exist in the destination table, UPDATE existing records, and DELETE records that were deleted in the source table.
- How to MERGE: the type of SQL to execute when merging data. The following options are available: Native MERGE(preview) - execute native Redshift MERGE SQL. Note that MERGE command is in preview; DELETE/INSERT (default) - DELETE all records in the actual table that also exist in the temp table, then INSERT all records from the temp table into the actual table.
- Lookup Fields:MERGEaction requires a list of columns that uniquely identify the record. By default, the flow will attempt to predict the Lookup Fields by checking unique indexes in the source and destination tables, but if there is no unique index in either table it is not guaranteed that the prediction will be 100% accurate. Use this parameter to define the Lookup Fields in the following format:fully.qualified.table1=field1,field2;fully.qualified.table2=field1,field2.
Note: The other parameters are similar or the same as for the flow type Bulk load files in S3 into Redshift.
Step 9. Schedule Redshift CDC flow.
We recommend using a continuous run Schedule type. The idea is that the Flow runs until it is stopped manually, there is an error, or (if configured) there are no more new CDC events for an extended period of time. It restarts automatically after a configurable number of seconds.
Monitor running CDC flow
Read how to monitor running CDC flow.
A pipeline with independent extract and load flows
CDC extract flow extracts data from a CDC-enabled database and creates CSV files with CDC events in the configured location. These files are loaded into the target database by Load Flow.
Step-by-Step Guide
Step 1. Create and schedule CDC Extract flow
This flow is used to extract CDC events from the source database in read time and create files with events.
Read how to create CDC extract flow.
Step 2. Create and schedule Bulk Load flow
This Flow is used to bulk load files created by the CDC extract flow into Redshift.
Read how to create bulk load flow.
Step 3. Schedule Bulk Load Flow.
Schedule flow to run as often as needed. These are the options:
- Run flow periodically (as often as once a minute)
- Run flow continuously (as often as once a second).