<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://olake.io/compare/</id>
    <title>OLake Compare</title>
    <updated>2026-10-12T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://olake.io/compare/"/>
    <subtitle>OLake Blog</subtitle>
    <icon>https://olake.io/img/logo/olake-blue.svg</icon>
    <entry>
        <title type="html"><![CDATA[Best SQL Server CDC Tools in 2026, Compared]]></title>
        <id>https://olake.io/compare/sql-server-cdc-tools/</id>
        <link href="https://olake.io/compare/sql-server-cdc-tools/"/>
        <updated>2026-10-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[SQL Server CDC tools compared: how native CDC works, what breaks it, and eleven tools with their documented limits, editions, destinations and best uses.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="eager" src="https://olake.io/img/blog/cover/sql-server-cdc-tools-cover.webp" alt="Cover for SQL Server CDC tools showing SQL Server feeding a CDC tool that loads a lake or warehouse" width="1920" height="1080" fetchpriority="high" class="img_ev3q"></p>
<section class="olake-tldr" aria-label="Key takeaways"><p class="olake-tldr__label"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"></path></svg><span>Key takeaways</span></p><div class="olake-tldr__body"><p>SQL Server already has change data capture (CDC) built in, and most tools below simply read from it. Microsoft's docs say native CDC needs SQL Server Agent running and keeps changes for three days by default.</p><p>Pick by where the data has to land and who will run the pipeline. Debezium suits Kafka teams, Fivetran suits vendor-run loads, and Airbyte suits scheduled loads you run yourself. Qlik Replicate and Striim suit large estates, AWS Database Migration Service (DMS) suits AWS teams, Datastream suits Google Cloud, and Fabric mirroring suits Microsoft Fabric.</p><ul>
<li class=""><strong>Native SQL Server CDC is a feature of the database, not a tool.</strong> SQL Server Agent jobs copy changes from the transaction log into change tables.</li>
<li class=""><strong>Retention is the clock that breaks pipelines.</strong> Miss the three-day default window and you're starting over.</li>
<li class=""><strong>Schema changes are the second trap.</strong> A new column isn't captured until you add a second capture instance.</li>
</ul></div></section>
<p>We read each vendor's own documentation on 8 October 2026. We quote no prices here.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-sql-server-cdc-works-in-plain-terms">How SQL Server CDC works, in plain terms<a href="https://olake.io/compare/sql-server-cdc-tools/#how-sql-server-cdc-works-in-plain-terms" class="hash-link" aria-label="Direct link to How SQL Server CDC works, in plain terms" title="Direct link to How SQL Server CDC works, in plain terms" translate="no">​</a></h2>
<p>Change data capture means spotting the inserts, updates and deletes in a database and sending only those on. In SQL Server, <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft's CDC docs</a> say the source of change data is the transaction log, the file where the database records every change in order.</p>
<p>A job called the capture job reads that log and writes the changes into <strong>change tables</strong>. Each tracked table gets a <strong>capture instance</strong>, which is one change table plus up to two query functions. By default the instance is named <code>schema_table</code>, and its change table gets <code>_CT</code> added, <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">per Microsoft</a>.</p>
<p>Every change row carries a log sequence number (LSN) and an operation code. 1 is a delete, 2 is an insert, 3 is the row before an update and 4 is the row after. So an update adds two rows, per <a href="https://learn.microsoft.com/en-us/sql/relational-databases/system-tables/cdc-capture-instance-ct-transact-sql" target="_blank" rel="noopener noreferrer" class="">Microsoft's change table reference</a>.</p>
<p>Two details trip up first-time readers. Don't order by <code>__$seqval</code>; use <code>__$command_id</code>, which orders changes inside a transaction. And Microsoft recommends calling the <code>cdc.fn_cdc_get_all_changes_</code> and <code>cdc.fn_cdc_get_net_changes_</code> functions instead of reading the change tables directly (<a href="https://learn.microsoft.com/en-us/sql/relational-databases/system-tables/cdc-capture-instance-ct-transact-sql" target="_blank" rel="noopener noreferrer" class="">reference</a>).</p>
<p>Two SQL Server Agent jobs do the work, and their defaults matter. <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft's docs</a> say the capture job runs continuously, handles up to 1,000 transactions per scan and waits 5 seconds between scans. The cleanup job runs daily at 2 A.M. and keeps entries for 4,320 minutes (3 days).</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/sql-server-cdc-tools--sql-server-cdc-retention-docs.webp" alt="Microsoft Learn text on SQL Server CDC agent jobs: capture job runs continuously, cleanup keeps change table entries 4320 minutes or 3 days" width="1600" height="780" class="img_ev3q"></p>
<p><em>Microsoft Learn, "What is change data capture (CDC)?", Agent jobs section, October 2026.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cdc-or-change-tracking-your-first-choice">CDC or change tracking? Your first choice<a href="https://olake.io/compare/sql-server-cdc-tools/#cdc-or-change-tracking-your-first-choice" class="hash-link" aria-label="Direct link to CDC or change tracking? Your first choice" title="Direct link to CDC or change tracking? Your first choice" translate="no">​</a></h2>
<p>SQL Server ships two built-in ways to find changed rows. <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft's comparison page</a> says change data capture reads the log after the fact and keeps history, while change tracking records changes as you write and keeps no history.</p>
<p>Change tracking notes that a row changed and gives its primary key (the column that uniquely identifies each row), but not the changed values. That's fine for the latest state, but no use for history.</p>
<p>Your edition can settle things fast. <a href="https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2025?view=sql-server-ver17" target="_blank" rel="noopener noreferrer" class="">Microsoft's editions table</a> lists change data capture as Yes for Enterprise and Standard, and No for Express. Attaching a CDC database, or restoring it with the <code>KEEP_CDC</code> option, on an edition without CDC is blocked (<a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft</a>).</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/sql-server-cdc-tools-cdc-vs-change-tracking.webp" alt="CDC keeps values and history on Standard or Enterprise; change tracking keeps only row keys and runs on Express" width="1600" height="720" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/sql-server-cdc-tools--sql-server-editions-cdc-row.webp" alt="Microsoft SQL Server 2025 editions table rows showing change data capture Yes for Enterprise and Standard, No for Express" width="1520" height="825" class="img_ev3q"></p>
<p><em>Microsoft Learn, "Editions and supported features of SQL Server 2025", Replication table, October 2026.</em></p>
<p>Azure SQL Database plays by different rules. <a href="https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> a scheduler replaces the Agent jobs, and databases on the Database Transaction Unit (DTU) model need tier S3 or higher.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-turn-cdc-on">How to turn CDC on<a href="https://olake.io/compare/sql-server-cdc-tools/#how-to-turn-cdc-on" class="hash-link" aria-label="Direct link to How to turn CDC on" title="Direct link to How to turn CDC on" translate="no">​</a></h2>
<p>It's two commands, but the permissions differ. Per <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft's enable guide</a>, <code>sysadmin</code> is required to enable CDC for a database, and a <code>db_owner</code> can then enable each table.</p>
<div class="language-sql olake-code codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393939;--prism-background-color:#fafafa"><div class="olake-code__header"><span class="olake-code__lang">sql</span></div><div class="olake-code__body"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#393939;background-color:#fafafa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393939"><span class="token keyword" style="color:#193ae6">USE</span><span class="token plain"> MyDB</span><span class="token punctuation" style="color:#5d5d5d">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393939"><span class="token plain"></span><span class="token keyword" style="color:#193ae6">EXEC</span><span class="token plain"> sys</span><span class="token punctuation" style="color:#5d5d5d">.</span><span class="token plain">sp_cdc_enable_db</span><span class="token punctuation" style="color:#5d5d5d">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393939"><span class="token plain"></span><span class="token keyword" style="color:#193ae6">EXEC</span><span class="token plain"> sys</span><span class="token punctuation" style="color:#5d5d5d">.</span><span class="token plain">sp_cdc_enable_table</span><br></div><div class="token-line" style="color:#393939"><span class="token plain">  </span><span class="token variable" style="color:#7a3ec8">@source_schema</span><span class="token plain"> </span><span class="token operator" style="color:#5d5d5d">=</span><span class="token plain"> N</span><span class="token string" style="color:#1a7f4b">'dbo'</span><span class="token punctuation" style="color:#5d5d5d">,</span><span class="token plain"> </span><span class="token variable" style="color:#7a3ec8">@source_name</span><span class="token plain"> </span><span class="token operator" style="color:#5d5d5d">=</span><span class="token plain"> N</span><span class="token string" style="color:#1a7f4b">'MyTable'</span><span class="token punctuation" style="color:#5d5d5d">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393939"><span class="token plain">  </span><span class="token variable" style="color:#7a3ec8">@role_name</span><span class="token plain"> </span><span class="token operator" style="color:#5d5d5d">=</span><span class="token plain"> </span><span class="token boolean" style="color:#b4540a">NULL</span><span class="token punctuation" style="color:#5d5d5d">,</span><span class="token plain"> </span><span class="token variable" style="color:#7a3ec8">@supports_net_changes</span><span class="token plain"> </span><span class="token operator" style="color:#5d5d5d">=</span><span class="token plain"> </span><span class="token number" style="color:#b4540a">1</span><span class="token punctuation" style="color:#5d5d5d">;</span><br></div></code></pre></div></div>
<p>Per the same guide, CDC needs exclusive use of a schema and a user both named <code>cdc</code>, so enabling fails if you already have either. Net changes queries need a primary key or unique index on the table. A <code>@role_name</code> of NULL (no value) turns off the access role.</p>
<p>On Amazon Relational Database Service (RDS), per its <a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.CDC.html" target="_blank" rel="noopener noreferrer" class="">CDC guide</a>, you run <code>msdb.dbo.rds_cdc_enable_db</code> instead. AWS also says snapshot and point-in-time restores disable CDC and remove its metadata.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/rds-sql-server-cdc-enable.webp" alt="Amazon RDS for SQL Server documentation showing the rds_cdc_enable_db procedure and a note that restores disable CDC" width="1600" height="652" class="img_ev3q"></p>
<p><em>Amazon RDS User Guide, "Using change data capture for Amazon RDS for SQL Server", October 2026.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-we-picked">How we picked<a href="https://olake.io/compare/sql-server-cdc-tools/#how-we-picked" class="hash-link" aria-label="Direct link to How we picked" title="Direct link to How we picked" translate="no">​</a></h2>
<p>We included maintained tools that document their SQL Server source in public, and looked at how each reads SQL Server, what the docs say about schema changes and retention, and where the data lands. We did <em>not</em> run these tools; this is a documentation reading, not a lab test, and speed or reliability claims on vendor pages are the vendor's.</p>
<p>Each entry has one "What users say" line, with short quotes from public threads and review sites that we opened on 8 October 2026. Most of that talk is about other databases, so treat it as general experience with the tool. The order inside a group isn't a ranking.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sql-server-cdc-tools-at-a-glance">SQL Server CDC tools at a glance<a href="https://olake.io/compare/sql-server-cdc-tools/#sql-server-cdc-tools-at-a-glance" class="hash-link" aria-label="Direct link to SQL Server CDC tools at a glance" title="Direct link to SQL Server CDC tools at a glance" translate="no">​</a></h2>
<table><thead><tr><th>Tool</th><th>How it reads SQL Server</th><th>How you run it</th><th>Change tracking</th><th>Read replica</th></tr></thead><tbody><tr><td>Native CDC</td><td>Agent jobs copy the log into change tables</td><td>Inside SQL Server</td><td>Separate feature</td><td>Not covered here</td></tr><tr><td>Debezium</td><td>CDC change tables, to Kafka topics</td><td>Self-hosted</td><td>Not covered here</td><td>Not covered here</td></tr><tr><td>Fivetran</td><td>Change tracking, CDC, Binary Log Reader or Teleport Sync</td><td><a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">Managed, or Hybrid</a></td><td>Yes</td><td>CDC yes, change tracking no</td></tr><tr><td>Airbyte</td><td>CDC, with scheduled syncs</td><td><a href="https://airbyte.com/why-open-source" target="_blank" rel="noopener noreferrer" class="">Core self-managed, or Cloud</a></td><td>Not covered here</td><td>Not covered here</td></tr><tr><td>Estuary</td><td>CDC, change tracking or batch connectors</td><td>Managed, <a href="https://docs.estuary.dev/getting-started/pricing/" target="_blank" rel="noopener noreferrer" class="">private or BYOC</a></td><td>Yes</td><td>CDC yes, worker runs on the primary</td></tr><tr><td>Qlik Replicate</td><td>Two connection types: a standard endpoint and MS-CDC</td><td><a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">Client-managed</a></td><td>Not covered here</td><td>Not covered here</td></tr><tr><td>Striim</td><td>MS SQL Reader (CDC tables) or MSJet (log backups)</td><td><a href="https://www.striim.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Cloud, or self-managed</a></td><td>Not covered here</td><td>Not covered here</td></tr><tr><td>AWS DMS</td><td>MS-Replication and MS-CDC</td><td><a href="https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html" target="_blank" rel="noopener noreferrer" class="">Runs in the AWS Cloud</a></td><td>Not covered here</td><td>Read-only replica source: manual MS-CDC set-up</td></tr><tr><td>Google Datastream</td><td>Change tables or transaction logs</td><td>Google Cloud</td><td>Not covered here</td><td>Not covered here</td></tr><tr><td>Fabric mirroring</td><td>CDC (2016 to 2022) or change feed (2025)</td><td>Microsoft Fabric</td><td>Not covered here</td><td>Not covered here</td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>CDC capture instances</td><td>Self-hosted</td><td>Not covered here</td><td>Yes, with <code>ApplicationIntent=ReadOnly</code></td></tr></tbody></table>
<p>MS stands for Microsoft: MS-CDC is its CDC feature, MS-Replication is its replication feature, and MS SQL Reader is a Striim reader. "Not covered here" means we didn't find the point on the pages we read, not that the tool can't do it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-11-best-sql-server-cdc-tools">The 11 best SQL Server CDC tools<a href="https://olake.io/compare/sql-server-cdc-tools/#the-11-best-sql-server-cdc-tools" class="hash-link" aria-label="Direct link to The 11 best SQL Server CDC tools" title="Direct link to The 11 best SQL Server CDC tools" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="built-into-sql-server">Built into SQL Server<a href="https://olake.io/compare/sql-server-cdc-tools/#built-into-sql-server" class="hash-link" aria-label="Direct link to Built into SQL Server" title="Direct link to Built into SQL Server" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-native-sql-server-cdc-best-when-the-consumer-is-your-own-code">1. Native SQL Server CDC: best when the consumer is your own code<a href="https://olake.io/compare/sql-server-cdc-tools/#1-native-sql-server-cdc-best-when-the-consumer-is-your-own-code" class="hash-link" aria-label="Direct link to 1. Native SQL Server CDC: best when the consumer is your own code" title="Direct link to 1. Native SQL Server CDC: best when the consumer is your own code" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: Agent jobs and change tables</li>
<li class="">Lands data in: nowhere, you query it</li>
<li class="">Price: part of SQL Server editions that include it</li>
</ul>
<p>Native CDC is the base layer under most tools below, so it's worth knowing on its own. Microsoft's docs name the query functions that return changes over a range of LSNs.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">It needs no extra software and keeps history, with the values before and after each update, per <a href="https://learn.microsoft.com/en-us/sql/relational-databases/system-tables/cdc-capture-instance-ct-transact-sql" target="_blank" rel="noopener noreferrer" class="">Microsoft's change table reference</a>.</li>
<li class=""><a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> stopping the capture job loses no change data. It only pauses log scanning.</li>
<li class="">Setting <code>@supports_net_changes</code> to 1 also generates a net changes function for the capture instance, and <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft's enable guide</a> says that needs a primary key or unique index on the table.</li>
<li class="">If an existing column changes data type, <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> the change is propagated to the change table.</li>
<li class="">On Amazon RDS, once you run <code>msdb.dbo.rds_cdc_enable_db</code>, <a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.CDC.html" target="_blank" rel="noopener noreferrer" class="">AWS says</a> any <code>db_owner</code> of the database can enable or disable CDC on its tables.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">It only fills change tables (<a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft</a>), so you still need something to move the rows.</li>
<li class="">Even in simple recovery mode, <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> the log truncation point doesn't advance until captured changes are gathered, and <code>CHECKPOINT</code> won't truncate the log if the capture process isn't running while changes wait to be gathered. So a stopped capture job makes the log grow.</li>
<li class=""><a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> both capture methods need SQL Server Agent running, and its <a href="https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2025?view=sql-server-ver17" target="_blank" rel="noopener noreferrer" class="">editions table</a> lists change data capture as Yes for Enterprise and Standard and No for Express.</li>
<li class="">Ask for a range that starts before the oldest kept change and <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> there could be missing change data from aggressive cleanup. A range outside the valid window makes the query functions fail.</li>
<li class="">New columns are ignored until you create a second capture instance, and <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> a table can have at most two at once.</li>
<li class="">In a capture instance, <a href="https://learn.microsoft.com/en-us/sql/relational-databases/system-tables/cdc-capture-instance-ct-transact-sql" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> computed columns always have a value of NULL, and by default a captured column can take at most 65,536 bytes (64 KB) in one INSERT, UPDATE, WRITETEXT or UPDATETEXT statement.</li>
</ul>
<p><strong>What users say:</strong> One Hacker News commenter ran SQL Server CDC into Debezium and Azure Event Hubs and reported a "5-10 second delay from source system transaction commit till update/insert" (<a href="https://news.ycombinator.com/item?id=42859615" target="_blank" rel="noopener noreferrer" class="">Hacker News, "Turning the database inside-out (2015)", January 2025</a>). We found no user write-up on log growth or Agent trouble, so those limits rest on Microsoft's docs alone.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="run-it-yourself">Run it yourself<a href="https://olake.io/compare/sql-server-cdc-tools/#run-it-yourself" class="hash-link" aria-label="Direct link to Run it yourself" title="Direct link to Run it yourself" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-debezium-best-for-teams-that-already-run-kafka">2. Debezium: best for teams that already run Kafka<a href="https://olake.io/compare/sql-server-cdc-tools/#2-debezium-best-for-teams-that-already-run-kafka" class="hash-link" aria-label="Direct link to 2. Debezium: best for teams that already run Kafka" title="Direct link to 2. Debezium: best for teams that already run Kafka" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-debezium.webp" alt="Debezium home page showing its headline and main navigation" width="1600" height="899" class="img_ev3q"></p>
<p><em>Debezium home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: CDC change tables</li>
<li class="">Lands data in: Kafka topics, one per table</li>
<li class="">Price: free licence, you pay for servers and staff</li>
</ul>
<p>Debezium is an open-source CDC engine. Its <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">SQL Server connector docs</a> say it is based on the CDC feature in SQL Server 2016 Service Pack 1 and later, Standard or Enterprise edition.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">It takes a consistent snapshot first, then streams changes and picks up from the last log position after a restart (<a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">Incremental snapshots copy a table in chunks (1,024 rows by default), and the <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">SQL Server docs</a> say they run alongside streaming and can resume after an interruption without losing data.</li>
<li class="">The <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say it can capture from an Always On read-only replica, though CDC must still be enabled on the primary node.</li>
<li class="">The <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a> cover tuning the SQL Server capture job: a higher <code>pollinginterval</code> lowers the load on the database host and raises latency.</li>
<li class="">The <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say its schema history provides the table structure in effect when a change event occurs.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Offsets are saved on a schedule, so after an outage the <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a> warn of duplicate events, so your loads must cope with repeats.</li>
<li class="">The <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say SQL Server CDC isn't designed to store a complete history of changes, so the connector takes a snapshot to set a baseline.</li>
<li class="">A table whose schema wasn't in the initial snapshot fails with a missing schema error. The documented fix starts with removing the schema history topic and clearing Kafka Connect offsets, and the <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say removing offsets should be done only by advanced users.</li>
<li class="">The <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say it doesn't support schema changes while an incremental snapshot is running, and changing a primary key during one can cause incorrect results.</li>
<li class="">Incremental snapshots need the connector to have permission to write to the signaling table (<a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class=""><code>tasks.max</code> defaults to 1, and the <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say it can be raised to at most the number of entries in <code>database.names</code>.</li>
</ul>
<p><strong>What users say:</strong> One Hacker News commenter found "dealing with the kafka connect errors and fixing replication slots... ehhh was painful" (<a href="https://news.ycombinator.com/item?id=48956680" target="_blank" rel="noopener noreferrer" class="">Hacker News, launch thread for the Ingestr CDC tool, July 2026</a>).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="managed-or-vendor-run">Managed or vendor-run<a href="https://olake.io/compare/sql-server-cdc-tools/#managed-or-vendor-run" class="hash-link" aria-label="Direct link to Managed or vendor-run" title="Direct link to Managed or vendor-run" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-fivetran-best-for-teams-that-want-a-vendor-to-run-sql-server-loads">3. Fivetran: best for teams that want a vendor to run SQL Server loads<a href="https://olake.io/compare/sql-server-cdc-tools/#3-fivetran-best-for-teams-that-want-a-vendor-to-run-sql-server-loads" class="hash-link" aria-label="Direct link to 3. Fivetran: best for teams that want a vendor to run SQL Server loads" title="Direct link to 3. Fivetran: best for teams that want a vendor to run SQL Server loads" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-fivetran.webp" alt="Fivetran home page showing its headline and main navigation" width="1600" height="826" class="img_ev3q"></p>
<p><em>Fivetran home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: change tracking, CDC, Binary Log Reader or Teleport Sync</li>
<li class="">Lands data in: warehouses; Apache Iceberg through its <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Managed Data Lake Service</a></li>
<li class="">Price: <a href="https://fivetran.com/docs/usage-based-pricing" target="_blank" rel="noopener noreferrer" class="">usage-based, billed on monthly active rows</a>, so the bill moves with how many rows change</li>
</ul>
<p>Fivetran's <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">SQL Server connector docs</a> list four ways to find changes. Teleport Sync is the odd one out, because it skips SQL Server's change features and instead scans tables and compares row hashes between syncs. If a table has both change tracking and CDC on, Fivetran uses CDC.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a> list four SQL Server methods and point to Teleport Sync when change tracking or CDC can't be enabled.</li>
<li class="">Its <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">connector docs</a> cover SQL Server 2012 to 2025, with Binary Log Reader on 2016 to 2025 only.</li>
<li class="">Its <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a> say CDC data can be read from secondary replicas in an Always On availability group, but SQL Server doesn't allow CDC setup on a secondary, so all CDC setup happens on the primary node.</li>
<li class="">With CDC, its <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a> say column type changes propagate automatically, and extra permissions let CDC track DDL changes without re-syncing the modified table.</li>
<li class="">For change tracking, its <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a> say Fivetran detects when it couldn't process changes before they were deleted from the change table and triggers a re-sync of that table.</li>
<li class="">Its <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a> say it supports the SaaS and Hybrid deployment models for all SQL Server implementations, and Hybrid needs an Enterprise or Business Critical plan.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">With CDC, Fivetran syncs only tables with a single capture instance, so a new column means a new instance and removing the old one (<a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">Change tracking can't sync tables without a primary key or run on a replica (<a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">With CDC, its <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a> say column type changes propagate but renamed columns, new tables and new columns do not.</li>
<li class="">Iceberg goes through <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Managed Data Lake Service</a>, a separate destination whose docs say it supports the SaaS deployment model.</li>
<li class="">That page also says Fivetran doesn't support position deletes for Iceberg tables, and on AWS the Glue catalog supports only one table per combination of schema and table names within a Region.</li>
<li class="">Under <a href="https://fivetran.com/docs/usage-based-pricing" target="_blank" rel="noopener noreferrer" class="">usage-based pricing</a>, rollback syncs may fetch data from the previous month, and those past records count as new unique records toward monthly active rows for the current month.</li>
</ul>
<p><strong>What users say:</strong> A <a href="https://news.ycombinator.com/item?id=45568842" target="_blank" rel="noopener noreferrer" class="">Hacker News commenter</a> (thread on the Fivetran and dbt Labs merger, October 2025) says "Fivetran is convenient but absurdly expensive."</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-airbyte-best-for-open-source-sql-server-loads-on-a-schedule">4. Airbyte: best for open-source SQL Server loads on a schedule<a href="https://olake.io/compare/sql-server-cdc-tools/#4-airbyte-best-for-open-source-sql-server-loads-on-a-schedule" class="hash-link" aria-label="Direct link to 4. Airbyte: best for open-source SQL Server loads on a schedule" title="Direct link to 4. Airbyte: best for open-source SQL Server loads on a schedule" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-airbyte.webp" alt="Airbyte home page showing its headline and main navigation" width="1600" height="910" class="img_ev3q"></p>
<p><em>Airbyte home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: CDC, in scheduled syncs</li>
<li class="">Lands data in: warehouses and lakes; Apache Iceberg on S3 through its <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake destination</a></li>
<li class="">Price: <a href="https://airbyte.com/why-open-source" target="_blank" rel="noopener noreferrer" class="">Core is free, Cloud is paid</a></li>
</ul>
<p><a href="https://docs.airbyte.com/integrations/sources/mssql" target="_blank" rel="noopener noreferrer" class="">Airbyte's SQL Server docs</a> say the connector uses SQL Server CDC with the transaction log, and CDC setup needs db_owner rights. Its CDC sync runs on a schedule, and <a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">Airbyte's CDC docs</a> say it doesn't treat CDC sources as infinite streaming sources.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Core is free to self-run, and <a href="https://airbyte.com/why-open-source" target="_blank" rel="noopener noreferrer" class="">Airbyte calls it open source</a> (its licence is Elastic License 2.0). Beside CDC, the connector also has full refresh and incremental modes.</li>
<li class="">Its <a href="https://docs.airbyte.com/integrations/sources/mssql" target="_blank" rel="noopener noreferrer" class="">SQL Server docs</a> say the certified connector offers CDC using SQL Server's own CDC feature, for SQL Server 2016 Service Pack 1 and later.</li>
<li class="">Its <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake docs</a> say the connector writes Iceberg tables to S3 or S3-compatible storage using a REST, AWS Glue, Nessie or Polaris catalog, and that deduping is merge-on-read.</li>
<li class="">The same <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake page</a> says it handles adding or removing a column, widening a column and changing the primary key. Because it never rewrites existing Iceberg data files, other schema changes are not handled.</li>
<li class="">For truncate refreshes the <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake connector</a> writes to a staging branch and swaps it in at the end, so queries read the old version until then. It keeps the staging branch after a failed sync so a retry can recover.</li>
<li class="">Its <a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">CDC docs</a> say Airbyte adds metadata columns that begin with <code>_ab_cdc_</code> for CDC sources.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Incremental CDC needs a primary key, so tables without one get full refresh only (<a href="https://docs.airbyte.com/integrations/sources/mssql" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">Delivery is at least once (<a href="https://docs.airbyte.com/integrations/sources/mssql" target="_blank" rel="noopener noreferrer" class="">docs</a>). CDC can't be enabled on tables with a clustered columnstore index (a storage layout built for analytics), and <code>hierarchyid</code> and <code>sql_variant</code> are not processed.</li>
<li class="">Its <a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">CDC docs</a> say changes made by TRUNCATE or ALTER will not appear in the logs and so not in the destination, and a refresh is required after any new table is added to a CDC connection.</li>
<li class="">CDC syncs launch on a sync interval and read the logs up to the sync's start time (<a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">CDC docs</a>). The first CDC sync takes a snapshot with a SELECT statement, which is effectively a full refresh.</li>
<li class="">On the <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake page</a>, a Number-type primary key is stored as an Iceberg string, so ordering on it is lexicographic, and objects and unions are written as JSON strings.</li>
<li class="">The same page cautions that if compaction runs at the same time as a truncate refresh sync, it deletes files from the current generation and causes data loss. It does not say who handles compaction.</li>
</ul>
<p><strong>What users say:</strong> A <a href="https://github.com/airbytehq/airbyte/issues/73706" target="_blank" rel="noopener noreferrer" class="">GitHub issue</a> from February 2026 (since closed) says a connector update broke SQL Server CDC on Azure SQL geo-replicas for connections "running successfully for many months".</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-estuary-best-when-you-need-to-choose-between-cdc-and-change-tracking">5. Estuary: best when you need to choose between CDC and change tracking<a href="https://olake.io/compare/sql-server-cdc-tools/#5-estuary-best-when-you-need-to-choose-between-cdc-and-change-tracking" class="hash-link" aria-label="Direct link to 5. Estuary: best when you need to choose between CDC and change tracking" title="Direct link to 5. Estuary: best when you need to choose between CDC and change tracking" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-estuary.webp" alt="Estuary Flow home page showing its headline and main navigation" width="1600" height="937" class="img_ev3q"></p>
<p><em>Estuary Flow home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: three connectors, CDC, change tracking or batch</li>
<li class="">Lands data in: the destinations you choose, such as warehouses and lakes</li>
<li class="">Price: not covered here</li>
</ul>
<p>Estuary's <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">SQL Server docs</a> include a table of its three connectors. CDC is log-based and real time, and it handles tables without a primary key. Change tracking is real time too, stores only primary keys, and can capture computed columns, which CDC can't.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a> set out the CDC versus change tracking tradeoff in a table, and say to use the batch connector for views or custom queries.</li>
<li class="">The <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a> list three SQL Server connectors plus variants for Azure SQL Database, Amazon RDS and Google Cloud SQL, with setup steps for each platform. They say it is regularly tested against SQL Server 2017 and up.</li>
<li class="">The <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a> describe the CDC connector as log-based and real time, suited to full audit history and to tables without a primary key, but for those tables you set a key by hand in the collection definition.</li>
<li class="">Change tracking is real time too, stores only primary keys for lower storage overhead on the source, and can capture computed columns, which CDC can't (<a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">After a schema change, its <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a> say the connector detects a second capture instance and switches over once both are valid. An optional "Automatic Capture Instance Management" setting manages the instances for you.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">CDC can read a replica, but the CDC worker must run on the primary. Change tracking doesn't support read replicas (<a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">The batch connector polls, so expect latency of minutes to hours (<a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">Its <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a> say a captured table should have a primary key, and without one you must specify a key manually in the Estuary collection definition.</li>
<li class="">The <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a> say CDC cannot capture computed columns or computed primary keys, and change tracking may combine intermediate changes that happen in rapid succession.</li>
<li class="">Automatic Capture Instance Management needs additional permissions (<a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">Private and BYOC deployments need an annual plan and add fees based on the cloud infrastructure required. Its <a href="https://docs.estuary.dev/getting-started/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing docs</a> publish no figure for those fees.</li>
</ul>
<p><strong>What users say:</strong> A G2 reviewer, seen on <a href="https://aws.amazon.com/marketplace/reviews/reviews-list/prodview-2yad6rs5mph44" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a> (August 2026), says "The logs are also pretty noisy and hard to follow, especially when I'm troubleshooting."</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="enterprise-platforms">Enterprise platforms<a href="https://olake.io/compare/sql-server-cdc-tools/#enterprise-platforms" class="hash-link" aria-label="Direct link to Enterprise platforms" title="Direct link to Enterprise platforms" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-olake-go-best-for-sql-server-changes-into-iceberg-or-parquet-on-your-own-storage">6. OLake Go: best for SQL Server changes into Iceberg or Parquet on your own storage<a href="https://olake.io/compare/sql-server-cdc-tools/#6-olake-go-best-for-sql-server-changes-into-iceberg-or-parquet-on-your-own-storage" class="hash-link" aria-label="Direct link to 6. OLake Go: best for SQL Server changes into Iceberg or Parquet on your own storage" title="Direct link to 6. OLake Go: best for SQL Server changes into Iceberg or Parquet on your own storage" translate="no">​</a></h4>
<img src="https://olake.io/img/logo/olake-blue-with-text.svg" alt="OLake" height="32" style="display:block;margin:2px 0 14px">
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-olake.webp" alt="OLake home page showing its headline and main navigation" width="1600" height="957" class="img_ev3q"></p>
<p><em>OLake home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: CDC capture instances, <a class="" href="https://olake.io/docs/connectors/mssql/">SQL Server 2017 or later</a></li>
<li class="">Lands data in: Apache Iceberg or Parquet only</li>
<li class="">Price: free licence, you pay for servers and staff</li>
</ul>
<p>OLake Go is <a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="">open source under Apache 2.0</a> and reads SQL Server in four sync modes: full refresh, full refresh plus CDC, CDC only, and full refresh plus incremental (see the <a class="" href="https://olake.io/docs/connectors/mssql/">SQL Server connector guide</a>).</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">The <a class="" href="https://olake.io/docs/connectors/mssql/">SQL Server connector guide</a> lists parallel chunking, checkpointing and automatic resume for failed full loads. An optional <code>VIEW DATABASE STATE</code> grant (<code>VIEW DATABASE PERFORMANCE STATE</code> on SQL Server 2022 or later) gives faster chunking for tables without a primary key.</li>
<li class="">A "Manage Capture Instance" option creates new capture instances when schemas change, if the user has <code>db_owner</code> (see the <a class="" href="https://olake.io/docs/connectors/mssql/">guide</a>).</li>
<li class="">It can read from a read-only secondary replica with <code>ApplicationIntent=ReadOnly</code>, while CDC stays enabled on the primary. With Manage Capture Instance on, it asks for the primary's credentials so it can manage capture instances there (see the <a class="" href="https://olake.io/docs/connectors/mssql/">guide</a>).</li>
<li class="">It writes Iceberg tables to eleven catalog types, such as AWS Glue, REST, Polaris, Nessie and Unity (see the <a class="" href="https://olake.io/docs/understanding/compatibility-catalogs/">catalogs page</a>), or Parquet files if you prefer.</li>
<li class="">For Iceberg, a two-phase commit tracks per-chunk commit status in destination state, covering full refresh, incremental and CDC for MSSQL, to avoid inconsistencies and duplicate writes (see the <a class="" href="https://olake.io/docs/release/ingestion/v0.5.0/">v0.5.0 release notes</a>).</li>
<li class="">The <a class="" href="https://olake.io/docs/connectors/mssql/">guide</a> gives the CDC enable commands for Amazon RDS and Google Cloud SQL, and the source supports SSL modes and SSH tunnels.</li>
</ul>
<p><strong>Good to know</strong></p>
<ul>
<li class="">OLake Go is built for Iceberg and Parquet output, and you run it on your own infrastructure.</li>
<li class="">Keep it reading inside the three-day change table window. Computed columns come through as <code>NULL</code>, and a clustered columnstore index blocks CDC, as it does in SQL Server itself.</li>
</ul>
<p><strong>Bottom line:</strong> Pick it if you want SQL Server changes in Iceberg tables on storage you own and can run a container. Snowflake, BigQuery and Redshift can still query the Iceberg tables it writes, depending on the catalog (see the <a class="" href="https://olake.io/docs/understanding/compatibility-engines/">compatibility page</a>).</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-qlik-replicate-best-for-large-mixed-estates-with-an-existing-qlik-contract">7. Qlik Replicate: best for large mixed estates with an existing Qlik contract<a href="https://olake.io/compare/sql-server-cdc-tools/#7-qlik-replicate-best-for-large-mixed-estates-with-an-existing-qlik-contract" class="hash-link" aria-label="Direct link to 7. Qlik Replicate: best for large mixed estates with an existing Qlik contract" title="Direct link to 7. Qlik Replicate: best for large mixed estates with an existing Qlik contract" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-qlik-replicate.webp" alt="Qlik Replicate / Qlik Talend Cloud home page showing its headline and main navigation" width="1600" height="870" class="img_ev3q"></p>
<p><em>Qlik Replicate / Qlik Talend Cloud home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: two source connection types (endpoints), a standard SQL Server endpoint and an MS-CDC endpoint</li>
<li class="">Lands data in: the targets Qlik supports, listed in its support matrix</li>
<li class="">Price: <a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">not published</a></li>
</ul>
<p><strong>What's good</strong></p>
<ul>
<li class="">Qlik's <a href="https://help.qlik.com/en-US/replicate/May2026/Content/Replicate/Main/MicrosoftSQLServer-MSCDC/MicrosoftSQLServer-MSCDC-landing.htm" target="_blank" rel="noopener noreferrer" class="">MS-CDC endpoint docs</a> say it reads Microsoft change tables instead of the log, which Qlik says lowers the risk of data loss from short log retention or unreachable log backups.</li>
<li class="">The replication task <a href="https://help.qlik.com/en-US/replicate/May2026/Content/Replicate/Main/MicrosoftSQLServer-MSCDC/MicrosoftSQLServer-MSCDC-prerequisites.htm" target="_blank" rel="noopener noreferrer" class="">turns on MS-CDC for the source tables</a> for you, unless you'd rather do it by hand.</li>
<li class="">The same endpoint can also be used to replicate from an Amazon RDS for SQL Server source, per the <a href="https://help.qlik.com/en-US/replicate/May2026/Content/Replicate/Main/MicrosoftSQLServer-MSCDC/MicrosoftSQLServer-MSCDC-landing.htm" target="_blank" rel="noopener noreferrer" class="">endpoint docs</a>.</li>
<li class="">Its <a href="https://help.qlik.com/en-US/replicate/May2026/Content/Replicate/Main/MicrosoftSQLServer-MSCDC/MicrosoftSQLServer-MSCDC-prerequisites.htm" target="_blank" rel="noopener noreferrer" class="">prerequisites page</a> points to <code>sys.sp_cdc_change_job</code> and a small <code>@pollinginterval</code> value to reduce latency.</li>
<li class="">Qlik's <a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists "Qlik Open Lakehouse with ingestion and adaptive optimization for Apache Iceberg" in the Standard edition of Qlik Talend Cloud.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Prices aren't published, and the product is <a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">client-managed software</a>, so you run the server.</li>
<li class="">The <a href="https://help.qlik.com/en-US/replicate/May2026/Content/Replicate/Main/MicrosoftSQLServer-MSCDC/MicrosoftSQLServer-MSCDC-prerequisites.htm" target="_blank" rel="noopener noreferrer" class="">prerequisites page</a> says the CT table names must use the default <code>&lt;SchemaName&gt;_&lt;TableName&gt;_CT</code> format and the CT table must include the listed columns.</li>
<li class="">The MS-CDC capture and cleanup jobs must be running (<a href="https://help.qlik.com/en-US/replicate/May2026/Content/Replicate/Main/MicrosoftSQLServer-MSCDC/MicrosoftSQLServer-MSCDC-prerequisites.htm" target="_blank" rel="noopener noreferrer" class="">prerequisites</a>).</li>
<li class="">Microsoft ODBC Driver 18.5 must be installed on the Replicate machine, on Windows or Linux (<a href="https://help.qlik.com/en-US/replicate/May2026/Content/Replicate/Main/MicrosoftSQLServer-MSCDC/MicrosoftSQLServer-MSCDC-prerequisites.htm" target="_blank" rel="noopener noreferrer" class="">prerequisites</a>).</li>
<li class="">On the <a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>, log-based CDC first appears in the Standard edition list for Qlik Talend Cloud, not in Starter.</li>
</ul>
<p><strong>What users say:</strong> One <a href="https://www.peerspot.com/products/qlik-replicate-reviews" target="_blank" rel="noopener noreferrer" class="">PeerSpot</a> reviewer (May 2024) finds it "too costly for small businesses".</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-striim-best-for-log-backup-reading-and-low-load-on-the-source">8. Striim: best for log-backup reading and low load on the source<a href="https://olake.io/compare/sql-server-cdc-tools/#8-striim-best-for-log-backup-reading-and-low-load-on-the-source" class="hash-link" aria-label="Direct link to 8. Striim: best for log-backup reading and low load on the source" title="Direct link to 8. Striim: best for log-backup reading and low load on the source" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-striim.webp" alt="Striim home page showing its headline and main navigation" width="1600" height="939" class="img_ev3q"></p>
<p><em>Striim home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: MS SQL Reader (CDC tables) or MSJet (log backups)</li>
<li class="">Lands data in: many targets; Iceberg on <a href="https://www.striim.com/docs/en/iceberg-writer.html" target="_blank" rel="noopener noreferrer" class="">Google Cloud Storage</a> or <a href="https://www.striim.com/docs/en/s3-tables-writer.html" target="_blank" rel="noopener noreferrer" class="">S3 Tables</a></li>
<li class="">Price: <a href="https://www.striim.com/pricing/" target="_blank" rel="noopener noreferrer" class="">contact sales, with a Developer tier</a></li>
</ul>
<p><a href="https://www.striim.com/docs/en/sql-server-cdc.html" target="_blank" rel="noopener noreferrer" class="">Striim's SQL Server page</a> says MSJet has higher throughput and lower use of the source server's compute, memory and disk than MS SQL Reader (Striim's claim, which we did not test). MS SQL Reader supports older SQL Server versions and more cloud SQL databases.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">You can pick the reader per source: MS SQL Reader for CDC tables, or MSJet for log backups (<a href="https://www.striim.com/docs/en/sql-server-cdc.html" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">Its <a href="https://www.striim.com/docs/en/iceberg-writer.html" target="_blank" rel="noopener noreferrer" class="">Iceberg Writer docs</a> list two write modes, Merge and Append Only, and say it propagates DDL changes from supported sources to the Iceberg tables.</li>
<li class="">Its <a href="https://www.striim.com/docs/en/s3-tables-writer.html" target="_blank" rel="noopener noreferrer" class="">S3 Tables Writer docs</a> list APPENDONLY and MERGE modes, with an Optimized Merge option for partial-image CDC, and DDL propagation for supported source operations.</li>
<li class="">The <a href="https://www.striim.com/docs/en/sql-server-cdc.html" target="_blank" rel="noopener noreferrer" class="">SQL Server docs</a> say Striim provides wizards for creating applications that read from SQL Server and write to various targets.</li>
<li class="">Its <a href="https://www.striim.com/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists a self-managed Striim Platform with clustered deployments with HA, and Striim Cloud with dedicated compute and networking.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">MSJet reads log backups on disk, and the <a href="https://www.striim.com/docs/en/sql-server-cdc.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say backups on tape, virtual devices, mirror backups or Azure Storage aren't supported.</li>
<li class="">Its <a href="https://www.striim.com/docs/en/iceberg-writer.html" target="_blank" rel="noopener noreferrer" class="">Iceberg Writer</a> is Google Cloud Storage only; <a href="https://www.striim.com/docs/en/s3-tables-writer.html" target="_blank" rel="noopener noreferrer" class="">S3 Tables</a> has its own writer.</li>
<li class="">The Iceberg Writer needs a compute engine and a catalog: Google Cloud Managed Service for Apache Spark and a Lakehouse, Nessie or Polaris catalog (<a href="https://www.striim.com/docs/en/iceberg-writer.html" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">With the Iceberg Writer, partitioned tables need manual table creation, and time source data types are written as strings (<a href="https://www.striim.com/docs/en/iceberg-writer.html" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">The <a href="https://www.striim.com/docs/en/s3-tables-writer.html" target="_blank" rel="noopener noreferrer" class="">S3 Tables Writer</a> uses Amazon EMR as the compute engine, and S3 Tables requires lowercase table, namespace and column names, which breaks wildcard mappings against uppercase-identifier sources.</li>
<li class="">Both Iceberg writers recover on restart with at-least-once processing (<a href="https://www.striim.com/docs/en/iceberg-writer.html" target="_blank" rel="noopener noreferrer" class="">Iceberg Writer</a>, <a href="https://www.striim.com/docs/en/s3-tables-writer.html" target="_blank" rel="noopener noreferrer" class="">S3 Tables Writer</a>).</li>
</ul>
<p><strong>What users say:</strong> A <a href="https://www.peerspot.com/products/striim-reviews" target="_blank" rel="noopener noreferrer" class="">PeerSpot</a> reviewer (August 2026) says "Striim would not intuitively tell me the culprit table or database behind the lag."</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cloud-services">Cloud services<a href="https://olake.io/compare/sql-server-cdc-tools/#cloud-services" class="hash-link" aria-label="Direct link to Cloud services" title="Direct link to Cloud services" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="9-aws-database-migration-service-dms-best-for-aws-centered-teams">9. AWS Database Migration Service (DMS): best for AWS-centered teams<a href="https://olake.io/compare/sql-server-cdc-tools/#9-aws-database-migration-service-dms-best-for-aws-centered-teams" class="hash-link" aria-label="Direct link to 9. AWS Database Migration Service (DMS): best for AWS-centered teams" title="Direct link to 9. AWS Database Migration Service (DMS): best for AWS-centered teams" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-aws-dms.webp" alt="AWS DMS home page showing its headline and main navigation" width="1600" height="770" class="img_ev3q"></p>
<p><em>AWS DMS home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: MS-Replication and MS-CDC</li>
<li class="">Lands data in: AWS stores such as S3 files; Apache Iceberg is not in its <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html" target="_blank" rel="noopener noreferrer" class="">target list</a></li>
<li class="">Price: not covered here</li>
</ul>
<p>DMS uses two methods, per its <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.CDC.html" target="_blank" rel="noopener noreferrer" class="">SQL Server CDC docs</a>. On a self-managed server, it uses MS-Replication for tables with primary keys and MS-CDC for tables without. Amazon Relational Database Service (RDS) for SQL Server doesn't support MS-Replication, so DMS uses MS-CDC for all tables there.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">AWS operates it, and the <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.CDC.html" target="_blank" rel="noopener noreferrer" class="">docs</a> cover set-up with and without the sysadmin role.</li>
<li class="">Its <a href="https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html" target="_blank" rel="noopener noreferrer" class="">overview</a> says you can run one-time migrations or replicate ongoing changes to keep sources and targets in sync.</li>
<li class="">DMS version 3.4.7 and later can set up MS-CDC for the database and all tables automatically, if you are not using a read-only replica (<a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.CDC.html" target="_blank" rel="noopener noreferrer" class="">CDC docs</a>).</li>
<li class="">Version 3.5.3 adds reading from log backups of Amazon RDS for SQL Server, per the <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.CDC.html" target="_blank" rel="noopener noreferrer" class="">CDC docs</a>, and Kerberos authentication for SQL Server sources, per the <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html" target="_blank" rel="noopener noreferrer" class="">source docs</a>.</li>
<li class="">The <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html" target="_blank" rel="noopener noreferrer" class="">source docs</a> say it supports named instances of SQL Server and can use SSL between the endpoint and the replication instance.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">It has no Iceberg target in its <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html" target="_blank" rel="noopener noreferrer" class="">target list</a>, so you add a second step to build Iceberg tables from the S3 files.</li>
<li class="">Self-managed sources need a distribution database for MS-Replication (<a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.CDC.html" target="_blank" rel="noopener noreferrer" class="">docs</a>). That's extra set-up work.</li>
<li class="">The <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html" target="_blank" rel="noopener noreferrer" class="">source docs</a> say columnstore indexes, memory-optimized tables, temporal tables, sparse columns and column-level encryption are not supported, and neither is replication from databases with accelerated database recovery (ADR) turned on.</li>
<li class="">Per the <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html" target="_blank" rel="noopener noreferrer" class="">source docs</a>, changes to computed fields aren't replicated, truncate commands aren't captured, and renaming tables or columns with <code>sp_rename</code> isn't supported.</li>
<li class="">If the database is set up for neither MS-Replication nor MS-CDC, <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html" target="_blank" rel="noopener noreferrer" class="">per AWS</a>, tables without a primary key capture only INSERT and DELETE events; UPDATE and TRUNCATE events are ignored.</li>
<li class="">The <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html" target="_blank" rel="noopener noreferrer" class="">source docs</a> say you may lose events if SQL Server archives them from the active transaction log to the backup log, or truncates them from it.</li>
</ul>
<p><strong>What users say:</strong> A <a href="https://www.peerspot.com/products/aws-database-migration-service-reviews" target="_blank" rel="noopener noreferrer" class="">PeerSpot</a> reviewer (September 2024) says "the error messages from DMS are very ambiguous and sometimes misleading."</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="10-google-cloud-datastream-best-for-google-cloud-teams-that-want-bigquery-or-cloud-storage">10. Google Cloud Datastream: best for Google Cloud teams that want BigQuery or Cloud Storage<a href="https://olake.io/compare/sql-server-cdc-tools/#10-google-cloud-datastream-best-for-google-cloud-teams-that-want-bigquery-or-cloud-storage" class="hash-link" aria-label="Direct link to 10. Google Cloud Datastream: best for Google Cloud teams that want BigQuery or Cloud Storage" title="Direct link to 10. Google Cloud Datastream: best for Google Cloud teams that want BigQuery or Cloud Storage" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-google-datastream.webp" alt="Google Datastream home page showing its headline and main navigation" width="1600" height="1082" class="img_ev3q"></p>
<p><em>Google Datastream home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: change tables or transaction logs, your choice per stream</li>
<li class="">Lands data in: BigQuery, Cloud Storage, and <a href="https://docs.cloud.google.com/datastream/docs/destination-blmt" target="_blank" rel="noopener noreferrer" class="">Apache Iceberg tables in BigQuery</a>, with the data in your own buckets</li>
<li class="">Price: not covered here</li>
</ul>
<p><a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">Datastream's SQL Server page</a> lists self-managed servers (Enterprise 2008 and later, Standard 2016 Service Pack 1 and later), Amazon RDS, Cloud SQL and Azure SQL Database. For Cloud SQL, Express is not supported.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Datastream <a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">documents two methods per stream</a>. Change tables have fewer limits and no risk that log truncation fails a stream for good, at lower throughput, while the transaction logs method is faster and needs fewer resources.</li>
<li class="">The <a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">docs</a> say the change tables method supports replication of encrypted tables, which the transaction logs method does not (it can't handle Transparent Data Encryption).</li>
<li class="">With the <code>enable_ddl_support_for_ct</code> label, Datastream <a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">checks</a> <code>cdc.ddl_history</code> every five minutes and, when a column is added, creates a new capture instance, reads the old one up to the change, then reads the new one. You still delete the original instance afterwards, since SQL Server allows two per table.</li>
<li class="">Datastream <a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">replicates user-defined data types</a>, but stores the base data type they derive from in the destination.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The transaction logs method doesn't support Transparent Data Encryption or column-level encryption (that data becomes <code>NULL</code>), and doesn't replicate columns added after a stream is created (<a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class=""><a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">Streams are limited</a> to 10,000 tables, and a table with more than 500 million rows can't be backfilled unless it has a unique index with no nullable columns, all included in the stream.</li>
<li class="">Its <a href="https://docs.cloud.google.com/datastream/docs/destination-blmt" target="_blank" rel="noopener noreferrer" class="">Iceberg tables in BigQuery</a> are append-only, and the page does not mention Amazon S3.</li>
<li class=""><code>SQL_VARIANT</code>, <code>HIERARCHYID</code>, <code>GEOMETRY</code> and <code>GEOGRAPHY</code> columns aren't replicated (<a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">Databases with delayed durability or accelerated database recovery (ADR) enabled aren't supported, and neither is Windows Active Directory authentication (<a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">With the change tables method, dropping a column replaces its data with <code>NULL</code>, and renaming columns isn't supported when CDC is enabled (<a href="https://docs.cloud.google.com/datastream/docs/sources-sqlserver" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/datastream-sql-server-source-methods.webp" alt="Google Datastream SQL Server source page describing the change tables CDC method and how it differs from transaction logs" width="1600" height="1133" class="img_ev3q"></p>
<p><em>Google Cloud Datastream, SQL Server source behavior, October 2026.</em></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="11-microsoft-fabric-mirroring-best-for-teams-whose-target-is-microsoft-fabric">11. Microsoft Fabric mirroring: best for teams whose target is Microsoft Fabric<a href="https://olake.io/compare/sql-server-cdc-tools/#11-microsoft-fabric-mirroring-best-for-teams-whose-target-is-microsoft-fabric" class="hash-link" aria-label="Direct link to 11. Microsoft Fabric mirroring: best for teams whose target is Microsoft Fabric" title="Direct link to 11. Microsoft Fabric mirroring: best for teams whose target is Microsoft Fabric" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-microsoft-fabric-mirroring.webp" alt="Microsoft Fabric home page showing its headline and main navigation" width="1600" height="813" class="img_ev3q"></p>
<p><em>Microsoft Fabric home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Reads SQL Server through: CDC (SQL Server 2016 to 2022) or change feed (2025)</li>
<li class="">Lands data in: Microsoft Fabric OneLake</li>
<li class="">Price: replication compute is <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server" target="_blank" rel="noopener noreferrer" class="">free, per Microsoft</a>; queries use Fabric capacity, so check what that costs you</li>
</ul>
<p>Fabric mirroring copies a SQL Server database into Fabric. Data lands in OneLake as Delta tables, which Microsoft says now include <a href="https://learn.microsoft.com/en-us/fabric/onelake/onelake-iceberg-tables" target="_blank" rel="noopener noreferrer" class="">virtual Iceberg metadata</a>. Microsoft's <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server-limitations" target="_blank" rel="noopener noreferrer" class="">limits page</a> says mirroring of SQL Server 2016 to 2022 requires CDC, while <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server" target="_blank" rel="noopener noreferrer" class="">SQL Server 2025 uses a different change feed</a>.</p>
<p><strong>What's good</strong></p>
<ul>
<li class=""><a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft's docs</a> say that for SQL Server 2016 to 2022 it reuses CDC if it's already on, or can set it up.</li>
<li class="">The <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server" target="_blank" rel="noopener noreferrer" class="">mirroring page</a> lists SQL Server on Windows (Standard, Enterprise and Developer), Linux from 2017 CU18, and instances hosted on-premises, on an Azure VM or on non-Azure clouds for 2016 to 2022.</li>
<li class="">Each mirrored database gets an autogenerated SQL analytics endpoint, a read-only copy you can query with T-SQL (<a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">To mirror a server behind a firewall, the <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server" target="_blank" rel="noopener noreferrer" class="">docs</a> say to set up an on-premises data gateway or a virtual network data gateway.</li>
<li class="">If CDC isn't on, the <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server-limitations" target="_blank" rel="noopener noreferrer" class="">limits page</a> says the tutorial makes <code>fabric_login</code> a temporary member of the sysadmin server role to configure it.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Microsoft says you can't mirror a SQL Server 2025 database that has CDC enabled (<a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server-limitations" target="_blank" rel="noopener noreferrer" class="">limits page</a>). SQL Server 2025 mirroring also <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server" target="_blank" rel="noopener noreferrer" class="">needs Azure Arc</a> and isn't supported on Linux or on an Azure VM.</li>
<li class="">A schema change breaks mirroring on 2016 to 2022 until you re-enable CDC for the table, and it restarts a full snapshot on 2025 (<a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server-limitations" target="_blank" rel="noopener noreferrer" class="">limits page</a>).</li>
<li class="">Per the <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server-limitations" target="_blank" rel="noopener noreferrer" class="">limits page</a>, mirroring works only on a primary database of an availability group, doesn't support a failover cluster instance, and can't mirror a database already mirrored in another Fabric workspace.</li>
<li class="">You can mirror up to 1,000 tables, and the <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server-limitations" target="_blank" rel="noopener noreferrer" class="">limits page</a> says tables above that are not replicated.</li>
<li class="">On the <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server-limitations" target="_blank" rel="noopener noreferrer" class="">limits page</a>, clustered columnstore indexes aren't supported, tables using temporal history, Always Encrypted, in-memory, graph or external features can't be mirrored, and LOB columns over 1 MB are truncated to 1 MB.</li>
<li class="">Active transactions hold log truncation until the mirror catches up, and <a href="https://learn.microsoft.com/en-us/fabric/mirroring/sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> to monitor the source transaction log so it doesn't fill.</li>
</ul>
<p><strong>What users say:</strong> A SQL Server blogger notes that "a process that reads the log file every 5 seconds" feeds the mirror (<a href="https://sqlreitse.com/2026/04/10/mirroring-sql-server-2025-to-microsoft-fabric-a-level-deeper/" target="_blank" rel="noopener noreferrer" class="">sqlreitse.com, April 2026</a>), while another warns "Active transactions hold log truncation until the mirrored database catches up" (<a href="https://www.sqlfingers.com/2026/02/fabric-in-practice-sql-server-near-real.html" target="_blank" rel="noopener noreferrer" class="">sqlfingers.com, February 2026</a>).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-actually-breaks-sql-server-cdc">What actually breaks SQL Server CDC<a href="https://olake.io/compare/sql-server-cdc-tools/#what-actually-breaks-sql-server-cdc" class="hash-link" aria-label="Direct link to What actually breaks SQL Server CDC" title="Direct link to What actually breaks SQL Server CDC" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/sql-server-cdc-tools-how-it-breaks.webp" alt="Native SQL Server CDC flows from an Agent job to change tables to your tool, and failures break it" width="1600" height="720" class="img_ev3q"></p>
<p>The diagram shows the three failures that stop a pipeline outright. A fourth, large columns, corrupts data quietly (we counted no real incidents, only what the docs say).</p>
<p><strong>The Agent stops.</strong> <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> both capture methods need SQL Server Agent running. No Agent, no changes.</p>
<p><strong>The tool is down longer than retention.</strong> The default is three days, which sounds fine until a long weekend. <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">Fivetran's docs</a> recommend seven days and, for change tracking, say it triggers a re-sync of a table when changes were deleted before it could process them. <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> a request for a range outside the valid window fails or can miss data.</p>
<p><strong>A column is added.</strong> <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> new columns are ignored unless you create a second capture instance. A dropped column gets <code>NULL</code> (no value). At most two capture instances per table are allowed.</p>
<p><strong>Large columns come through empty.</strong> <a href="https://learn.microsoft.com/en-us/sql/relational-databases/system-tables/cdc-capture-instance-ct-transact-sql" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> <code>varchar(max)</code>, <code>nvarchar(max)</code> and <code>varbinary(max)</code> columns are NULL on update rows unless the column changed in that update. Columns of type <code>text</code>, <code>image</code> and <code>ntext</code> are NULL on delete and update rows. A loader that treats NULL as "set to empty" will overwrite good data.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-schema-change-step-by-step">A schema change, step by step<a href="https://olake.io/compare/sql-server-cdc-tools/#a-schema-change-step-by-step" class="hash-link" aria-label="Direct link to A schema change, step by step" title="Direct link to A schema change, step by step" translate="no">​</a></h3>
<p>Microsoft's fix for a new column is a second capture instance, with a new name, that has the new shape.</p>
<div class="language-sql olake-code codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393939;--prism-background-color:#fafafa"><div class="olake-code__header"><span class="olake-code__lang">sql</span></div><div class="olake-code__body"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#393939;background-color:#fafafa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393939"><span class="token keyword" style="color:#193ae6">EXEC</span><span class="token plain"> sys</span><span class="token punctuation" style="color:#5d5d5d">.</span><span class="token plain">sp_cdc_enable_table </span><span class="token variable" style="color:#7a3ec8">@source_schema</span><span class="token plain"> </span><span class="token operator" style="color:#5d5d5d">=</span><span class="token plain"> </span><span class="token string" style="color:#1a7f4b">'dbo'</span><span class="token punctuation" style="color:#5d5d5d">,</span><span class="token plain"> </span><span class="token variable" style="color:#7a3ec8">@source_name</span><span class="token plain"> </span><span class="token operator" style="color:#5d5d5d">=</span><span class="token plain"> </span><span class="token string" style="color:#1a7f4b">'my_table'</span><span class="token punctuation" style="color:#5d5d5d">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393939"><span class="token plain">  </span><span class="token variable" style="color:#7a3ec8">@role_name</span><span class="token plain"> </span><span class="token operator" style="color:#5d5d5d">=</span><span class="token plain"> </span><span class="token string" style="color:#1a7f4b">'my_role'</span><span class="token punctuation" style="color:#5d5d5d">,</span><span class="token plain"> </span><span class="token variable" style="color:#7a3ec8">@capture_instance</span><span class="token plain"> </span><span class="token operator" style="color:#5d5d5d">=</span><span class="token plain"> </span><span class="token string" style="color:#1a7f4b">'dbo_my_table_v2'</span><span class="token punctuation" style="color:#5d5d5d">;</span><br></div></code></pre></div></div>
<p><strong>Tools that overlap instances.</strong> Estuary and OLake Go say they detect the second instance and switch when both are valid. Wait for your tool to confirm the switch before you delete the old instance.</p>
<p><strong>Tools that expect one instance.</strong> Fivetran only supports tables with a single capture instance, so <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">its docs</a> tell you to create the new instance and delete the old one. Its feature table adds that CDC tracks schema changes by re-syncing the modified table, unless you grant extra permissions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-check-to-run-before-every-restart">A check to run before every restart<a href="https://olake.io/compare/sql-server-cdc-tools/#a-check-to-run-before-every-restart" class="hash-link" aria-label="Direct link to A check to run before every restart" title="Direct link to A check to run before every restart" translate="no">​</a></h3>
<p><a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> the query functions fail if your range is outside the valid window, so compare your tool's saved position with the oldest and newest positions SQL Server still holds.</p>
<div class="language-sql olake-code codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393939;--prism-background-color:#fafafa"><div class="olake-code__header"><span class="olake-code__lang">sql</span></div><div class="olake-code__body"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#393939;background-color:#fafafa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393939"><span class="token keyword" style="color:#193ae6">SELECT</span><span class="token plain"> sys</span><span class="token punctuation" style="color:#5d5d5d">.</span><span class="token plain">fn_cdc_get_min_lsn</span><span class="token punctuation" style="color:#5d5d5d">(</span><span class="token string" style="color:#1a7f4b">'dbo_my_table'</span><span class="token punctuation" style="color:#5d5d5d">)</span><span class="token plain"> </span><span class="token keyword" style="color:#193ae6">AS</span><span class="token plain"> oldest_lsn</span><span class="token punctuation" style="color:#5d5d5d">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393939"><span class="token plain">       sys</span><span class="token punctuation" style="color:#5d5d5d">.</span><span class="token plain">fn_cdc_get_max_lsn</span><span class="token punctuation" style="color:#5d5d5d">(</span><span class="token punctuation" style="color:#5d5d5d">)</span><span class="token plain">               </span><span class="token keyword" style="color:#193ae6">AS</span><span class="token plain"> newest_lsn</span><span class="token punctuation" style="color:#5d5d5d">;</span><br></div></code></pre></div></div>
<p>Debezium keeps its position as an LSN in its <a href="https://debezium.io/documentation/reference/stable/connectors/sqlserver.html" target="_blank" rel="noopener noreferrer" class="">offsets</a>. If your saved position is older than <code>oldest_lsn</code>, cleanup has already removed changes you never read.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-worked-selection-case">A worked selection case<a href="https://olake.io/compare/sql-server-cdc-tools/#a-worked-selection-case" class="hash-link" aria-label="Direct link to A worked selection case" title="Direct link to A worked selection case" translate="no">​</a></h2>
<p>The case below is invented to show the method, and we tested no tool.</p>
<p>Suppose a SQL Server 2022 Standard edition server has 300 tables. Twenty have no primary key, two have a clustered columnstore index, and the target is Apache Iceberg on Amazon S3. Schemas change about monthly.</p>
<table><thead><tr><th>Requirement</th><th>Fits</th><th>Does not fit, and why</th></tr></thead><tbody><tr><td>Twenty tables without a key</td><td>Estuary CDC, AWS DMS (MS-CDC), Fivetran CDC</td><td>Airbyte CDC copies those tables by full refresh only; Fivetran change tracking skips them</td></tr><tr><td>Two columnstore tables</td><td>Fivetran Teleport Sync, which its docs point to when CDC can't be enabled</td><td>CDC tools for those two tables, since <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/change-data-capture-and-other-sql-server-features" target="_blank" rel="noopener noreferrer" class="">Microsoft says</a> CDC can't be enabled on a clustered columnstore index</td></tr><tr><td>Iceberg on S3</td><td>Fivetran Managed Data Lake Service, Airbyte S3 Data Lake, <img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>Datastream (Google Cloud Storage), Striim (Google Cloud Storage or Amazon S3 Tables, not plain S3), Fabric mirroring, AWS DMS without a second step</td></tr><tr><td>Monthly schema changes</td><td>Estuary and <img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go (switch to a second instance)</td><td>Fivetran needs a new capture instance each time</td></tr></tbody></table>
<p>No single tool covers every row, so each path needs a compromise.</p>
<p>Airbyte can do CDC for tables with keys and full refresh for the rest. OLake Go covers the ordinary tables with CDC and offers a full refresh mode too. Confirm how CDC treats the twenty keyless tables before you commit.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="so-which-tool-should-you-pick">So which tool should you pick?<a href="https://olake.io/compare/sql-server-cdc-tools/#so-which-tool-should-you-pick" class="hash-link" aria-label="Direct link to So which tool should you pick?" title="Direct link to So which tool should you pick?" translate="no">​</a></h2>
<p>If two rows fit, shortlist both and test them.</p>
<table><thead><tr><th>Your job</th><th>Look at</th></tr></thead><tbody><tr><td>Kafka is already your hub</td><td>Debezium</td></tr><tr><td>A vendor runs loads to a warehouse</td><td>Fivetran or Estuary</td></tr><tr><td>Self-run loads on a schedule</td><td>Airbyte</td></tr><tr><td>Lower load on a busy source (Striim's claim)</td><td>Striim with MSJet</td></tr><tr><td>Data goes to AWS stores, Google Cloud, or Fabric</td><td>AWS DMS, Datastream, or Fabric mirroring</td></tr><tr><td>You want to choose between change tables and log reading</td><td>Datastream or Qlik Replicate</td></tr><tr><td>Self-hosted Iceberg or Parquet files</td><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td></tr><tr><td>CDC is not allowed on the server</td><td>Fivetran Teleport Sync, or Estuary's batch connector (its docs say it polls)</td></tr></tbody></table>
<section class="root_PuUS" aria-labelledby="_R_1dtqfdbih_-h"><header><h3 id="_R_1dtqfdbih_-h" class="title_QNC9" tabindex="-1">Which SQL Server CDC tool fits you?</h3></header><div class="progress_EyIk" role="progressbar" aria-valuemin="1" aria-valuemax="6" aria-valuenow="1" aria-label="Quiz progress"><span style="width:0%"></span></div><p class="count_OugS">Question <!-- -->1<!-- --> of <!-- -->6</p><p id="_R_1dtqfdbih_-q" class="question_IKMS">Who should run the pipeline?</p><div role="radiogroup" aria-labelledby="_R_1dtqfdbih_-q" class="options_xbjx"><button type="button" role="radio" aria-checked="false" tabindex="0" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">A</span><span class="optLabel_qDTb">A vendor runs it for me</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">B</span><span class="optLabel_qDTb">My team runs it on our own servers</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">C</span><span class="optLabel_qDTb">Microsoft Fabric runs it for me</span></button></div><div class="actions_XZHX"><button type="button" class="primary_KVNI" disabled="">Next</button></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faq">FAQ<a href="https://olake.io/compare/sql-server-cdc-tools/#faq" class="hash-link" aria-label="Direct link to FAQ" title="Direct link to FAQ" translate="no">​</a></h2>
<div class="olake-faq"><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q1. What is SQL Server CDC?</span></summary><div class="olake-faq__answer">SQL Server's built-in way to record inserts, updates and deletes on a table, using Agent jobs that read the transaction log into change tables.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q2. Does SQL Server CDC need SQL Server Agent?</span></summary><div class="olake-faq__answer">Yes, on SQL Server and Azure SQL Managed Instance, per Microsoft. Azure SQL Database skips the Agent and uses a scheduler instead.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q3. What is the difference between CDC and change tracking?</span></summary><div class="olake-faq__answer">CDC reads the log and keeps changed values and history. Change tracking only notes that a row changed, plus its primary key, with no history.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q4. How long does SQL Server keep CDC changes?</span></summary><div class="olake-faq__answer">Three days by default (4,320 minutes), per Microsoft. You can change the value with sys.sp_cdc_change_job.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q5. What happens to CDC when I add a column?</span></summary><div class="olake-faq__answer">New columns are ignored by the current capture instance, per Microsoft, so you create a second one with the new shape, switch the tool to it, then remove the old one.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q6. Can I send SQL Server changes to Apache Iceberg?</span></summary><div class="olake-faq__answer">With some tools. Fivetran and Airbyte document Iceberg destinations, Datastream writes Iceberg tables in BigQuery with data in your own buckets, and Striim writes to Google Cloud Storage or Amazon S3 Tables. AWS DMS has no Iceberg target.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q7. What permissions do I need to enable SQL Server CDC?</span></summary><div class="olake-faq__answer">sysadmin to enable CDC on a database, then db_owner for each table, per Microsoft. On Amazon RDS you run msdb.dbo.rds_cdc_enable_db instead.</div></details></div>
<aside class="not-prose my-10 rounded-[16px] border border-solid border-olake-line bg-olake-surface p-[24px] lg:p-[32px]"><p class="m-0 text-[22px] leading-[1.2] tracking-[-0.01em] text-olake-ink lg:text-[26px]">OLake Go</p><p class="m-0 mt-[10px] max-w-[620px] text-[15px] leading-[1.6] text-olake-text-2">Replicate databases, Kafka, and S3 into Apache Iceberg with OLake Go, an open source EL engine built for Iceberg from the ground up.</p><div class="mt-[20px] flex flex-wrap gap-[10px]"><a href="https://olake.io/contact/" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-blue-ring bg-olake-blue text-olake-on-blue! hover:border-olake-blue-hover hover:bg-olake-blue-hover hover:text-white!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Signup</a><a href="https://olake.io/slack/" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M221.13,128A32,32,0,0,0,184,76.31V56a32,32,0,0,0-56-21.13A32,32,0,0,0,76.31,72H56a32,32,0,0,0-21.13,56A32,32,0,0,0,72,179.69V200a32,32,0,0,0,56,21.13A32,32,0,0,0,179.69,184H200a32,32,0,0,0,21.13-56ZM72,152a16,16,0,1,1-16-16H72Zm48,48a16,16,0,0,1-32,0V152a16,16,0,0,1,16-16h16Zm0-80H56a16,16,0,0,1,0-32h48a16,16,0,0,1,16,16Zm0-48H104a16,16,0,1,1,16-16Zm16-16a16,16,0,0,1,32,0v48a16,16,0,0,1-16,16H136Zm16,160a16,16,0,0,1-16-16V184h16a16,16,0,0,1,0,32Zm48-48H152a16,16,0,0,1-16-16V136h64a16,16,0,0,1,0,32Zm0-48H184V104a16,16,0,1,1,16,16Z"></path></svg>Join Slack</a><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>Explore OLake GitHub</a></div><p class="m-0 mt-[16px] text-[13px] text-olake-muted">Contact us at <strong class="font-medium text-olake-text-2">hello@olake.io</strong></p></aside>]]></content>
        <author>
            <name>Priyansh Khodiyar</name>
            <email>hello@olake.io</email>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="CDC - Change Data Capture" term="CDC - Change Data Capture"/>
        <category label="Data Pipeline Tools" term="Data Pipeline Tools"/>
        <category label="Data Ingestion" term="Data Ingestion"/>
        <category label="Best-of" term="Best-of"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[What Is Matillion? Plans, Credits and Fit (2026)]]></title>
        <id>https://olake.io/compare/what-is-matillion/</id>
        <link href="https://olake.io/compare/what-is-matillion/"/>
        <updated>2026-10-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[What is Matillion? A plain guide to Matillion ETL and Maia, how its credit meters work, what it does not publish, its limits and who should skip it.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="eager" src="https://olake.io/img/blog/cover/what-is-matillion-cover.webp" alt="Data sources flow through Matillion, a load, transform and schedule tool, into a cloud data warehouse" width="1920" height="1080" fetchpriority="high" class="img_ev3q"></p>
<section class="olake-tldr" aria-label="Key takeaways"><p class="olake-tldr__label"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"></path></svg><span>Key takeaways</span></p><div class="olake-tldr__body"><p>Matillion is a paid platform that loads your data into a cloud data warehouse, reshapes it with SQL that runs inside the warehouse, and schedules the whole job.</p><p>Here's the catch: you pay in credits, not dollars. Matillion publishes the credit rules, but no price per credit and no dollar price for any plan. It does offer a 14-day trial with 500 free credits.</p><p>Matillion's pages position it for teams that build and transform pipelines in a warehouse. Want open source code, a public price list or Apache Iceberg tables as output? Look elsewhere.</p><ul>
<li class="">Matillion does three jobs on one platform: it loads data, transforms it, and schedules the work. The transforms run as SQL inside your warehouse, which is called push-down.</li>
<li class="">"Matillion" is now a family of products, not one thing. <strong>Maia Foundation</strong> is the current platform (formerly Data Productivity Cloud). <strong>Matillion ETL</strong> is an older product you run in your own cloud account. Each has its own credit meter.</li>
<li class="">Maia Foundation uses <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credits per task hour</a>: 1 for orchestration pipelines (which load data), 3 for transformation pipelines, and 1 or 2 for streaming change capture. Extra developers cost 70 credits a month each.</li>
<li class="">Matillion ETL uses <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">1 credit per virtual core hour</a> while the software is switched on, plus 50 credits a month per extra active user.</li>
<li class="">Maia's docs say new accounts get a <a href="https://docs.maia.ai/docs/administration/free-trial.md" target="_blank" rel="noopener noreferrer" class="">14-day free trial with 500 credits</a>. What you won't find: any dollar price, the price of a credit, or a connector count on the connector page.</li>
<li class="">Budgets and alerts only warn. Maia's docs say <a href="https://docs.maia.ai/docs/administration/budgets-and-alerts.md" target="_blank" rel="noopener noreferrer" class="">budgets "do not restrict or block usage"</a>, so a runaway job can overspend a credit pack.</li>
</ul></div></section>
<p>Every fact below comes from Matillion's own pages, read from saved copies dated October 8, 2026, with the page linked beside the claim.</p>
<p>When Matillion doesn't publish a number, we say "not published". We did not run Matillion. This is a careful read of its documents, not a hands-on test.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-matillion">What is Matillion?<a href="https://olake.io/compare/what-is-matillion/#what-is-matillion" class="hash-link" aria-label="Direct link to What is Matillion?" title="Direct link to What is Matillion?" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-matillion.webp" alt="Matillion home page with the headline &quot;Cloud data integration and ETL, now autonomous&quot; and a Visit Maia.ai button" width="1600" height="1058" class="img_ev3q"></p>
<p><em>Matillion home page, October 2026.</em></p>
<p>Matillion describes itself as <a href="https://www.matillion.com/about" target="_blank" rel="noopener noreferrer" class="">born in Manchester</a>, with headquarters in Denver and Manchester. Its about page lists Matthew Scullion as a founder and says "Empowering data teams since 2011".</p>
<p>These days the lead message is Maia. The <a href="https://www.matillion.com/" target="_blank" rel="noopener noreferrer" class="">home page</a> calls Matillion "the company behind Maia, the agentic data team", and the <a href="https://docs.maia.ai/" target="_blank" rel="noopener noreferrer" class="">Maia docs</a> call Maia "the AI Data Automation platform by Matillion".</p>
<p>The short version: Matillion is software that moves data into a cloud data warehouse and gets it ready for analysis. Snowflake and Amazon Redshift are two examples of a <strong>data warehouse</strong>, a database built for reports. Teams save their steps as a <strong>pipeline</strong>, a series of steps that moves or reshapes data.</p>
<p>You'll often hear this kind of tool called ETL, short for extract, transform, load. Extract means read data from a source. Load means write it to a destination, and transform means clean it up and reshape it along the way.</p>
<p>Matillion's own <a href="https://www.matillion.com/learn/blog/matillion-vs-fivetran" target="_blank" rel="noopener noreferrer" class="">comparison post</a> describes the same idea: load data into a cloud data platform, then run the transformations there as SQL.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/what-is-matillion-which-fits.webp" alt="Decision chart: Matillion suits warehouse transforms on one canvas; others suit Iceberg output, public prices or open source code" width="1600" height="720" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-four-names-you-will-meet">The four names you will meet<a href="https://olake.io/compare/what-is-matillion/#the-four-names-you-will-meet" class="hash-link" aria-label="Direct link to The four names you will meet" title="Direct link to The four names you will meet" translate="no">​</a></h2>
<p>The product names overlap, and they changed in 2026.</p>
<table><thead><tr><th>Name</th><th>What it is</th><th>Where it runs</th><th>Billing meter</th></tr></thead><tbody><tr><td>Maia Foundation</td><td>The current platform, with pipelines, connectors and streaming change capture</td><td>Full SaaS (Matillion runs it) or Hybrid SaaS (you run the runner)</td><td>Credits per task hour, plus extra developers</td></tr><tr><td>Data Productivity Cloud</td><td>The old name of Maia Foundation</td><td>Same as above</td><td>Same as above</td></tr><tr><td>Matillion ETL</td><td>An older, separate product with its own docs</td><td>Instances in your own AWS, Google Cloud or Azure account</td><td>Credits per virtual core hour, plus extra active users</td></tr><tr><td>Matillion Data Loader</td><td>A loading tool, billed on rows, for customers not on Maia Foundation</td><td>Not stated in the pages we read</td><td>Credits per band of rows per month</td></tr></tbody></table>
<p>Sources: <a href="https://docs.maia.ai/docs/security/deployment-options.md" target="_blank" rel="noopener noreferrer" class="">deployment options</a>, <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit terms</a>, <a href="https://docs.matillion.com/metl/" target="_blank" rel="noopener noreferrer" class="">Matillion ETL docs</a>.</p>
<p><a href="https://docs.maia.ai/docs/changelog/terminology-changes.md" target="_blank" rel="noopener noreferrer" class="">Matillion's terminology page</a> says that in early 2026 it decided to rebrand Data Productivity Cloud as Maia. It also renamed "agents" to "runners" and the "Enterprise edition" to the "Scale plan". The <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> still says Data Productivity Cloud in places, so expect to see both names.</p>
<p>The <a href="https://docs.matillion.com/metl/" target="_blank" rel="noopener noreferrer" class="">Matillion ETL docs</a> now say they only host Matillion ETL documentation, because the Maia docs moved. They have Create Project pages for Snowflake, Amazon Redshift, Google BigQuery, Azure Synapse Analytics and Delta Lake on Databricks. For Maia Foundation, the <a href="https://www.matillion.com/" target="_blank" rel="noopener noreferrer" class="">home page</a> says its connectors span Snowflake, Databricks, BigQuery and Redshift.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-matillion-works">How Matillion works<a href="https://olake.io/compare/what-is-matillion/#how-matillion-works" class="hash-link" aria-label="Direct link to How Matillion works" title="Direct link to How Matillion works" translate="no">​</a></h2>
<p>So what does a Matillion pipeline actually do? It has up to three parts, and Matillion bills them differently.</p>
<ol>
<li class=""><strong>Load.</strong> Pre-built connectors copy data from a source into your warehouse. In Matillion's words, these sit in <em>orchestration pipelines</em>, meaning the load-and-flow-control kind, which "handle the loading of data from source systems to a target data warehouse" (<a href="https://docs.maia.ai/docs/components/orchestration-pipeline-overview.md" target="_blank" rel="noopener noreferrer" class="">docs</a>). A connector is just a ready-made piece of software for one kind of source. The <a href="https://www.matillion.com/products/etl" target="_blank" rel="noopener noreferrer" class="">Matillion ETL product page</a> says "over 150 pre-built connectors".</li>
<li class=""><strong>Transform.</strong> Transformation pipelines work on tables already in the warehouse, with steps such as Table Input, Filter, Aggregate and Rank (<a href="https://docs.maia.ai/docs/components/transformation-pipeline-overview.md" target="_blank" rel="noopener noreferrer" class="">docs</a>). You build them on a <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">visual canvas, or in SQL or Python</a>. Matillion's own <a href="https://www.matillion.com/learn/blog/matillion-vs-fivetran" target="_blank" rel="noopener noreferrer" class="">comparison post</a> says Maia Foundation runs transformations as native SQL pushed down into Snowflake, Databricks or AWS Redshift. So the warehouse does the heavy lifting, and yes, your warehouse bill grows with it.</li>
<li class=""><strong>Chain and schedule.</strong> A pipeline can run on a <a href="https://www.matillion.com/blog/standard-and-advanced-pipeline-scheduling-for-data-engineers" target="_blank" rel="noopener noreferrer" class="">schedule</a> and call other pipelines. Each component has <a href="https://docs.maia.ai/docs/components/orchestration-pipeline-overview.md" target="_blank" rel="noopener noreferrer" class="">green, gray and red paths</a>, so you can branch on success or failure. And a transformation pipeline slots into a load pipeline through a Run Transformation component.</li>
</ol>
<p>On top of that, Matillion says Maia has an AI helper that builds pipelines from <a href="https://docs.maia.ai/" target="_blank" rel="noopener noreferrer" class="">plain-language requests</a>. We did not test it, and the next line matters.</p>
<p>Per the <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit terms</a>, the Maia AI product is an add-on, priced as a separate annual fixed fee.</p>
<p>What about the free trial? The <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> calls it "time-bound, fair-use" and gives no length.</p>
<p>Matillion's <a href="https://docs.maia.ai/docs/administration/free-trial.md" target="_blank" rel="noopener noreferrer" class="">free trial doc</a> says new accounts get 14 days and 500 complimentary credits, with every feature open.</p>
<p>When the trial ends, the runner is suspended until you subscribe. If you started from a marketplace or added payment details, a Pay-Go plan kicks in instead.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="connector-counts-do-not-agree">Connector counts do not agree<a href="https://olake.io/compare/what-is-matillion/#connector-counts-do-not-agree" class="hash-link" aria-label="Direct link to Connector counts do not agree" title="Direct link to Connector counts do not agree" translate="no">​</a></h3>
<p>Count the connectors and you get different answers. The <a href="https://www.matillion.com/" target="_blank" rel="noopener noreferrer" class="">home page</a> says Maia Foundation has 150+ connectors and the <a href="https://www.matillion.com/products/etl" target="_blank" rel="noopener noreferrer" class="">ETL product page</a> claims over 150. Matillion's <a href="https://www.matillion.com/learn/blog/matillion-vs-fivetran" target="_blank" rel="noopener noreferrer" class="">comparison post</a>, dated July 16, 2025, says 130+ in its table and 150+ in its text, and its <a href="https://www.matillion.com/connectors" target="_blank" rel="noopener noreferrer" class="">connector page</a> states no count in the text we read.</p>
<p>Our advice: quote the page you used, with its date. And if one source matters to you, check that it's on the live list before you plan around it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="change-data-capture-and-its-limits">Change data capture and its limits<a href="https://olake.io/compare/what-is-matillion/#change-data-capture-and-its-limits" class="hash-link" aria-label="Direct link to Change data capture and its limits" title="Direct link to Change data capture and its limits" translate="no">​</a></h3>
<p>Change data capture (CDC) means reading the log where a database records every change, so you copy only what changed instead of the whole table.</p>
<p>Matillion calls its CDC feature streaming pipelines. Per the <a href="https://docs.maia.ai/docs/streaming/streaming-pipelines.md" target="_blank" rel="noopener noreferrer" class="">streaming docs</a>, they <em>only</em> support relational databases: the International Business Machines (IBM) database Db2 for IBM i, Microsoft SQL Server, MySQL, Oracle and PostgreSQL. The pages say nothing about MongoDB or other non-relational sources, so don't assume.</p>
<p>Streaming is near-real-time, and change records are written in batches as <a href="https://docs.maia.ai/docs/streaming/streaming-pipelines.md" target="_blank" rel="noopener noreferrer" class="">Avro files</a> to Amazon S3, Azure Blob Storage or Google Cloud Storage, or loaded to Snowflake. Each streaming pipeline needs its own runner. One more catch: the <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists streaming change data capture only under the Scale plan.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-matillion-is-priced">How Matillion is priced<a href="https://olake.io/compare/what-is-matillion/#how-matillion-is-priced" class="hash-link" aria-label="Direct link to How Matillion is priced" title="Direct link to How Matillion is priced" translate="no">​</a></h2>
<p>Matillion sells annual packages of credits. A <strong>credit</strong> is its smallest unit of charge, and the <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> says credits are used up by pipeline run time (called task hours) and by extra developer users. The page lists three plans and shows no dollar amount for any of them.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/matillion-pricing.webp" alt="Matillion pricing page showing Developer, Teams and Scale plan cards with features and no dollar prices" width="1600" height="1200" class="img_ev3q"></p>
<p><em>Matillion's pricing page, October 2026.</em></p>
<table><thead><tr><th>Plan</th><th>Developer users included</th><th>What the page lists</th><th>Price</th></tr></thead><tbody><tr><td>Developer</td><td>1</td><td>Unlimited projects, pre-built connectors, low-code canvas with SQL and Python, built-in Git</td><td>Not published</td></tr><tr><td>Teams</td><td>5</td><td>Audit log, standard support, Service Level Agreement (with an annual subscription), plus all Developer features</td><td>Not published</td></tr><tr><td>Scale</td><td>5</td><td>Custom single sign-on, hybrid cloud deployment, data lineage, streaming change data capture, 180+ day log retention, premium support available</td><td>Not published</td></tr></tbody></table>
<p>Source: <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">Matillion pricing page</a>, saved October 8, 2026.</p>
<p>An account can hold <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">one active subscription</a>, so you're on one plan at a time. You can buy directly or through the <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">AWS, Azure or Snowflake marketplace</a>. (A Service Level Agreement is a written promise about uptime or response times.)</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-maia-foundation-meter">The Maia Foundation meter<a href="https://olake.io/compare/what-is-matillion/#the-maia-foundation-meter" class="hash-link" aria-label="Direct link to The Maia Foundation meter" title="Direct link to The Maia Foundation meter" translate="no">​</a></h3>
<p>The <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit consumption terms</a> set the rates for Maia Foundation. A task hour is the combined run time of each task, counted in 2-second steps, and only while a pipeline runs. Per the terms, validation and sampling are not billed.</p>
<table><thead><tr><th>What you run</th><th>Credits per task hour</th></tr></thead><tbody><tr><td>Orchestration pipelines (loading and flow control)</td><td>1</td></tr><tr><td>Transformation pipelines</td><td>3</td></tr><tr><td>Streaming change capture, "essential"</td><td>1</td></tr><tr><td>Streaming change capture, "premium"</td><td>2</td></tr><tr><td>Each developer user beyond those included</td><td>70 credits a month</td></tr></tbody></table>
<p>The <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">terms</a> say these rates are "fixed across the customer base and non-negotiable". But they don't define "essential" and "premium", and they don't say how an always-on streaming pipeline is counted. Ask Matillion both questions before you plan a streaming budget.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/what-is-matillion--matillion-credit-consumption.webp" alt="Matillion credit terms table: credits per task hour for orchestration, transformation and streaming pipelines, and per developer user" width="1600" height="795" class="img_ev3q"></p>
<p><em>Matillion's credit consumption terms, October 2026.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-matillion-etl-meter">The Matillion ETL meter<a href="https://olake.io/compare/what-is-matillion/#the-matillion-etl-meter" class="hash-link" aria-label="Direct link to The Matillion ETL meter" title="Direct link to The Matillion ETL meter" translate="no">​</a></h3>
<p>Now flip to the older product. The <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">same terms page</a> sets a different meter for Matillion ETL: one credit equals one virtual core for one hour, counted while the software is switched on in your cloud account. Each subscription includes 5 active users, and each extra one costs 50 credits in any month they log in.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/what-is-matillion--matillion-etl-credit-terms.webp" alt="Matillion ETL credit terms: one credit per virtual core hour while the software is on, and 50 credits per extra active user" width="1600" height="548" class="img_ev3q"></p>
<p><em>Matillion's credit consumption terms, October 2026.</em></p>
<p>Matillion ETL editions are <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">listed</a> as Basic, Advanced and Enterprise.</p>
<p>Data Loader is <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">metered by rows</a>: in its first band, 1 to 5,000,000 rows a month, one credit buys 20,000 batch rows or 7,000 CDC rows. Matillion's own <a href="https://www.matillion.com/learn/blog/matillion-vs-fivetran" target="_blank" rel="noopener noreferrer" class="">comparison post</a> says "There's no per-user charge", yet the terms charge developer users. Our read: trust the terms over the blog post.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/what-is-matillion-pipeline-pair.webp" alt="Matillion orchestration pipeline loads data at 1 credit per task hour, then a transformation pipeline reshapes it in the warehouse at 3 credits" width="1600" height="720" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/what-is-matillion-two-meters.webp" alt="Two meters compared: Maia Foundation bills per pipeline task hour, Matillion ETL bills per virtual core hour switched on" width="1600" height="720" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-worked-example-with-invented-usage">A worked example, with invented usage<a href="https://olake.io/compare/what-is-matillion/#a-worked-example-with-invented-usage" class="hash-link" aria-label="Direct link to A worked example, with invented usage" title="Direct link to A worked example, with invented usage" translate="no">​</a></h3>
<p>These numbers are illustrative: the usage is our own pick, while the rates come straight from the terms. No dollar value appears, because Matillion doesn't publish one.</p>
<p><strong>Maia Foundation.</strong> Say a team on Teams has 7 developers, so 2 are beyond the 5 included. Their nightly load pipelines run 1.5 task hours a day, and their transformation pipelines run 0.5 task hours a day, for 30 days.</p>
<ul>
<li class="">Load (orchestration): 1.5 hours x 1 credit x 30 days = 45 credits.</li>
<li class="">Transformation: 0.5 hours x 3 credits x 30 days = 45 credits.</li>
<li class="">Extra developers: 2 x 70 credits = 140 credits.</li>
<li class="">Total: 230 credits for the month.</li>
</ul>
<p>The seats are the biggest slice, and a transformation hour costs 3 times a load hour.</p>
<p>For a 14-day trial, scale the run time: (45 + 45) x 14 / 30 = 42 credits. Even if the seat credits were also scaled, 230 x 14 / 30 is about 107. Both are far under the 500 trial credits, so they can cover a real test.</p>
<p><strong>Matillion ETL.</strong> Say one instance has 4 virtual cores. Left on all month, it uses 4 x 24 hours x 30 days = 2,880 credits. Switched off outside 8 working hours a day, it uses 4 x 8 x 30 = 960 credits.</p>
<p>Same software, 3 times the bill. Matillion ETL bills for time switched on, not for work done.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-matillion-does-not-publish">What Matillion does not publish<a href="https://olake.io/compare/what-is-matillion/#what-matillion-does-not-publish" class="hash-link" aria-label="Direct link to What Matillion does not publish" title="Direct link to What Matillion does not publish" translate="no">​</a></h3>
<table><thead><tr><th>Item</th><th>Status</th></tr></thead><tbody><tr><td>Dollar price of Developer, Teams or Scale</td><td>Not published on the pricing page</td></tr><tr><td>Price of one credit</td><td>Not published on official pages; the overage rate is on the Order Form only</td></tr><tr><td>Free trial length</td><td>Pricing page: "time-bound, fair-use" with no length. Docs: 14 days, 500 credits</td></tr><tr><td>A cost calculator</td><td>None found on the pricing page we read; the Maia docs describe a <a href="https://docs.maia.ai/docs/administration/usage-dashboard" target="_blank" rel="noopener noreferrer" class="">usage dashboard</a></td></tr><tr><td>Definition of "essential" and "premium" streaming</td><td>Not in the credit terms</td></tr></tbody></table>
<p>Sources: <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>, <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit terms</a>, <a href="https://docs.maia.ai/docs/administration/free-trial.md" target="_blank" rel="noopener noreferrer" class="">free trial doc</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-third-parties-report">What third parties report<a href="https://olake.io/compare/what-is-matillion/#what-third-parties-report" class="hash-link" aria-label="Direct link to What third parties report" title="Direct link to What third parties report" translate="no">​</a></h3>
<p><a href="https://mammoth.io/blog/matillion-pricing/" target="_blank" rel="noopener noreferrer" class="">Mammoth</a> reports $20,000 to $35,000 a year for small teams and $100,000 to $300,000 or more for enterprises. It says these figures come from Reddit and G2 posts, not from Matillion. <a href="https://estuary.dev/blog/matillion-alternatives/" target="_blank" rel="noopener noreferrer" class="">Estuary</a>, a rival, said in a post updated September 11, 2026 that Matillion does not publish simple starting prices.</p>
<p>Treat those dollar ranges as unverified reports, not quotes. Your own quote may look very different.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="costs-outside-the-credits">Costs outside the credits<a href="https://olake.io/compare/what-is-matillion/#costs-outside-the-credits" class="hash-link" aria-label="Direct link to Costs outside the credits" title="Direct link to Costs outside the credits" translate="no">​</a></h3>
<p>Credits are not the whole bill. Because transformations are pushed into your warehouse, the warehouse provider bills you for that compute too. Then add any marketplace terms and the <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">Order Form overage rate</a>.</p>
<p>Maia has a Budgets and alerts page. Its docs say budgets "do not restrict or block usage", so pipelines keep running past a threshold and you only get an alert (<a href="https://docs.maia.ai/docs/administration/budgets-and-alerts.md" target="_blank" rel="noopener noreferrer" class="">docs</a>). A runaway job can overspend a credit pack and nothing stops it.</p>
<p>And watch the end of the contract. The <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">terms</a> allow Pay-Go for up to 60 days with no support, then access is lost unless you sign a new term.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-matillion-fits-and-its-limits">Where Matillion fits and its limits<a href="https://olake.io/compare/what-is-matillion/#where-matillion-fits-and-its-limits" class="hash-link" aria-label="Direct link to Where Matillion fits and its limits" title="Direct link to Where Matillion fits and its limits" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-good">What's good<a href="https://olake.io/compare/what-is-matillion/#whats-good" class="hash-link" aria-label="Direct link to What's good" title="Direct link to What's good" translate="no">​</a></h3>
<ul>
<li class=""><strong>One canvas, three ways to build.</strong> The <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">Developer plan lists</a> a low-code canvas with SQL and Python, pre-built connectors, unlimited projects and a built-in Git repository, and Scale adds bring-your-own Git. Matillion says a no-code designer builds <a href="https://www.matillion.com/learn/blog/matillion-vs-fivetran" target="_blank" rel="noopener noreferrer" class="">custom REST API connectors</a>.</li>
<li class=""><strong>Scheduling and error handling are built in.</strong> Basic mode sets schedules in a graphical screen, and advanced mode takes <a href="https://www.matillion.com/blog/standard-and-advanced-pipeline-scheduling-for-data-engineers" target="_blank" rel="noopener noreferrer" class="">Quartz cron expressions</a>. The <a href="https://docs.maia.ai/docs/components/retry" target="_blank" rel="noopener noreferrer" class="">Retry component</a> reruns a step until it succeeds or hits a maximum number of attempts, with no delay by default or a delay of about 2 seconds.</li>
<li class=""><strong>You choose where the runner lives.</strong> In <a href="https://docs.maia.ai/docs/security/deployment-options.md" target="_blank" rel="noopener noreferrer" class="">Hybrid SaaS</a> you deploy the runner inside your own private cloud, and the docs recommend TLS 1.2 or higher between Matillion and your runners. The pricing page lists hybrid deployment under Scale.</li>
<li class=""><strong>Usage is metered in small steps and is easy to see.</strong> The <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit terms</a> count task time in 2-second steps, and validation and sampling are not billed. The <a href="https://docs.maia.ai/docs/administration/usage-dashboard" target="_blank" rel="noopener noreferrer" class="">usage dashboard</a> refreshes every 3 hours, splits credits by Orchestration, Transformation, Streaming and Additional Users, and exports to CSV. <a href="https://docs.maia.ai/docs/administration/budgets-and-alerts.md" target="_blank" rel="noopener noreferrer" class="">Budgets</a> take up to two percentage thresholds and send alerts by email, Slack or webhook.</li>
<li class=""><strong>Streaming change capture is near-real-time.</strong> The <a href="https://docs.maia.ai/docs/streaming/postgresql-streaming-source.md" target="_blank" rel="noopener noreferrer" class="">PostgreSQL source</a> uses the Debezium PostgreSQL connector and supports versions 12 to 16. The <a href="https://docs.maia.ai/docs/streaming/streaming-pipelines.md" target="_blank" rel="noopener noreferrer" class="">streaming docs</a> call the pipelines "self-healing" because they adapt to source schema changes.</li>
<li class=""><strong>Audited security.</strong> The <a href="https://www.matillion.com/security" target="_blank" rel="noopener noreferrer" class="">security page</a> lists SOC 1 Type II, SOC 2 Type II and SOC 3 accreditation with ISO 27001 certification, and says its ISO 27001 surveillance audits finished "with no reported non-conformities".</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-it-falls-short">Where it falls short<a href="https://olake.io/compare/what-is-matillion/#where-it-falls-short" class="hash-link" aria-label="Direct link to Where it falls short" title="Direct link to Where it falls short" translate="no">​</a></h3>
<ul>
<li class=""><strong>Streaming change capture is narrow and plan-gated.</strong> The <a href="https://docs.maia.ai/docs/streaming/streaming-pipelines.md" target="_blank" rel="noopener noreferrer" class="">docs</a> say streaming pipelines "only currently support relational databases as sources": Db2 for IBM i, SQL Server, MySQL, Oracle and PostgreSQL. They are "only available to customers on specific Maia plans" and the <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists them under Scale. Each pipeline needs its own runner, and a MySQL source needs a driver you provide.</li>
<li class=""><strong>Schema changes follow the data, not the source DDL.</strong> Per the same docs, a source schema change does not reach the target until the data changes, a dropped column stays in the target with NULL values, and an incompatible type change renames the column with a timestamp suffix (<code>_yyyymmddhhmmss</code>). A new source table needs a new streaming pipeline.</li>
<li class=""><strong>Output is warehouse tables or files, and the platform is closed source.</strong> The <a href="https://www.matillion.com/connectors" target="_blank" rel="noopener noreferrer" class="">connectors page</a> says its connectors are "built to load into Snowflake, Google BigQuery, Databricks or Redshift", and streaming writes Avro files to Amazon S3, Azure Blob Storage or Google Cloud Storage, or loads to Snowflake. No Apache Iceberg destination appears in the <a href="https://docs.maia.ai/llms.txt" target="_blank" rel="noopener noreferrer" class="">Maia docs index</a> or the <a href="https://docs.maia.ai/docs/changelog/2026-changelog.md" target="_blank" rel="noopener noreferrer" class="">2026 changelog</a> as of October 8, 2026, and Matillion publishes <a href="https://www.matillion.com/" target="_blank" rel="noopener noreferrer" class="">no open-source licence</a> for its platform.</li>
<li class=""><strong>Spend is hard to predict and hard to cap.</strong> A transformation hour costs 3 credits against 1 for a load hour, the warehouse bills you separately for push-down compute, and the Retry component's <a href="https://docs.maia.ai/docs/components/retry" target="_blank" rel="noopener noreferrer" class="">backoff delays can add to billable task time</a>. Budgets only alert, the price per credit is not public, and the overage rate is on the Order Form only (<a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit terms</a>).</li>
<li class=""><strong>Names and components keep changing.</strong> Early 2026 brought the <a href="https://docs.maia.ai/docs/changelog/terminology-changes.md" target="_blank" rel="noopener noreferrer" class="">Maia rebrand</a>, the Enterprise edition became Scale and agents became runners. The <a href="https://docs.maia.ai/docs/changelog/2026-changelog.md" target="_blank" rel="noopener noreferrer" class="">2026 changelog</a> renames the Runner role to Operator and deprecates the Google Cloud Storage Load component. The <a href="https://docs.maia.ai/docs/components/mongodb-query" target="_blank" rel="noopener noreferrer" class="">MongoDB Query component</a> is deprecated too: it "can no longer be added to new pipelines", and each run drops and recreates its target table.</li>
<li class=""><strong>Matillion ETL runs on a support clock and bills while on.</strong> It uses <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">1 credit per virtual core hour</a> while the software is switched on, whatever work it does. The <a href="https://docs.matillion.com/metl/docs/matillion-etl-supported-releases/" target="_blank" rel="noopener noreferrer" class="">supported releases page</a> lists 1.78 LTS ending support in November 2026 and 1.80 LTS with the end date to be confirmed, and each LTS version gets <a href="https://docs.matillion.com/metl/docs/matillion-etl-support-lifecycle/" target="_blank" rel="noopener noreferrer" class="">18 months of support</a>.</li>
</ul>
<p>Running Matillion ETL today? Check which version you're on and plan the upgrade now, not in November.</p>
<p><a href="https://www.peerspot.com/products/matillion-reviews" target="_blank" rel="noopener noreferrer" class="">PeerSpot</a> shows Matillion Data Productivity Cloud at 4.2 out of 5 from 28 reviews. Reviewers mention the drag-and-drop interface, limited concurrency and documentation gaps, though one calls the docs "top-notch". It's a small sample, so take it as a hint, nothing more.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-practitioners-say">What practitioners say<a href="https://olake.io/compare/what-is-matillion/#what-practitioners-say" class="hash-link" aria-label="Direct link to What practitioners say" title="Direct link to What practitioners say" translate="no">​</a></h3>
<p>Independent talk about Matillion lives mostly on review sites. We found no substantive Reddit thread, and G2, Capterra and Gartner Peer Insights block automated readers, so we didn't use them directly. Each quote below is verbatim and was checked against a saved page copy dated October 8, 2026.</p>
<p>Reviewers mention support and ask for clearer prices. A reviewer on the <a href="https://aws.amazon.com/marketplace/reviews/reviews-list/B08P7F1KTL?rating=3" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace review list</a>, which republishes G2 reviews, wrote in June 2026: "My main concern is around pricing. I'd really like more transparency and predictability on cost".</p>
<p>Other complaints are about setup and the older product.</p>
<p>An <a href="https://aws.amazon.com/marketplace/reviews/reviews-list/B08P7F1KTL?rating=3" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace review</a> from September 2026 said: "The onboarding documentation could be stronger. We ended up having to figure out certain workflows through trial and error".</p>
<p>On the older VM-based Matillion ETL, a PeerSpot reviewer wrote in April 2023: "Before considering the licensing cost of Matillion itself, you need to consider the cost of hosting the virtual machine" (<a href="https://www.peerspot.com/questions/what-is-your-experience-regarding-pricing-and-costs-for-matillion-etl" target="_blank" rel="noopener noreferrer" class="">PeerSpot, Matillion ETL pricing thread</a>). That quote is old, so it doesn't describe the current Maia product.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="security-and-deployment">Security and deployment<a href="https://olake.io/compare/what-is-matillion/#security-and-deployment" class="hash-link" aria-label="Direct link to Security and deployment" title="Direct link to Security and deployment" translate="no">​</a></h3>
<p><a href="https://www.matillion.com/security" target="_blank" rel="noopener noreferrer" class="">Matillion's security page</a> lists System and Organization Controls (SOC) 1 and SOC 2 audit reports, both Type 2, plus International Organization for Standardization (ISO) 27001, an information security standard. It says it meets the EU General Data Protection Regulation (GDPR). The text doesn't mention the US health privacy law, the Health Insurance Portability and Accountability Act (HIPAA), so ask if you need it.</p>
<p>Maia runs in two modes (<a href="https://docs.maia.ai/docs/security/deployment-options.md" target="_blank" rel="noopener noreferrer" class="">docs</a>). In Full SaaS, Matillion manages the runner for you. In Hybrid SaaS, you run it in your own private cloud, which gives you control over network isolation.</p>
<p>One catch: the runner still needs outbound internet access to Matillion's control plane.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="who-matillion-suits-and-who-should-look-elsewhere">Who Matillion suits, and who should look elsewhere<a href="https://olake.io/compare/what-is-matillion/#who-matillion-suits-and-who-should-look-elsewhere" class="hash-link" aria-label="Direct link to Who Matillion suits, and who should look elsewhere" title="Direct link to Who Matillion suits, and who should look elsewhere" translate="no">​</a></h2>
<p>Matillion fits teams that:</p>
<ul>
<li class="">Want load, transform and schedule on one canvas, with transformations running as SQL <a href="https://www.matillion.com/learn/blog/matillion-vs-fivetran" target="_blank" rel="noopener noreferrer" class="">pushed down</a> into Snowflake, Databricks or Amazon Redshift.</li>
<li class="">Need an <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">audit log and a Service Level Agreement</a> (Teams), or custom single sign-on, data lineage tracking and 180+ day log retention (Scale).</li>
<li class="">Must keep the runner inside their own private cloud, which the Scale plan lists as hybrid deployment.</li>
<li class="">Want change capture from Db2 for IBM i, SQL Server, MySQL, Oracle or PostgreSQL into cloud storage or Snowflake, and can budget for the Scale plan.</li>
</ul>
<p>Look elsewhere if you need:</p>
<ul>
<li class="">Apache Iceberg tables as output. No Iceberg destination appears in Matillion's docs index as of October 8, 2026.</li>
<li class="">Change capture from MongoDB or other non-relational sources. The streaming docs list five relational databases only.</li>
<li class="">A hard spending cap. Matillion's budgets only alert, and the price per credit is not public.</li>
<li class="">A vendor-run loader: Fivetran <a href="https://www.fivetran.com/" target="_blank" rel="noopener noreferrer" class="">describes its service as managed</a>.</li>
<li class="">Free software you run yourself: Airbyte Core (<a href="https://raw.githubusercontent.com/airbytehq/airbyte/master/LICENSE" target="_blank" rel="noopener noreferrer" class="">Elastic License 2.0</a>, which restricts offering it as a hosted or managed service) or Debezium (<a href="https://debezium.io/license/" target="_blank" rel="noopener noreferrer" class="">Apache License 2.0</a>), per their own pages.</li>
<li class="">A published price list: compare each vendor's own pricing page.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="questions-to-ask-matillion-before-you-sign">Questions to ask Matillion before you sign<a href="https://olake.io/compare/what-is-matillion/#questions-to-ask-matillion-before-you-sign" class="hash-link" aria-label="Direct link to Questions to ask Matillion before you sign" title="Direct link to Questions to ask Matillion before you sign" translate="no">​</a></h3>
<ul>
<li class=""><strong>Plan.</strong> Is streaming change capture in my plan, and what do "essential" and "premium" mean?</li>
<li class=""><strong>Trial.</strong> Can I test streaming and my real sources inside the 500 trial credits, and can the trial be extended?</li>
<li class=""><strong>Credits.</strong> What is my price per credit, my overage rate, and how are always-on pipelines counted?</li>
<li class=""><strong>Sources.</strong> Is each of my sources on the live connector list today?</li>
<li class=""><strong>Version.</strong> If I use Matillion ETL, when does support for my version end?</li>
<li class=""><strong>Exit.</strong> What happens at renewal, and how long does Pay-Go last?</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://olake.io/compare/what-is-matillion/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Matillion is a warehouse-focused platform for loading, transforming and scheduling data, sold by credit. Before you sign, get the price per credit in writing, run your real usage through the meter tables above, and compare at least one other quote.</p>
<section class="root_PuUS" aria-labelledby="_R_otqfdbih_-h"><header><h3 id="_R_otqfdbih_-h" class="title_QNC9" tabindex="-1">Test your Matillion basics</h3></header><div class="progress_EyIk" role="progressbar" aria-valuemin="1" aria-valuemax="5" aria-valuenow="1" aria-label="Quiz progress"><span style="width:0%"></span></div><p class="count_OugS">Question <!-- -->1<!-- --> of <!-- -->5</p><p id="_R_otqfdbih_-q" class="question_IKMS">In one sentence, what does Matillion do?</p><div role="radiogroup" aria-labelledby="_R_otqfdbih_-q" class="options_xbjx"><button type="button" role="radio" aria-checked="false" tabindex="0" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">A</span><span class="optLabel_qDTb">It builds the charts and dashboards your team reads</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">B</span><span class="optLabel_qDTb">It loads data into a cloud warehouse, reshapes it there and schedules the jobs</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">C</span><span class="optLabel_qDTb">It is a database that stores your company's records</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">D</span><span class="optLabel_qDTb">It watches your servers and alerts you when they go down</span></button></div><div class="actions_XZHX"><button type="button" class="primary_KVNI" disabled="">Next</button></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faqs">FAQs<a href="https://olake.io/compare/what-is-matillion/#faqs" class="hash-link" aria-label="Direct link to FAQs" title="Direct link to FAQs" translate="no">​</a></h2>
<div class="olake-faq"><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q1. What is Matillion in simple words?</span></summary><div class="olake-faq__answer">Think of it as a paid platform that loads data into a cloud data warehouse, transforms it with SQL that runs in the warehouse, and schedules the jobs. It comes in two flavours: Maia Foundation, the current cloud platform, and Matillion ETL, an older product you run in your own cloud account.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q2. Is Matillion an ETL or an ELT tool?</span></summary><div class="olake-faq__answer">Both, really. Matillion's own comparison post says Maia Foundation runs transformations as native SQL pushed down into the warehouse, which is the ELT pattern. The older product is named Matillion ETL.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q3. How does Matillion pricing work?</span></summary><div class="olake-faq__answer">You buy annual credit packages, and then the meter runs. On Maia Foundation, credits go for task hours (1 for orchestration pipelines, 3 for transformation, 1 or 2 for streaming) and 70 a month per extra developer. Matillion ETL uses 1 credit per virtual core hour and 50 per extra active user. Dollar prices? Not published.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q4. Is Matillion free?</span></summary><div class="olake-faq__answer">Not really, no. Matillion's docs say a new account gets a 14-day trial with 500 complimentary credits and all features open, after which you need a paid plan. The pricing page itself gives no trial length, and the Developer price is not published.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q5. What happened to Data Productivity Cloud?</span></summary><div class="olake-faq__answer">Matillion's docs say it decided in early 2026 to rebrand Data Productivity Cloud as Maia, and the credit terms call Maia Foundation the former Data Productivity Cloud. The pricing page still uses the old name in places.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q6. Does Matillion support change data capture?</span></summary><div class="olake-faq__answer">Yes, through streaming pipelines, but for Db2 for IBM i, SQL Server, MySQL, Oracle and PostgreSQL only. The docs say nothing about MongoDB. The pricing page lists streaming change data capture under Scale.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q7. Can Matillion write Apache Iceberg tables?</span></summary><div class="olake-faq__answer">We found no Iceberg destination in the Maia docs index or 2026 changelog as of October 8, 2026. Streaming to object storage writes Avro change files, not Iceberg tables. If Iceberg matters to you, ask Matillion before you plan around it.</div></details></div>
<aside class="not-prose my-10 rounded-[16px] border border-solid border-olake-line bg-olake-surface p-[24px] lg:p-[32px]"><p class="m-0 text-[22px] leading-[1.2] tracking-[-0.01em] text-olake-ink lg:text-[26px]">OLake Go</p><p class="m-0 mt-[10px] max-w-[620px] text-[15px] leading-[1.6] text-olake-text-2">Replicate databases, Kafka, and S3 into Apache Iceberg with OLake Go, an open source EL engine built for Iceberg from the ground up.</p><div class="mt-[20px] flex flex-wrap gap-[10px]"><a href="https://olake.io/contact/" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-blue-ring bg-olake-blue text-olake-on-blue! hover:border-olake-blue-hover hover:bg-olake-blue-hover hover:text-white!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Signup</a><a href="https://olake.io/slack/" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M221.13,128A32,32,0,0,0,184,76.31V56a32,32,0,0,0-56-21.13A32,32,0,0,0,76.31,72H56a32,32,0,0,0-21.13,56A32,32,0,0,0,72,179.69V200a32,32,0,0,0,56,21.13A32,32,0,0,0,179.69,184H200a32,32,0,0,0,21.13-56ZM72,152a16,16,0,1,1-16-16H72Zm48,48a16,16,0,0,1-32,0V152a16,16,0,0,1,16-16h16Zm0-80H56a16,16,0,0,1,0-32h48a16,16,0,0,1,16,16Zm0-48H104a16,16,0,1,1,16-16Zm16-16a16,16,0,0,1,32,0v48a16,16,0,0,1-16,16H136Zm16,160a16,16,0,0,1-16-16V184h16a16,16,0,0,1,0,32Zm48-48H152a16,16,0,0,1-16-16V136h64a16,16,0,0,1,0,32Zm0-48H184V104a16,16,0,1,1,16,16Z"></path></svg>Join Slack</a><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>Explore OLake GitHub</a></div><p class="m-0 mt-[16px] text-[13px] text-olake-muted">Contact us at <strong class="font-medium text-olake-text-2">hello@olake.io</strong></p></aside>]]></content>
        <author>
            <name>Priyansh Khodiyar</name>
            <email>hello@olake.io</email>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="ETL" term="ETL"/>
        <category label="Data Pipeline Tools" term="Data Pipeline Tools"/>
        <category label="Data Ingestion" term="Data Ingestion"/>
        <category label="Alternatives" term="Alternatives"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[16 Best Data Integration Tools in 2026, Compared]]></title>
        <id>https://olake.io/compare/best-data-integration-tools/</id>
        <link href="https://olake.io/compare/best-data-integration-tools/"/>
        <updated>2026-10-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The best data integration tools in 2026: 16 compared by use case, price, database change capture and Apache Iceberg support, with limits.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="eager" src="https://olake.io/img/blog/cover/best-data-integration-tools-cover.webp" alt="Cover for best data integration tools showing sources flowing through an integration tool into a warehouse or lake" width="1920" height="1080" fetchpriority="high" class="img_ev3q"></p>
<section class="olake-tldr" aria-label="Key takeaways"><p class="olake-tldr__label"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"></path></svg><span>Key takeaways</span></p><div class="olake-tldr__body"><ul>
<li class=""><strong>The best data integration tools depend on who runs them, what you load and how you get billed</strong>, so no single tool wins.</li>
<li class=""><strong>Change capture and Apache Iceberg support differ a lot.</strong> Some tools keep change data capture (CDC) for higher plans, and only some write Iceberg tables, so check how it bills, whether it reads database change logs, and where it can write.</li>
</ul></div></section>
<p>Prices come from each vendor's own pages. We checked them on October 8, 2026. Plans change often, so confirm before you decide.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="best-data-integration-tools-by-use-case">Best data integration tools by use case<a href="https://olake.io/compare/best-data-integration-tools/#best-data-integration-tools-by-use-case" class="hash-link" aria-label="Direct link to Best data integration tools by use case" title="Direct link to Best data integration tools by use case" translate="no">​</a></h2>
<p>The table matches a job to a short list, plus the thing to check before you sign.</p>
<table><thead><tr><th>If you need</th><th>Look first at</th><th>Check before you commit</th></tr></thead><tbody><tr><td>Many SaaS apps into a warehouse, no one to run it</td><td>Fivetran, Hevo, Airbyte Cloud</td><td>The meter on your busiest table</td></tr><tr><td>A free start for a small, steady load</td><td>Hevo, Fivetran, Skyvia or Estuary free plans</td><td>The monthly limit and what is left out</td></tr><tr><td>Database changes within minutes</td><td>Estuary, Fivetran Enterprise, Qlik Talend Cloud</td><td>Which plan includes change capture and what sync interval it allows</td></tr><tr><td>Governance and old systems such as mainframes</td><td>Informatica, Qlik Talend Cloud</td><td>A written quote that states your volume</td></tr><tr><td>Cloud data integration inside one cloud</td><td>AWS Glue, or Azure Data Factory and Fabric</td><td>Version, region rate and which product is current</td></tr><tr><td>Pipelines as code</td><td>Meltano, dlt, Airbyte Core</td><td>Who owns upgrades and on-call work</td></tr><tr><td>Writing Iceberg tables</td><td>Qlik Talend Cloud, Fivetran, Airbyte, Estuary, Informatica, AWS Glue, dlt, OLake Go (Azure Data Factory and Hevo are narrower)</td><td>Catalog, deletes and file upkeep in the docs</td></tr></tbody></table>
<p>One narrow case: if you only want Postgres, MySQL, MongoDB or SQL Server changes in Iceberg or Parquet files you own, <a href="https://olake.io/compare/best-data-integration-tools/#10-olake-go-best-for-database-changes-into-iceberg-or-parquet-on-your-own-storage" class="">OLake Go</a> is built for that.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-data-integration-means-in-plain-words">What data integration means, in plain words<a href="https://olake.io/compare/best-data-integration-tools/#what-data-integration-means-in-plain-words" class="hash-link" aria-label="Direct link to What data integration means, in plain words" title="Direct link to What data integration means, in plain words" translate="no">​</a></h2>
<p>Data integration means getting data out of the systems where it's created, such as databases, apps like Salesforce and files, and putting it in a warehouse (a database built for reports) or a data lake (cheap file storage many tools can read).</p>
<p><strong>ETL</strong> (extract, transform, load) reshapes data before it lands, and <strong>ELT</strong> (extract, load, transform) lands it first. <strong>Change data capture (CDC)</strong> reads a database's log of changes and sends only what changed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-we-picked">How we picked<a href="https://olake.io/compare/best-data-integration-tools/#how-we-picked" class="hash-link" aria-label="Direct link to How we picked" title="Direct link to How we picked" translate="no">​</a></h2>
<p>A tool had to be still sold and updated, publish pricing or billing documents we could open, and move data rather than only schedule jobs. We left out iPaaS tools (platforms that link apps through workflows) such as MuleSoft or Zapier. This is a reading of documents, not a lab test.</p>
<p>Two entries have a "What users say" line, copied word for word from a linked public page with the site and month. Read each as a single voice, not a verdict. Inside each group, the order is <em>not</em> a ranking.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="data-integration-tools-at-a-glance">Data integration tools at a glance<a href="https://olake.io/compare/best-data-integration-tools/#data-integration-tools-at-a-glance" class="hash-link" aria-label="Direct link to Data integration tools at a glance" title="Direct link to Data integration tools at a glance" translate="no">​</a></h2>
<p>Every figure below comes from the vendor's own pricing page, linked in its entry further down. "Not published" means the vendor's page shows no figure. It doesn't mean no figure exists.</p>
<table><thead><tr><th>Tool</th><th>Who runs it</th><th>Billing meter</th><th>Free option</th><th>Price shown on the vendor's own page, October 2026</th></tr></thead><tbody><tr><td>Fivetran</td><td>Vendor</td><td>Monthly active rows (MAR) per connection</td><td>Free to 500,000 MAR</td><td>$5 base charge per connection (1 to 1M MAR); $12,000 annual minimum; per-row rates in its Service Consumption Table</td></tr><tr><td>Airbyte</td><td>Both</td><td>Credits</td><td>Core is free software</td><td>Cloud Standard $20 a month with 5 credits; Plus from $189 a month for 40 credits</td></tr><tr><td>Hevo</td><td>Vendor</td><td>Events</td><td>Free to 1M events</td><td>Starter $265 a month billed annually ($299 billed monthly); Professional $750 a month billed annually ($849 billed monthly)</td></tr><tr><td>Skyvia</td><td>Vendor</td><td>Records per month</td><td>Free, 10k records a month</td><td>Basic $79 a month billed annually ($99 billed monthly)</td></tr><tr><td>Stitch</td><td>Vendor</td><td>Replicated rows</td><td>None, 14-day trial</td><td>Standard from $100 a month; Advanced $1,500 a month and Premium $3,000 a month, both billed annually</td></tr><tr><td>Estuary</td><td>Both</td><td>Gigabytes plus connector instances</td><td>Free to 10 GB a month</td><td>$0.50 per GB, plus connector instances at $100 a month each for the first six, then $50</td></tr><tr><td>Integrate.io</td><td>Vendor</td><td>Flat fee</td><td>14-day trial</td><td>Core $1,999 a month, billing period not stated on the card</td></tr><tr><td>Rivery (Boomi)</td><td>Vendor</td><td>Credits</td><td>14-day or 1,000-credit trial</td><td>$0.9 per credit, Base edition pay as you go</td></tr><tr><td>Meltano</td><td>You</td><td>None for the software</td><td>Free, open source</td><td>Meltano Cloud dollar prices not published</td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>You</td><td>None for the software</td><td>Free, Apache 2.0</td><td>Open source, no software fee; you pay for your own servers and storage</td></tr><tr><td>dlt</td><td>You</td><td>None for the library</td><td>Free, Apache 2.0</td><td>dltHub platform $12,000 a month, 12-month minimum</td></tr><tr><td>Matillion</td><td>Both</td><td>Credits per task hour</td><td>Trial only</td><td>No dollar price shown</td></tr><tr><td>Informatica</td><td>Both</td><td>Informatica Processing Units (IPU)</td><td>Free to 20M rows or 10 compute hours a month</td><td>No dollar price per IPU; one AWS Marketplace bundle is $131,760 for 12 months</td></tr><tr><td>Qlik Talend Cloud</td><td>Both</td><td>Capacity band</td><td>Not stated on the pricing page</td><td>Not published</td></tr><tr><td>AWS Glue</td><td>Cloud service</td><td>Data processing unit (DPU) hours</td><td>None for ETL jobs</td><td>$0.44 per DPU-hour, or $0.308 on Glue 6.0 and above (US East, Ohio)</td></tr><tr><td>Azure Data Factory</td><td>Cloud service</td><td>Activity runs, copy hours, data flow hours</td><td>None listed for activity runs or copying</td><td>$1 per 1,000 activity runs; $0.25 per Data Integration Unit (DIU) hour of copying (US East)</td></tr></tbody></table>
<p>Sources: <a href="https://fivetran.com/docs/core-concepts/usage-based-pricing/billing-and-plans" target="_blank" rel="noopener noreferrer" class="">Fivetran billing docs</a>, <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Fivetran Service Consumption Table</a>, <a href="https://airbyte.com/pricing" target="_blank" rel="noopener noreferrer" class="">Airbyte pricing</a>, <a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Hevo pricing</a>, <a href="https://skyvia.com/pricing" target="_blank" rel="noopener noreferrer" class="">Skyvia pricing</a>.</p>
<p>More sources: <a href="https://www.stitchdata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Stitch pricing</a>, <a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">Estuary pricing</a>, <a href="https://www.integrate.io/pricing/" target="_blank" rel="noopener noreferrer" class="">Integrate.io pricing</a>, <a href="https://rivery.io/pricing/" target="_blank" rel="noopener noreferrer" class="">Rivery pricing</a>, <a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS Glue pricing</a>.</p>
<p>Also: <a href="https://www.informatica.com/free-data-integration.html" target="_blank" rel="noopener noreferrer" class="">Informatica's free plan</a>, <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">Matillion pricing</a>, <a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">Qlik pricing</a> and <a href="https://meltano.com/pricing" target="_blank" rel="noopener noreferrer" class="">Meltano pricing</a>.</p>
<p>Last sources: <a href="https://azure.microsoft.com/en-us/pricing/details/data-factory/data-pipeline/" target="_blank" rel="noopener noreferrer" class="">Azure Data Factory pricing</a> and <a href="https://dlthub.com/pricing" target="_blank" rel="noopener noreferrer" class="">dltHub pricing</a>. Informatica's figure is from its <a href="https://aws.amazon.com/marketplace/pp/prodview-vetdnosd4u6oe" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace listing</a>, shown in the screenshot below, and the $0.308 Glue rate is from AWS's published <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">US East (Ohio) price list</a>. Checked October 2026.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/best-data-integration-tools-price-shapes.webp" alt="Some tools print a price on the page, while others show a meter and ask for a sales call" width="1600" height="800" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/fivetran-pricing-plans.webp" alt="Fivetran pricing page showing the Free plan with 500,000 monthly active rows and Enterprise with 1-minute syncs" width="1600" height="755" class="img_ev3q"></p>
<p><em>Fivetran's pricing page, October 2026.</em></p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/best-data-integration-tools--informatica-aws-marketplace-price.webp" alt="AWS Marketplace listing for Informatica showing one bundle of 120 IPUs per month at $131,760 for 12 months" width="1600" height="1115" class="img_ev3q"></p>
<p><em>Informatica listing on AWS Marketplace, October 2026.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-each-tool-does-with-databases-and-iceberg">What each tool does with databases and Iceberg<a href="https://olake.io/compare/best-data-integration-tools/#what-each-tool-does-with-databases-and-iceberg" class="hash-link" aria-label="Direct link to What each tool does with databases and Iceberg" title="Direct link to What each tool does with databases and Iceberg" translate="no">​</a></h2>
<p>This second table covers the two limits that surprise buyers most. Apache Iceberg is an open table format that lets many query engines read the same files in a data lake. Each cell comes from the vendor's docs, linked in the tool's entry or in the cell.</p>
<table><thead><tr><th>Tool</th><th>Database change capture, per its docs</th><th>Writes Apache Iceberg, per its docs</th></tr></thead><tbody><tr><td>Fivetran</td><td>Change data capture for SQL Server (<a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">its docs</a>); Oracle, SAP and Db2 (Beta) sources need higher plans (<a href="https://fivetran.com/docs/core-concepts/usage-based-pricing/billing-and-plans" target="_blank" rel="noopener noreferrer" class="">billing docs</a>)</td><td>Yes, through its <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Managed Data Lake Service</a>; no position deletes (a type of row-level delete)</td></tr><tr><td>Airbyte</td><td>Log-based on a schedule, not continuous</td><td>Yes, <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake destination</a></td></tr><tr><td>Hevo</td><td>Log-based; streaming must be enabled by sales (<a href="https://docs.hevodata.com/pipelines/working-with-pipelines/log-based-pipelines/" target="_blank" rel="noopener noreferrer" class="">docs</a>)</td><td><a href="https://docs.hevodata.com/edge/destinations/snowflake-iceberg/" target="_blank" rel="noopener noreferrer" class="">Early Access</a>, Snowflake-managed only</td></tr><tr><td>Skyvia</td><td>We found true CDC named only for SQL Server</td><td>Not listed</td></tr><tr><td>Stitch</td><td>Log-based, scheduled</td><td>Not listed</td></tr><tr><td>Estuary</td><td>Change capture for Postgres, MySQL, MongoDB, Oracle and SQL Server, per its <a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a></td><td>Yes, <a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">needs AWS EMR Serverless and S3</a></td></tr><tr><td>Integrate.io</td><td>Lists CDC among its products (<a href="https://www.integrate.io/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>)</td><td>Not listed</td></tr><tr><td>Rivery (Boomi)</td><td>Oracle CDC on the Enterprise edition, per its <a href="https://rivery.io/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a></td><td>Not listed</td></tr><tr><td>Meltano</td><td>Depends on the tap (connector) variant</td><td>No official loader</td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>Postgres, MySQL/MariaDB, MongoDB and SQL Server, per its <a class="" href="https://olake.io/docs/">docs</a> (not tested by us)</td><td>Yes, <a class="" href="https://olake.io/docs/">Iceberg tables or Parquet files</a> are its only outputs</td></tr><tr><td>dlt</td><td>Postgres replication source is the only log-based option we found in its open-source docs</td><td>Yes, through <a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">PyIceberg</a></td></tr><tr><td>Matillion</td><td>Streaming CDC listed on the Scale edition (<a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>)</td><td>Not listed</td></tr><tr><td>Informatica</td><td>Yes for many database sources, per its <a href="https://docs.informatica.com/integration-cloud/data-ingestion-and-replication/current-version/database-ingestion-and-replication/database-ingestion-and-replication-source-and-target-types.html" target="_blank" rel="noopener noreferrer" class="">database ingestion docs</a></td><td>Describes Snowflake-managed Iceberg tables for database ingestion; the formats behind its "Open Table" target are not stated</td></tr><tr><td>Qlik Talend Cloud</td><td>Log-based from the Standard edition</td><td>Yes, Qlik Open Lakehouse</td></tr><tr><td>AWS Glue</td><td><a href="https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html" target="_blank" rel="noopener noreferrer" class="">Zero-ETL</a> from self-managed Oracle, SQL Server, MySQL and PostgreSQL goes to Redshift only</td><td>Yes, read and write</td></tr><tr><td>Azure Data Factory</td><td>Native CDC for a short list of sources</td><td>Copy activity can <a href="https://learn.microsoft.com/en-us/azure/data-factory/format-iceberg" target="_blank" rel="noopener noreferrer" class="">write Iceberg to Azure Data Lake Storage Gen2</a> only</td></tr></tbody></table>
<p>"Not listed" means we did not find it in the vendor's docs, which is not proof it is missing. Check the docs for your catalog, delete handling and who runs file cleanup.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-one-month-costs-where-the-page-lets-you-work-it-out">What one month costs, where the page lets you work it out<a href="https://olake.io/compare/best-data-integration-tools/#what-one-month-costs-where-the-page-lets-you-work-it-out" class="hash-link" aria-label="Direct link to What one month costs, where the page lets you work it out" title="Direct link to What one month costs, where the page lets you work it out" translate="no">​</a></h2>
<p>Only some vendors let you work out a monthly number from public pages. The workloads below are invented illustrations, so swap in your own, and don't read the rows as a ranking.</p>
<table><thead><tr><th>Tool</th><th>Example month (invented)</th><th>Sum at list price</th><th>Result</th></tr></thead><tbody><tr><td>Hevo Starter</td><td>5M events, billed monthly</td><td>Price shown on the pricing page</td><td>$299 ($265 on annual billing)</td></tr><tr><td>Estuary Cloud</td><td>50 GB moved, 2 connector instances</td><td>100 x $0.50 + 2 x $100</td><td>$250, before any free-tier credit</td></tr><tr><td>AWS Glue</td><td>6 DPUs for 15 minutes a day, 30 days</td><td>45 DPU-hours x $0.44, or x $0.308 on Glue 6.0 and above</td><td>$19.80, or $13.86</td></tr><tr><td>Integrate.io Core</td><td>Unlimited data volume, per its pricing page</td><td>Flat fee</td><td>$1,999 a month, but the billing period and node-hour terms above are unresolved</td></tr><tr><td>Informatica</td><td>120 IPUs a month, AWS Marketplace bundle</td><td>$131,760 / 12</td><td>$10,980</td></tr><tr><td>dltHub platform</td><td>5,000 credits included, per its pricing page</td><td>Flat fee, 12-month minimum</td><td>$12,000 a month</td></tr><tr><td>Fivetran</td><td>Needs an input we do not have</td><td>Rows per connection x the Service Consumption Table tiers</td><td>Not worked: we would need your distinct monthly active rows for each connection</td></tr><tr><td>Qlik Talend Cloud, Matillion</td><td>Not possible</td><td>Capacity or credit rate not published</td><td>Ask for a quote</td></tr></tbody></table>
<p>Sources: <a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Hevo pricing</a>, <a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">Estuary pricing</a>, <a href="https://www.integrate.io/pricing/" target="_blank" rel="noopener noreferrer" class="">Integrate.io pricing</a>, <a href="https://dlthub.com/pricing" target="_blank" rel="noopener noreferrer" class="">dltHub pricing</a>, <a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS Glue pricing</a> and the <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Service Consumption Table</a>.</p>
<p>The Informatica bundle is from its <a href="https://aws.amazon.com/marketplace/pp/prodview-vetdnosd4u6oe" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace listing</a>, and $0.308 is from AWS's <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">US East (Ohio) price list</a>. Checked October 2026.</p>
<p>Estuary's row counts the 50 GB twice, once in and once out, because <a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">Estuary's own pricing example</a> does: 800 GB and 2 connector instances show as $1,000 a month. On Fivetran, the <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Service Consumption Table</a> says Standard starts at $495 per million monthly active rows (MAR) plus a $5 base charge for the first tier.</p>
<p>These sums cover each vendor's own meter and nothing else. Glue jobs also need storage and a catalog, and Estuary's Iceberg connector needs a Spark application on AWS and an S3 bucket, which AWS bills separately. Airbyte Core, Meltano, dlt and OLake Go have no software fee, but you pay for servers and staff time.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-choose">How to choose<a href="https://olake.io/compare/best-data-integration-tools/#how-to-choose" class="hash-link" aria-label="Direct link to How to choose" title="Direct link to How to choose" translate="no">​</a></h2>
<p>Four questions, asked in order. Stop as soon as you're down to two or three tools.</p>
<ol>
<li class=""><strong>Who will run it?</strong> If nobody on your team can, look at the vendor-run tools. If you have engineers who will, add Airbyte Core, Meltano, dlt and OLake Go.</li>
<li class=""><strong>What are the sources?</strong> Mostly SaaS apps? Look at Fivetran, Hevo or Airbyte. Databases that need fresh data point to Estuary, Qlik Talend Cloud or Fivetran Enterprise.</li>
<li class=""><strong>Where must the data land?</strong> A warehouse is easy almost everywhere. Iceberg tables on your own catalog shrink the field to the second table above, and each tool there has limits.</li>
<li class=""><strong>Can you price it?</strong> If the meter counts rows, events or credits, price your busiest month, not your average one. If the vendor won't print a rate, ask for a written quote that states your volume.</li>
</ol>
<p>If your sources include databases, put three more questions to each vendor and ask them to point at a docs page:</p>
<ul>
<li class=""><strong>What happens if the change log is gone before the tool reads it?</strong> Databases keep change records for a limited time. Fivetran's <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">SQL Server page</a> says the default window is 3 days and recommends 7.</li>
<li class=""><strong>Does it run continuously or on a schedule?</strong> Airbyte's CDC docs say syncs are scheduled, and Hevo's docs say streaming must be enabled through its sales team. Both are linked in their entries below.</li>
<li class=""><strong>Which Iceberg features does the writer skip?</strong> Fivetran's Managed Data Lake Service page (linked in the table above) says it does not support position deletes for Iceberg tables. Other tools list their own limits, so read the destination page before you sign.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/best-data-integration-tools-which-fits.webp" alt="Vendor-run tools suit SaaS sources and small teams, while self-run and cloud-native tools suit engineers or single-cloud shops" width="1600" height="720" class="img_ev3q"></p>
<section class="root_PuUS" aria-labelledby="_R_alqfdbih_-h"><header><h3 id="_R_alqfdbih_-h" class="title_QNC9" tabindex="-1">Which data integration tool fits you?</h3></header><div class="progress_EyIk" role="progressbar" aria-valuemin="1" aria-valuemax="5" aria-valuenow="1" aria-label="Quiz progress"><span style="width:0%"></span></div><p class="count_OugS">Question <!-- -->1<!-- --> of <!-- -->5</p><p id="_R_alqfdbih_-q" class="question_IKMS">Who will run it?</p><p class="hint_x3sW">The post's trade: a vendor-run tool costs money and saves staff time, while a self-run tool costs staff time.</p><div role="radiogroup" aria-labelledby="_R_alqfdbih_-q" class="options_xbjx"><button type="button" role="radio" aria-checked="false" tabindex="0" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">A</span><span class="optLabel_qDTb">A vendor runs it for me</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">B</span><span class="optLabel_qDTb">My team runs it on our own servers</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">C</span><span class="optLabel_qDTb">Pipelines should live as code in Git</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">D</span><span class="optLabel_qDTb">I live inside one cloud</span></button></div><div class="actions_XZHX"><button type="button" class="primary_KVNI" disabled="">Next</button></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-16-best-data-integration-tools">The 16 best data integration tools<a href="https://olake.io/compare/best-data-integration-tools/#the-16-best-data-integration-tools" class="hash-link" aria-label="Direct link to The 16 best data integration tools" title="Direct link to The 16 best data integration tools" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="vendor-run-tools-for-databases-and-apps">Vendor-run tools for databases and apps<a href="https://olake.io/compare/best-data-integration-tools/#vendor-run-tools-for-databases-and-apps" class="hash-link" aria-label="Direct link to Vendor-run tools for databases and apps" title="Direct link to Vendor-run tools for databases and apps" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-fivetran-best-for-saas-sources-and-a-hands-off-setup">1. Fivetran: best for SaaS sources and a hands-off setup<a href="https://olake.io/compare/best-data-integration-tools/#1-fivetran-best-for-saas-sources-and-a-hands-off-setup" class="hash-link" aria-label="Direct link to 1. Fivetran: best for SaaS sources and a hands-off setup" title="Direct link to 1. Fivetran: best for SaaS sources and a hands-off setup" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-fivetran.webp" alt="Fivetran home page showing its headline and main navigation" width="1600" height="826" class="img_ev3q"></p>
<p><em>Fivetran home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: monthly active rows (MAR) per connection</li>
<li class="">Free option: Free plan up to 500,000 MAR</li>
</ul>
<p>Fivetran runs pre-built connectors that copy data from apps, databases and files into a warehouse or lake. We did not test any of it.</p>
<p><a href="https://fivetran.com/docs/core-concepts/usage-based-pricing/billing-and-plans" target="_blank" rel="noopener noreferrer" class="">Fivetran's billing docs</a> say pay-as-you-go adds a $5 base charge to each connection that uses 1 to 1M rows, with a $12,000 minimum for annual contracts. Per-row list rates are in its <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Service Consumption Table</a>: Standard starts at $495 per million MAR, then falls to $170 per extra million from 1 million MAR, before discounts.</p>
<p><strong>What's good</strong></p>
<ul>
<li class=""><a href="https://www.fivetran.com/pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> claims 700+ connectors and 200+ activation destinations (reverse ETL), with 15-minute syncs on Standard and 1-minute syncs on Enterprise. We did not count the connectors or test the sync times, so ask for a trial on your own sources.</li>
<li class="">Per its <a href="https://fivetran.com/docs/core-concepts/usage-based-pricing/billing-and-plans" target="_blank" rel="noopener noreferrer" class="">billing docs</a>, the Free plan has all Standard features up to 500,000 connector MAR, 3,500 activation MAR and 5,000 model runs a month, and annual contracts carry a built-in 5% discount.</li>
<li class="">Its <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Service Consumption Table</a> puts each connection on its own volume curve. Standard list rates run from $495 per million MAR for the smallest connections to $170 per million from 1M MAR, $58 from 4M and $19.70 from 16M, before discounts.</li>
<li class="">Its <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">SQL Server page</a> lists four incremental sync methods: change tracking, change data capture, Binary Log Reader and Teleport Sync. Teleport Sync compares row hashes between syncs instead of reading the transaction log, and the page suggests it when enabling change tracking or CDC is not feasible.</li>
<li class="">Its <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Managed Data Lake Service docs</a> say your data stays in your own cloud storage account (Amazon S3, Azure Data Lake Storage or Google Cloud Storage), and that Fivetran always creates Iceberg table metadata and manages the catalogs and maintenance, with snapshot cleanup once a day.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Per its <a href="https://fivetran.com/docs/core-concepts/usage-based-pricing/billing-and-plans" target="_blank" rel="noopener noreferrer" class="">billing docs</a>, Oracle, SAP and Db2 (Beta) database sources are only on Enterprise and Business Critical, so the free plan can't use them, and its High-Volume Agent connectors for Oracle and SQL Server are listed for those two plans as well.</li>
<li class="">The pricing page prints no per-row rate (the list rates are in the Service Consumption Table), and since January 1, 2026 deleted rows count as paid MAR, <a href="https://fivetran.com/docs/core-concepts/usage-based-pricing/pricing-updates/2026-pricing-updates" target="_blank" rel="noopener noreferrer" class="">per Fivetran's pricing update</a>.</li>
<li class="">The <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Service Consumption Table</a> says you cannot combine MAR across connections for a better rate, so each connection pays its own base spend, such as the $500.00 the table lists at the 1M MAR tier on Standard.</li>
<li class="">On SQL Server, the <a href="https://fivetran.com/docs/connectors/databases/sql-server" target="_blank" rel="noopener noreferrer" class="">same page</a> gives a default CDC retention window of 3 days (7 recommended). With CDC on, column type changes carry over, but renamed columns, new tables and new columns do not, and new ones need a new CDC instance.</li>
<li class="">Its Managed Data Lake Service page lists no support for position deletes on Iceberg tables, and on AWS lakes none for the S3 Glacier Flexible Retrieval, Glacier Deep Archive and Intelligent-Tiering archive tiers (<a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">The same docs say orphan files are moved to an <code>orphans</code> folder on the second and fourth Saturday of each month, and that deleting or editing that folder can permanently damage your tables.</li>
</ul>
<p><strong>What users say:</strong> A commenter on a <a href="https://news.ycombinator.com/item?id=45568842" target="_blank" rel="noopener noreferrer" class="">Hacker News thread</a> about the Fivetran and dbt Labs merger wrote in October 2025, "Fivetran is convenient but absurdly expensive."</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-airbyte-best-for-a-big-connector-list-you-can-self-host-or-rent">2. Airbyte: best for a big connector list you can self-host or rent<a href="https://olake.io/compare/best-data-integration-tools/#2-airbyte-best-for-a-big-connector-list-you-can-self-host-or-rent" class="hash-link" aria-label="Direct link to 2. Airbyte: best for a big connector list you can self-host or rent" title="Direct link to 2. Airbyte: best for a big connector list you can self-host or rent" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-airbyte.webp" alt="Airbyte home page showing its headline and main navigation" width="1600" height="910" class="img_ev3q"></p>
<p><em>Airbyte home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: credits on Cloud, nothing for Core</li>
<li class="">Free option: Core is free; Cloud has a 14-day free trial</li>
</ul>
<p>Airbyte is one product wearing several hats: Core (self-run), Cloud (Standard, Plus and Pro) and Enterprise Flex (hybrid). On <a href="https://airbyte.com/pricing" target="_blank" rel="noopener noreferrer" class="">its pricing page</a>, Cloud has a 14-day free trial, Standard starts at $20 a month with 5 credits and extra credits at $5 each, and Plus starts at $189 a month for 40 credits. Pro and Enterprise Flex show "Custom".</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Core has no credit meter, so you pay for servers and staff time instead. Cloud is the rented option, billed in credits.</li>
<li class="">Per its <a href="https://docs.airbyte.com/platform/developer-guides/licenses/license-faq" target="_blank" rel="noopener noreferrer" class="">licence FAQ</a>, anyone can use Airbyte free of charge and run it at scale on their own infrastructure, with "no limitations exist on volume, number of users, number of connections, etc." for open source users.</li>
<li class="">Its <a href="https://airbyte.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists 700+ connectors on all four plans, with a maximum sync frequency of 1 hour on Standard, 15 minutes on Plus and 5 minutes on Pro and Enterprise Flex.</li>
<li class="">Its <a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">CDC docs</a> list current support for Postgres, MySQL, SQL Server, MongoDB, Oracle, SAP HANA and IBM Db2.</li>
<li class="">Its <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake docs</a> say the connector writes Iceberg tables to S3 or S3-compatible storage through a REST, AWS Glue, Nessie or Polaris catalog, and its Append + Deduped mode is merge-on-read on the stream's primary keys.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class=""><a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">Airbyte's CDC docs</a> say "We do not treat CDC sources as infinite streaming sources", so syncs run on a schedule. Its <a href="https://docs.airbyte.com/platform/using-airbyte/core-concepts/sync-schedules" target="_blank" rel="noopener noreferrer" class="">sync schedules page</a> lists hourly as the shortest, bar 15 minutes on Cloud Plus.</li>
<li class="">The same CDC docs say CDC incremental needs primary keys for most sources, changes made by TRUNCATE or ALTER do not appear in the logs and so not in the destination, and a refresh is required after you add a table to a CDC connection.</li>
<li class="">Core uses the Elastic License 2.0, which its <a href="https://docs.airbyte.com/platform/developer-guides/licenses/license-faq" target="_blank" rel="noopener noreferrer" class="">licence FAQ</a> says bars selling a hosted Airbyte service.</li>
<li class="">Its <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake docs</a> say the connector never rewrites existing Iceberg data files, so it handles only adding or removing a column, widening a column and changing the primary key. Objects and unions are written as serialized JSON strings.</li>
<li class="">The same page does not say who handles compaction or snapshot expiry, and it cautions that compaction running during a truncate refresh sync deletes files from the current generation and causes data loss.</li>
<li class="">It also warns that Snowflake does not recognize native Iceberg row-level deletes for tables in external catalogs such as Glue, so queries there return all versions of a record.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/best-data-integration-tools--airbyte-pricing-plans.webp" alt="Airbyte pricing page with Standard at $20 a month and Plus starting at $189 a month" width="1600" height="969" class="img_ev3q"></p>
<p><em>Airbyte's pricing page, October 2026.</em></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-hevo-best-for-a-low-entry-price-and-a-free-plan">3. Hevo: best for a low entry price and a free plan<a href="https://olake.io/compare/best-data-integration-tools/#3-hevo-best-for-a-low-entry-price-and-a-free-plan" class="hash-link" aria-label="Direct link to 3. Hevo: best for a low entry price and a free plan" title="Direct link to 3. Hevo: best for a low entry price and a free plan" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-hevo.webp" alt="Hevo Data home page showing its headline and main navigation" width="1600" height="904" class="img_ev3q"></p>
<p><em>Hevo Data home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: events (each record inserted, updated or deleted)</li>
<li class="">Free option: Free, up to 1M events a month and 5 users</li>
</ul>
<p>Hevo is a managed service for ETL and ELT pipelines, and it's one of the few that shows entry prices up front. On <a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">its pricing page</a>, Starter shows $265 a month billed annually, or $299 a month billed monthly, for 5M events. Professional shows $750 a month billed annually, or $849 a month billed monthly, for 20M events.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its page shows a free plan (labelled "free forever for limited connectors") and entry prices up front. The 24/7 support and 150+ connector figures on the Starter card are Hevo's claims, which we did not test.</li>
<li class="">Per <a href="https://docs.hevodata.com/pipelines/working-with-pipelines/log-based-pipelines/" target="_blank" rel="noopener noreferrer" class="">its docs</a>, log-based pipelines read BinLog (MySQL), logical replication (PostgreSQL), Streams (DynamoDB), change streams or OpLog (MongoDB), Change Tracking (SQL Server) and redo logs (Oracle).</li>
<li class=""><a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> shows the Free plan with up to 5 users, and Starter adding up to 10 users, a dbt integration and SSH/SSL.</li>
<li class="">Its <a href="https://docs.hevodata.com/edge/destinations/snowflake-iceberg/" target="_blank" rel="noopener noreferrer" class="">Snowflake Iceberg docs</a> say the table data and metadata files are stored in your Amazon S3 bucket, and that external engines such as Spark and Trino can read the tables through the Horizon Iceberg REST Catalog API.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class=""><a href="https://docs.hevodata.com/pipelines/working-with-pipelines/log-based-pipelines/" target="_blank" rel="noopener noreferrer" class="">Hevo's docs</a> say streaming pipelines must be enabled through its sales team and are not available for SQL Server or DynamoDB.</li>
<li class=""><a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> shows 1-hour scheduling on the Free and Starter plans, and "limited connectors" on Free against all connectors on Starter and above.</li>
<li class="">Usage above your plan's event quota is billed on-demand on top of the plan, and the page shows no rate for it (<a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing FAQ</a>).</li>
<li class="">Its Iceberg option is Early Access and Snowflake-managed only, per <a href="https://docs.hevodata.com/edge/destinations/snowflake-iceberg/" target="_blank" rel="noopener noreferrer" class="">its docs</a>. It must be enabled through a Hevo account executive or Support, and needs a Snowflake account, warehouse and database, an S3 bucket with an IAM policy, and a Snowflake external volume.</li>
<li class="">The log-based docs list troubleshooting pages for "Pipeline failure due to BinLog expiry" (MySQL) and "Redo Log expiry" (Oracle), so log retention on your source matters (<a href="https://docs.hevodata.com/pipelines/working-with-pipelines/log-based-pipelines/" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">We also found no self-hosted edition.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/hevo-pricing-plans.webp" alt="Hevo pricing page with the Free plan at $0 and Starter at $265 a month billed annually" width="1600" height="1200" class="img_ev3q"></p>
<p><em>Hevo's pricing page, October 2026.</em></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-skyvia-best-for-small-teams-that-want-a-no-code-tool">4. Skyvia: best for small teams that want a no-code tool<a href="https://olake.io/compare/best-data-integration-tools/#4-skyvia-best-for-small-teams-that-want-a-no-code-tool" class="hash-link" aria-label="Direct link to 4. Skyvia: best for small teams that want a no-code tool" title="Direct link to 4. Skyvia: best for small teams that want a no-code tool" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-skyvia.webp" alt="Skyvia home page showing its headline and main navigation" width="1600" height="896" class="img_ev3q"></p>
<p><em>Skyvia home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: records per month</li>
<li class="">Free option: Free plan, 10k records a month, once a day</li>
</ul>
<p>Skyvia is a no-code cloud service from Devart, so you click rather than code. <a href="https://skyvia.com/pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> shows Basic at $79 a month with the annual toggle and $99 monthly.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">A low entry price and a no-code builder.</li>
<li class="">Its <a href="https://skyvia.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> shows unlimited connections and users on all four plans, with the maximum run frequency at once a day on Free and Basic, once an hour on Standard and once a minute on Professional.</li>
<li class="">Scheduled integrations run 2 on Free, 5 on Basic, 50 on Standard and unlimited on Professional, and schedules expire after 30 days on Free only.</li>
<li class="">The page has a Monthly/Annually toggle labelled 20% off above the plan cards.</li>
<li class="">Enterprise is a custom annual package with a dedicated virtual machine, unlimited record volume and priority support, with a quote on request.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">We found true CDC named only for SQL Server in its docs, and no log-based CDC for other databases.</li>
<li class="">We found no Iceberg destination in its docs.</li>
<li class="">Per the <a href="https://skyvia.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>, the Free and Basic plans run at most once a day and list simple mapping features, with advanced mapping starting at Standard.</li>
<li class="">Free allows 2 scheduled integrations and Basic 5, while Standard allows 50 (<a href="https://skyvia.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">Additional records are billed beyond each plan's allowance at $0.06 and $0.02 per 1,000 records, but the page text does not label which plan each rate belongs to.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-stitch-best-for-simple-row-based-loading-with-an-owner-change-to-know">5. Stitch: best for simple row-based loading, with an owner change to know<a href="https://olake.io/compare/best-data-integration-tools/#5-stitch-best-for-simple-row-based-loading-with-an-owner-change-to-know" class="hash-link" aria-label="Direct link to 5. Stitch: best for simple row-based loading, with an owner change to know" title="Direct link to 5. Stitch: best for simple row-based loading, with an owner change to know" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-stitch.webp" alt="Stitch home page showing its headline and main navigation" width="1600" height="1092" class="img_ev3q"></p>
<p><em>Stitch home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: replicated rows per month</li>
<li class="">Free option: none, 14-day trial</li>
</ul>
<p><a href="https://www.stitchdata.com/" target="_blank" rel="noopener noreferrer" class="">Its home page</a> says Stitch is now part of Qlik and tells new users to try Qlik Talend Cloud. <a href="https://www.stitchdata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> shows Standard from $100 a month for 5M rows, Advanced at $1,500 a month billed annually, and Premium at $3,000 a month billed annually.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its <a href="https://www.stitchdata.com/docs/replication/replication-methods/log-based-incremental" target="_blank" rel="noopener noreferrer" class="">log-based replication docs</a> name MySQL, PostgreSQL, MongoDB, SQL Server, Oracle and DynamoDB.</li>
<li class="">Its <a href="https://www.stitchdata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing FAQ</a> says you set the replication frequency for each integration, from minutes to hours, and every user can use cron-expression scheduling.</li>
<li class="">The Standard card lists 5 to 300 million rows a month, 5 users and 7-day extraction log retention, and Premium lists 1 billion rows a month and 5 destinations.</li>
<li class=""><a href="https://www.stitchdata.com/" target="_blank" rel="noopener noreferrer" class="">Its home page</a> advertises 130+ data sources, a vendor claim we did not count.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">We found no Iceberg in its destination list.</li>
<li class="">The <a href="https://www.stitchdata.com/" target="_blank" rel="noopener noreferrer" class="">home page</a> says Stitch is now part of Qlik and points new users to Qlik Talend Cloud, and it publishes no end-of-life date.</li>
<li class="">Per its <a href="https://www.stitchdata.com/docs/replication/replication-methods/log-based-incremental" target="_blank" rel="noopener noreferrer" class="">log-based docs</a>, log-based replication on PostgreSQL works only with a master instance, some cloud versions of the supported databases may not support it, and changes made by event types the database does not write to its log are not detected.</li>
<li class="">The <a href="https://www.stitchdata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists 1 destination and 10 standard sources on Standard, and "Unlimited (Enterprise sources)" on Advanced, so connectors marked Enterprise sit in a higher tier.</li>
<li class="">The page shows no overage rate per row beyond a plan's allowance, and Advanced and Premium are billed annually, so you commit for a year at a time.</li>
<li class="">Support is chat and email during regional business hours (8 a.m. to 8 p.m. Eastern, Monday to Friday), per the same FAQ.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-estuary-best-for-streaming-and-batch-from-one-tool">6. Estuary: best for streaming and batch from one tool<a href="https://olake.io/compare/best-data-integration-tools/#6-estuary-best-for-streaming-and-batch-from-one-tool" class="hash-link" aria-label="Direct link to 6. Estuary: best for streaming and batch from one tool" title="Direct link to 6. Estuary: best for streaming and batch from one tool" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-estuary.webp" alt="Estuary Flow home page showing its headline and main navigation" width="1600" height="937" class="img_ev3q"></p>
<p><em>Estuary Flow home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: $0.50 per GB plus connector instances</li>
<li class="">Free option: 10 GB a month and 2 connector instances</li>
</ul>
<p>Estuary captures data into collections and sends it on to destinations, with real-time and batch modes. The fee structure has a quirk. On the Cloud plan the first six connector instances are $100 a month each, then $50 each, according to <a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">its pricing page</a>.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its pricing page FAQ lists Postgres, MySQL, MongoDB, Oracle and SQL Server among supported databases and says change capture streams changes in real time.</li>
<li class="">The <a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">same FAQ</a> says a pipeline starts with a historical backfill and then switches to real-time CDC, and that you can disable or scope the backfill.</li>
<li class="">The Cloud plan lists "Millisecond latency or batch, no extra charge" and a 30-day free trial that starts on its own when you pass the free tier, with no credit card.</li>
<li class="">Adding a target means paying only for that target and the data sent to it, with no need to re-extract from each source (<a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing FAQ</a>).</li>
<li class="">Its <a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Iceberg docs</a> support AWS Glue catalogs and S3 table buckets, and let you set Glue Table Optimizers for compaction, snapshot retention and orphan file deletion.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Its Iceberg connector (docs linked in the table above) runs Spark jobs on a compute system you configure, and the docs list an AWS EMR Serverless Spark application (release emr-7.7.0), an S3 bucket and dedicated IAM roles as prerequisites.</li>
<li class="">Each connector instance adds a monthly fee on top of the per-GB charge, and those fees add up.</li>
<li class="">The <a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Iceberg docs</a> label the section for REST catalogs other than AWS Glue as Beta, and say only REST catalogs that use Amazon S3 storage are supported, with GCP and Azure planned.</li>
<li class="">The same page says nested types are not currently supported, and array and object fields are written as string columns.</li>
<li class="">Compaction through the Glue optimizer defaults to off, and Hard Delete is off by default, so deletes in the source stay as soft deletes unless you change it.</li>
<li class="">The Cloud plan lists standard support through community Slack and email, and custom SLA terms appear only in the Enterprise column (<a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/estuary-pricing.webp" alt="Estuary pricing page showing a free Developer plan and the Cloud plan at $0.50 per GB plus $100 per connector" width="1600" height="1007" class="img_ev3q"></p>
<p><em>Estuary's pricing page, October 2026.</em></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-integrateio-best-for-a-flat-fee-and-visual-pipelines">7. Integrate.io: best for a flat fee and visual pipelines<a href="https://olake.io/compare/best-data-integration-tools/#7-integrateio-best-for-a-flat-fee-and-visual-pipelines" class="hash-link" aria-label="Direct link to 7. Integrate.io: best for a flat fee and visual pipelines" title="Direct link to 7. Integrate.io: best for a flat fee and visual pipelines" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-integrate-io.webp" alt="Integrate.io home page showing its headline and main navigation" width="1600" height="876" class="img_ev3q"></p>
<p><em>Integrate.io home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: flat fee, "unlimited data volumes" on the pricing page</li>
<li class="">Free option: 14-day trial</li>
</ul>
<p>Per <a href="https://www.integrate.io/pricing/" target="_blank" rel="noopener noreferrer" class="">its pricing page</a>, Integrate.io sells ETL, ELT, CDC and reverse ETL (sending warehouse data back to apps). The page lists Core at $1,999 a month with a 60-second pipeline frequency, and the card shows only "/mo" with no billing period. Its <a href="https://www.integrate.io/terms/" target="_blank" rel="noopener noreferrer" class="">terms</a> describe paid plans with prepaid node hours that are "monthly and billed annually", so ask in writing what Core includes.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">A flat list price, so there is no per-row meter on the pricing page.</li>
<li class="">Per <a href="https://www.integrate.io/pricing/" target="_blank" rel="noopener noreferrer" class="">its pricing page</a>, the Core card lists unlimited data volumes, pipelines and connectors, full platform access, 60-second pipeline frequency and 30-day onboarding.</li>
<li class="">Its FAQ says it covers 150+ sources and destinations, including Salesforce, HubSpot, Shopify, Stripe, MySQL, PostgreSQL, MongoDB, Snowflake, BigQuery and Redshift.</li>
<li class="">The FAQ also says every plan includes 24/7 support with a 2-minute average first response, a vendor claim we did not test.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">We found no Iceberg destination in its docs.</li>
<li class="">Its <a href="https://www.integrate.io/terms/" target="_blank" rel="noopener noreferrer" class="">terms</a> say subscription periods are monthly and billed annually and renew automatically for a year unless you give notice, that fees are non-refundable, and that you pay the whole subscription period even if you stop using the service.</li>
<li class="">The same terms have a fair usage policy: usage far above its norms may be reviewed, with remedies that include service limitations or pricing changes, which sits beside the pricing page's "No limits on data volume" header.</li>
<li class="">The terms also allow overage fees if you exceed the node hours in your plan, and let the company revise fees with at least 7 days' notice on a paid plan.</li>
<li class="">After the free trial, an account with no paid plan is downgraded to a free plan that cannot run jobs, and the terms say you may lose access to stored packages and schedules.</li>
<li class="">The "Design Your Plan" card on the <a href="https://www.integrate.io/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> shows no price.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-rivery-boomi-data-integration-best-for-credit-based-elt">8. Rivery (Boomi Data Integration): best for credit-based ELT<a href="https://olake.io/compare/best-data-integration-tools/#8-rivery-boomi-data-integration-best-for-credit-based-elt" class="hash-link" aria-label="Direct link to 8. Rivery (Boomi Data Integration): best for credit-based ELT" title="Direct link to 8. Rivery (Boomi Data Integration): best for credit-based ELT" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-rivery.webp" alt="Rivery (Boomi Data Integration) home page showing its headline and main navigation" width="1600" height="914" class="img_ev3q"></p>
<p><em>Rivery (Boomi Data Integration) home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: credits</li>
<li class="">Free option: 14 days or 1,000 credits</li>
</ul>
<p>Rivery now carries the Boomi Data Integration name. <a href="https://rivery.io/pricing/" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> counts in Boomi Data Unit credits and lists $0.9 per credit pay as you go on the Base edition, with database sources charged by bytes moved.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">It publishes a credit price on its pricing page.</li>
<li class="">Per <a href="https://rivery.io/pricing/" target="_blank" rel="noopener noreferrer" class="">its pricing page</a>, database, file and webhook sources are charged only on data transferred, at 1 credit per 100MB regardless of how often you run. Its example of 1,725MB a month from Postgres to a warehouse is 17.25 credits.</li>
<li class="">The same page says it does not charge per connector or per user, and every data source is available on every edition.</li>
<li class="">The Base edition lists one environment, two users and unlimited connections, and the maximum sync frequency is 60 minutes on Base, 15 on Professional and Pro Plus, and 5 on Enterprise.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Its pricing page puts Oracle CDC on the Enterprise edition only.</li>
<li class="">We found no Apache Iceberg destination in its docs.</li>
<li class="">Log-based CDC is charged 2 credits per 100MB, double the 1 credit per 100MB for standard database replication (<a href="https://rivery.io/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">API sources are charged by run: 0.5 credit each time data is ingested from a single output table, 0.5 credit per 50MB above 50MB per run, and 0.5 credit for a run that finds no data.</li>
<li class="">Professional shows only "Start for free", and Pro Plus and Enterprise show "Contact Sales", so only the Base edition has a printed price.</li>
<li class="">The $0.9 per credit rate is for monthly billing, the page says annual billing saves more but prints no annual price, and Base is limited to 2 users and 1 environment.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="open-source-tools-you-run-yourself">Open-source tools you run yourself<a href="https://olake.io/compare/best-data-integration-tools/#open-source-tools-you-run-yourself" class="hash-link" aria-label="Direct link to Open-source tools you run yourself" title="Direct link to Open-source tools you run yourself" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="9-meltano-best-for-pipelines-kept-as-code">9. Meltano: best for pipelines kept as code<a href="https://olake.io/compare/best-data-integration-tools/#9-meltano-best-for-pipelines-kept-as-code" class="hash-link" aria-label="Direct link to 9. Meltano: best for pipelines kept as code" title="Direct link to 9. Meltano: best for pipelines kept as code" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-meltano.webp" alt="Meltano home page showing its headline and main navigation" width="1600" height="883" class="img_ev3q"></p>
<p><em>Meltano home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: none for the software</li>
<li class="">Licence: open source</li>
<li class="">Owner: Matatika (<a href="https://meltano.com/pricing" target="_blank" rel="noopener noreferrer" class="">its pricing page</a> calls it "an open source project by Matatika")</li>
</ul>
<p>Meltano is the option that lives in Git. <a href="https://meltano.com/pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> says it is "Open source and free to use, with paid support options". It runs Singer taps, small programs that pull data from a source, and keeps settings in Git files.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">No software fee, so you pay for servers and staff time instead.</li>
<li class="">Per <a href="https://meltano.com/pricing" target="_blank" rel="noopener noreferrer" class="">its pricing page</a>, every plan, including the open-source one, gets the full library of 600+ connectors, and pipelines are Git-native.</li>
<li class="">The Meltano Cloud plans list 200 compute hours a month on Starter (25 workspaces, unlimited users, reverse ETL included), 2,000 on Growth and 5,000 on Scale, with 8 and 15 hours of engineering on demand on Growth and Scale.</li>
<li class="">Paid support options are listed beside the free software.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">CDC depends on the tap variant, and its Hub lists no official Iceberg loader.</li>
<li class="">The same page says self-hosted Meltano is "not really suited for production teams unless you have a dedicated DevOps crew."</li>
<li class="">Its FAQ says that with Meltano Open you manage your own infrastructure, monitoring and uptime.</li>
<li class="">No dollar price is shown on any Meltano Cloud plan, and Enterprise is custom, so budgeting a hosted plan needs a quote.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="10-olake-go-best-for-database-changes-into-iceberg-or-parquet-on-your-own-storage">10. OLake Go: best for database changes into Iceberg or Parquet on your own storage<a href="https://olake.io/compare/best-data-integration-tools/#10-olake-go-best-for-database-changes-into-iceberg-or-parquet-on-your-own-storage" class="hash-link" aria-label="Direct link to 10. OLake Go: best for database changes into Iceberg or Parquet on your own storage" title="Direct link to 10. OLake Go: best for database changes into Iceberg or Parquet on your own storage" translate="no">​</a></h4>
<img src="https://olake.io/img/logo/olake-blue-with-text.svg" alt="OLake" height="32" style="display:block;margin:2px 0 14px">
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-olake.webp" alt="OLake home page showing its headline and main navigation" width="1600" height="957" class="img_ev3q"></p>
<p><em>OLake home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: none for the software</li>
<li class="">Free option: open source under Apache 2.0, you pay for your own servers and storage</li>
<li class="">Runs on: your own infrastructure</li>
</ul>
<p>OLake Go is an open-source tool, <a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="">Apache 2.0 on GitHub</a>, that copies database tables into Apache Iceberg tables or Parquet files. You run it yourself with <a class="" href="https://olake.io/docs/install/docker-cli/">Docker</a>, <a class="" href="https://olake.io/docs/install/kubernetes/">Helm on Kubernetes</a>, the <a class="" href="https://olake.io/docs/install/olake-ui/">OLake UI</a> or the command line.</p>
<p>Docs: <a class="" href="https://olake.io/docs/connectors/postgres/">Postgres</a>, <a class="" href="https://olake.io/docs/connectors/mysql/">MySQL</a>, <a class="" href="https://olake.io/docs/connectors/mongodb/">MongoDB</a>, <a class="" href="https://olake.io/docs/connectors/mssql/">SQL Server</a>. We did not test any connector.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its <a class="" href="https://olake.io/docs/">docs</a> list change data capture for Postgres, MySQL (including MariaDB), MongoDB and SQL Server, and Oracle, Db2, S3 and Kafka sources without it.</li>
<li class="">It writes Iceberg tables or Parquet files to Amazon S3, MinIO or Google Cloud Storage, and its <a class="" href="https://olake.io/docs/understanding/compatibility-catalogs/">catalogs page</a> lists the Iceberg catalogs.</li>
<li class="">The <a class="" href="https://olake.io/docs/">docs</a> list four sync modes: Full Refresh, Full Refresh + Incremental, Full Refresh + CDC and CDC Only. For its database sources, one tool does the first load and then the change capture.</li>
<li class="">Syncs split large tables into chunks that are read in parallel, and they resume automatically from the last checkpoint after an interruption (<a class="" href="https://olake.io/docs/">docs</a>).</li>
<li class="">For the Iceberg destination, it uses a two-phase commit during full refresh, incremental and CDC (MongoDB, Postgres, MySQL, SQL Server), tracking per-chunk commit status so syncs avoid duplicate writes (<a class="" href="https://olake.io/docs/">docs</a>).</li>
<li class="">In Upsert mode it can write equality deletes, positional deletes or Iceberg v3 deletion vectors (<a class="" href="https://olake.io/docs/">docs</a>), and its <a class="" href="https://olake.io/docs/writers/iceberg/partitioning/">partitioning guide</a> covers identity, year, month, day, hour, bucket and truncate transforms.</li>
</ul>
<p><strong>Good to know</strong></p>
<ul>
<li class="">It reads databases, Kafka and S3 only: there are no SaaS-app sources and no transformations.</li>
</ul>
<p><strong>Bottom line:</strong> Pick it if you run Postgres, MySQL, MongoDB or SQL Server and want the data in Iceberg or Parquet on storage you own. For support or enterprise terms, <a class="" href="https://olake.io/contact/">contact the OLake team</a>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="11-dlt-best-for-python-teams-that-want-a-library">11. dlt: best for Python teams that want a library<a href="https://olake.io/compare/best-data-integration-tools/#11-dlt-best-for-python-teams-that-want-a-library" class="hash-link" aria-label="Direct link to 11. dlt: best for Python teams that want a library" title="Direct link to 11. dlt: best for Python teams that want a library" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-dlt.webp" alt="dlt / dltHub home page showing its headline and main navigation" width="1600" height="935" class="img_ev3q"></p>
<p><em>dlt / dltHub home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: none for the library</li>
<li class="">Licence: Apache 2.0</li>
</ul>
<p>dlt (data load tool) is a Python library you add to a script, so there's no server to sign up for. <a href="https://dlthub.com/pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> says the library stays Apache 2.0 and lists the dltHub platform at $12,000 a month with a 12-month minimum. One line in its FAQ says $11,900, so we quote the headline figure.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Sources cover SQL databases, REST APIs and files, and its <a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">Iceberg docs</a> say Iceberg tables are written through PyIceberg.</li>
<li class="">The same docs say dlt uses PyIceberg's catalog loading, so it works with the catalogs PyIceberg supports, including REST and SQL catalogs, and supports upsert and insert-only merge strategies.</li>
<li class="">Iceberg partitioning is set with an <code>iceberg_adapter</code> that offers year, month, day, hour, bucket and truncate transforms.</li>
<li class="">Its <a href="https://dlthub.com/docs/dlt-ecosystem/verified-sources/pg_replication" target="_blank" rel="noopener noreferrer" class="">Postgres replication docs</a> say it reads changes through logical decoding with the built-in pgoutput plugin, and describe Debezium as a route for CDC from other databases.</li>
<li class=""><a href="https://dlthub.com/pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> says "The dlt library stays Apache 2.0, always".</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Iceberg needs a catalog setting, and without one dlt falls back to an in-memory SQLite catalog.</li>
<li class="">Its <a href="https://dlthub.com/docs/dlt-ecosystem/verified-sources/pg_replication" target="_blank" rel="noopener noreferrer" class="">Postgres replication source</a> is the log-based option we found in the open-source docs, and it does not support the scd2 merge strategy.</li>
<li class="">Per the Iceberg docs, partition evolution is not supported, upsert runs in chunks of 1000 rows until a later PyIceberg release, and schema changes are not supported with upsert on PyIceberg 0.10.0.</li>
<li class="">The same docs do not support the <code>az</code> scheme with Iceberg (use <code>abfss</code>), and on Google Cloud Storage they mark service accounts as not supported.</li>
<li class="">The pricing FAQ says every paid dltHub subscription includes a licence for source-available capabilities including CDC and Apache Iceberg support, and the open-source Iceberg page does not say which features need a subscription (<a href="https://dlthub.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing FAQ</a>).</li>
</ul>
<p><strong>What users say:</strong> In a July 2026 <a href="https://seifert.substack.com/p/i-migrated-a-fivetran-pipeline-to" target="_blank" rel="noopener noreferrer" class="">newsletter post</a> about moving one pipeline off Fivetran, the author wrote "The pipeline does not reproduce Fivetran's soft-delete behavior for physical source deletes". Keep in mind that's one person's test.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="enterprise-suites">Enterprise suites<a href="https://olake.io/compare/best-data-integration-tools/#enterprise-suites" class="hash-link" aria-label="Direct link to Enterprise suites" title="Direct link to Enterprise suites" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="12-matillion-best-for-transformations-inside-a-cloud-warehouse">12. Matillion: best for transformations inside a cloud warehouse<a href="https://olake.io/compare/best-data-integration-tools/#12-matillion-best-for-transformations-inside-a-cloud-warehouse" class="hash-link" aria-label="Direct link to 12. Matillion: best for transformations inside a cloud warehouse" title="Direct link to 12. Matillion: best for transformations inside a cloud warehouse" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-matillion.webp" alt="Matillion home page showing its headline and main navigation" width="1600" height="1058" class="img_ev3q"></p>
<p><em>Matillion home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: credits per task hour</li>
<li class="">Free option: trial only</li>
</ul>
<p>Matillion's product is now called Maia, which its credit terms say was previously Data Productivity Cloud (so older articles use the old name). <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">Its credit terms</a> set 1 credit per task hour for pipelines that run jobs, 3 for transformation pipelines, and 1 or 2 for streaming CDC.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its credit terms name Snowflake, Amazon Redshift, Google BigQuery and Databricks as example cloud data platforms, and price transformation pipelines on their own meter.</li>
<li class="">Per its <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit terms</a>, Task Hours are charged only while a pipeline runs, in 2-second increments, and validation and sampling do not count.</li>
<li class=""><a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> shows Developer with 1 developer user, unlimited projects, a low-code canvas with SQL or Python and a built-in Git repository, and Teams with 5 developer users, an audit log and a service level agreement.</li>
<li class="">Scale adds custom SSO, hybrid cloud deployment, data lineage and streaming change data capture, with 180+ days of log retention.</li>
<li class="">Its FAQ says you can contract directly or pay through your AWS, Azure or Snowflake account.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class=""><a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> lists streaming change data capture on the Scale card, and we found no dollar price shown there.</li>
<li class="">We found no Iceberg target in its docs.</li>
<li class="">The credit terms put Developer Users at 70 credits per user a month, and the terms state no dollar price per credit, so cost cannot be worked out from public pages.</li>
<li class="">The terms price an essential CDC pipeline at 1 credit per task hour and a premium one at 2, but do not define the two types.</li>
<li class="">Under Pay-Go, the period cannot exceed 60 days after the contracted term, you lose access to all products unless you sign a new term, and the overage rate is on the Order Form.</li>
<li class="">The comparison table shows community support on Developer, and the service level agreement as "Included with Annual subscription".</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="13-informatica-best-for-governance-and-large-mixed-estates">13. Informatica: best for governance and large, mixed estates<a href="https://olake.io/compare/best-data-integration-tools/#13-informatica-best-for-governance-and-large-mixed-estates" class="hash-link" aria-label="Direct link to 13. Informatica: best for governance and large, mixed estates" title="Direct link to 13. Informatica: best for governance and large, mixed estates" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: Informatica Processing Units (IPU)</li>
<li class="">Free option: <a href="https://www.informatica.com/free-data-integration.html" target="_blank" rel="noopener noreferrer" class="">Free Cloud Data Integration</a> to 20M rows or 10 compute hours a month</li>
</ul>
<p><a href="https://www.informatica.com/content/dam/informatica-com/en/docs/informatica-cloud-and-product-description-schedule.pdf" target="_blank" rel="noopener noreferrer" class="">Its Cloud and Product Description Schedule</a>, version 39.2 from September 11, 2026, prints Informatica Processing Unit (IPU) rates per service, such as 0.1 IPU per GB for the first 2 TB of database ingestion.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its <a href="https://docs.informatica.com/integration-cloud/data-ingestion-and-replication/current-version/database-ingestion-and-replication/database-ingestion-and-replication-source-and-target-types.html" target="_blank" rel="noopener noreferrer" class="">database ingestion docs</a> list many sources, including Db2, SAP HANA, Teradata (initial load only) and Oracle. We did not test any connector.</li>
<li class="">The same docs mark SQL Server, MongoDB, MySQL, PostgreSQL, Oracle, Db2 and SAP HANA as supported for initial, incremental and combined loads, and list targets such as Amazon S3, Databricks, Google BigQuery and Snowflake.</li>
<li class="">Its <a href="https://www.informatica.com/content/dam/informatica-com/en/docs/informatica-cloud-and-product-description-schedule.pdf" target="_blank" rel="noopener noreferrer" class="">Cloud and Product Description Schedule</a> prints the meter: database ingestion change capture is 6.5 IPU per million rows for the first 15M, 0.55 from 15M to 750M and 0.05 above that.</li>
<li class="">The same document says Database Ingestion and Replication jobs run on a Secure Agent that you install in your own environment, or serverless on an Informatica-managed environment on Azure, subject to applicable functionality.</li>
<li class="">Its docs have separate pages on Oracle log access methods for CDC, log-based CDC for SAP HANA and change capture mechanisms for SQL Server.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">We found no dollar price per IPU on Informatica's site, so you'll need a quote. The <a href="https://aws.amazon.com/marketplace/pp/prodview-vetdnosd4u6oe" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace listing</a> shows 120 IPUs a month for $131,760 over 12 months, with 12, 24 and 36 month contract tabs.</li>
<li class="">Its database ingestion docs describe Iceberg only as Snowflake-managed Iceberg tables, and they do not say which formats its "Open Table" target covers.</li>
<li class="">Under the monthly IPU model, IPUs do not carry over to the next month, and going over means you must subscribe to more IPUs for the rest of the period (<a href="https://www.informatica.com/content/dam/informatica-com/en/docs/informatica-cloud-and-product-description-schedule.pdf" target="_blank" rel="noopener noreferrer" class="">schedule</a>).</li>
<li class="">The schedule does not say whether a volume tier applies to the whole quantity or only the units inside each band.</li>
<li class="">For Azure SQL Database sources, the <a href="https://docs.informatica.com/integration-cloud/data-ingestion-and-replication/current-version/database-ingestion-and-replication/database-ingestion-and-replication-source-and-target-types.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say log-based capture with a transaction log is not supported, and incremental loads use query-based and CDC Tables capture.</li>
<li class="">IPU and Flex IPU must be provisioned separately and cannot be deployed in the same Org.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="14-qlik-talend-cloud-best-for-cdc-plus-iceberg-from-one-vendor">14. Qlik Talend Cloud: best for CDC plus Iceberg from one vendor<a href="https://olake.io/compare/best-data-integration-tools/#14-qlik-talend-cloud-best-for-cdc-plus-iceberg-from-one-vendor" class="hash-link" aria-label="Direct link to 14. Qlik Talend Cloud: best for CDC plus Iceberg from one vendor" title="Direct link to 14. Qlik Talend Cloud: best for CDC plus Iceberg from one vendor" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-qlik-talend-cloud.webp" alt="Qlik Talend Cloud home page showing its headline and main navigation" width="1600" height="871" class="img_ev3q"></p>
<p><em>Qlik Talend Cloud home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: a capacity band based on data volume, job runs and run time</li>
<li class="">Free option: not stated on its pricing page</li>
</ul>
<p>Qlik's pitch is CDC and Iceberg from one vendor. <a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> puts log-based CDC and Qlik Open Lakehouse for Apache Iceberg in the Standard edition. We did not test either, and the page prints no price, so ask for a written quote that states your volume.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Log-based CDC and Qlik Open Lakehouse for Apache Iceberg, both from the Standard edition.</li>
<li class=""><a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">Its pricing page</a> lists "Cloud, client managed, or hybrid deployment" under Standard.</li>
<li class="">Enterprise lists SAP application and Mainframe connectivity, as everything in Premium plus that.</li>
<li class="">Qlik says usage is measured by data volume moved, job executions and execution duration, and customers can watch it in a self-serve telemetry dashboard.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">No dollar price is published, and the Starter edition has no CDC.</li>
<li class="">Starter, Standard, Premium and Enterprise all show "Contact Us" on the pricing page, and prices for Talend Data Fabric are not published either.</li>
<li class="">Because usage combines three measures (volume, job runs and run time), predicting a bill needs figures from all three.</li>
<li class="">The page lists SAP and Mainframe connectivity only under Enterprise, and states no free option.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cloud-provider-services">Cloud-provider services<a href="https://olake.io/compare/best-data-integration-tools/#cloud-provider-services" class="hash-link" aria-label="Direct link to Cloud-provider services" title="Direct link to Cloud-provider services" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="15-aws-glue-best-for-spark-jobs-inside-aws">15. AWS Glue: best for Spark jobs inside AWS<a href="https://olake.io/compare/best-data-integration-tools/#15-aws-glue-best-for-spark-jobs-inside-aws" class="hash-link" aria-label="Direct link to 15. AWS Glue: best for Spark jobs inside AWS" title="Direct link to 15. AWS Glue: best for Spark jobs inside AWS" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-aws-glue.webp" alt="AWS Glue home page showing its headline and main navigation" width="1600" height="892" class="img_ev3q"></p>
<p><em>AWS Glue home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: data processing unit (DPU) hours, per second</li>
<li class="">Free option: none for ETL jobs</li>
</ul>
<p>AWS Glue is <a href="https://aws.amazon.com/glue/faqs/" target="_blank" rel="noopener noreferrer" class="">a serverless service</a> for finding, preparing and moving data (serverless means you don't manage the servers). <a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS's pricing page</a> lists $0.44 per data processing unit (DPU) hour for ETL jobs and $0.308 on Glue 6.0 and above, in US East (Ohio), per AWS's <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">price list</a>.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">You do not manage servers, and its docs say it can <a href="https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-iceberg.html" target="_blank" rel="noopener noreferrer" class="">read and write Iceberg tables</a> in S3 (Glue 3.0 and later).</li>
<li class="">Per the same docs, Glue 6.0 supports Iceberg table format versions 2 and 3 (v2 by default), and Glue 4.0 and later use optimistic locking for Iceberg by default.</li>
<li class=""><a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS's pricing page</a> bills per second with a 1-minute minimum, and the <a href="https://aws.amazon.com/glue/faqs/" target="_blank" rel="noopener noreferrer" class="">FAQ</a> says you pay for the time your job runs, not for environment provisioning or shutdown.</li>
<li class="">The Data Catalog's first million objects and first million requests a month are free, and Flex jobs cost $0.29 per DPU-hour ($0.203 on Glue 6.0 and above) in the <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">US East (Ohio) price list</a>.</li>
<li class="">Its <a href="https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html" target="_blank" rel="noopener noreferrer" class="">zero-ETL docs</a> list DynamoDB, Oracle Database@AWS and SaaS apps such as Salesforce, SAP and Zendesk as sources, with S3 and S3 Tables among the targets, and AWS charges no extra fee for the integration itself.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Its <a href="https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html" target="_blank" rel="noopener noreferrer" class="">zero-ETL docs</a> list self-managed Oracle, SQL Server, MySQL and PostgreSQL sources, and add that for those sources you can replicate "only to an Amazon Redshift data warehouse." We found no log-based CDC engine documented for Glue ETL jobs themselves.</li>
<li class="">An ETL job needs at least 2 DPUs, and by default Glue gives each job 10, per its <a href="https://aws.amazon.com/glue/faqs/" target="_blank" rel="noopener noreferrer" class="">FAQ</a>.</li>
<li class="">The Iceberg page says "Update is not supported for Iceberg tables", and ALTER TABLE RENAME is not available on Glue 3.0 with Iceberg 0.13.1 (<a href="https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-iceberg.html" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
<li class="">Glue 3.0 with Iceberg 0.13.1 also needs a DynamoDB lock manager configuration, and moving a table from Iceberg v2 to v3 cannot be reversed.</li>
<li class="">Costs sit outside DPU-hours: temporary, shuffle and data quality files in S3 are billed at S3 rates, and Data Catalog objects past the first million cost $1 per 100,000 a month (<a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="16-azure-data-factory-best-for-pipelines-inside-azure">16. Azure Data Factory: best for pipelines inside Azure<a href="https://olake.io/compare/best-data-integration-tools/#16-azure-data-factory-best-for-pipelines-inside-azure" class="hash-link" aria-label="Direct link to 16. Azure Data Factory: best for pipelines inside Azure" title="Direct link to 16. Azure Data Factory: best for pipelines inside Azure" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-azure-data-factory.webp" alt="Azure Data Factory home page showing its headline and main navigation" width="1600" height="945" class="img_ev3q"></p>
<p><em>Azure Data Factory home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Billing: activity runs, copy hours and data flow hours</li>
<li class="">Free option: none listed for activity runs or copying</li>
</ul>
<p>Azure Data Factory is Microsoft's managed ETL and ELT service.</p>
<p><a href="https://azure.microsoft.com/en-us/pricing/details/data-factory/data-pipeline/" target="_blank" rel="noopener noreferrer" class="">Azure's price list</a> for US East shows $1 per 1,000 activity runs and $0.25 per Data Integration Unit (DIU) hour for copying, with data flows billed separately.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">A self-hosted integration runtime for on-premises data, priced per hour.</li>
<li class="">Its <a href="https://learn.microsoft.com/en-us/azure/data-factory/concepts-change-data-capture" target="_blank" rel="noopener noreferrer" class="">CDC docs page</a> say "Pipelines in ADF are batch only, but the CDC resource can run continuously", and that native CDC uses the database's own change data capture with no timestamp or ID columns needed.</li>
<li class="">The same page lists auto incremental extraction for sources including SQL Server, Azure Database for MySQL and Azure Database for PostgreSQL, and says ADF manages the checkpoint for each activity run.</li>
<li class="">The <a href="https://azure.microsoft.com/en-us/pricing/details/data-factory/data-pipeline/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> describes the integration runtime as serverless in Azure and self-hosted in hybrid scenarios, with charges prorated by the minute.</li>
<li class="">Its Iceberg format page covers an Iceberg sink in the Copy activity, with <code>IcebergSink</code> and <code>IcebergWriteSettings</code> (<a href="https://learn.microsoft.com/en-us/azure/data-factory/format-iceberg" target="_blank" rel="noopener noreferrer" class="">docs</a>).</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Its <a href="https://learn.microsoft.com/en-us/azure/data-factory/concepts-change-data-capture" target="_blank" rel="noopener noreferrer" class="">CDC docs page</a> lists native CDC for SAP, Azure SQL, SQL Server, Cosmos DB and Snowflake, and not for PostgreSQL, MySQL, MongoDB or Oracle.</li>
<li class="">Its Copy activity can write Iceberg only to Azure Data Lake Storage Gen2, per its <a href="https://learn.microsoft.com/en-us/azure/data-factory/format-iceberg" target="_blank" rel="noopener noreferrer" class="">Iceberg format page</a>, which shows a dataset type and folder location but no catalog setting and no update, delete or merge setting.</li>
<li class="">For auto incremental extraction from databases, the CDC page says an incremental column is required to identify the changes.</li>
<li class="">The CDC resource is billed for four cores of General Purpose data flows while data is processed, and the <a href="https://azure.microsoft.com/en-us/pricing/details/data-factory/data-pipeline/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> ties that rate to the period "during public preview of CDC".</li>
<li class="">Data flows have an 8 vCore minimum cluster and also bill for managed disk and blob storage, and copying data out of an Azure datacenter adds a separate outbound transfer line.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faqs">FAQs<a href="https://olake.io/compare/best-data-integration-tools/#faqs" class="hash-link" aria-label="Direct link to FAQs" title="Direct link to FAQs" translate="no">​</a></h2>
<div class="olake-faq"><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q1. What is data integration software?</span></summary><div class="olake-faq__answer">Software that collects data from many systems and puts it in one place, such as a warehouse or a data lake.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q2. Which data integration tools have a free plan?</span></summary><div class="olake-faq__answer">Several. As of October 2026, Fivetran has a free plan up to 500,000 MAR, Hevo up to 1M events, Estuary up to 10 GB, and Skyvia up to 10k records a month. Stitch has only a 14-day trial.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q3. Which tools are open source?</span></summary><div class="olake-faq__answer">Meltano calls itself open source, and dlt and OLake Go use Apache 2.0. Airbyte Core uses the Elastic License 2.0, which its licence FAQ says does not let you sell a cloud service that gives users direct access to Airbyte.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q4. Which data integration tool is the cheapest?</span></summary><div class="olake-faq__answer">There's no single winner, because rows, events, credits, gigabytes and compute hours don't convert into each other. Price one real month on each vendor's meter.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q5. Which tools can write Apache Iceberg tables?</span></summary><div class="olake-faq__answer">Fivetran, Airbyte, Estuary, Informatica, Qlik Talend Cloud, AWS Glue, dlt, Azure Data Factory and OLake Go document Iceberg output, each with limits, and Hevo has it in Early Access. See the second table above.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q6. Is data integration the same as ETL?</span></summary><div class="olake-faq__answer">Not quite. ETL and ELT are two ways of doing data integration, which is the wider job of getting data from many systems into one place.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q7. How much does a data integration tool cost a month?</span></summary><div class="olake-faq__answer">It ranges from free plans to $12,000 a month for the dltHub platform, as of October 2026. Hevo Starter is $299 monthly for 5M events, while Qlik Talend Cloud and Matillion print no dollar rate.</div></details></div>
<aside class="not-prose my-10 rounded-[16px] border border-solid border-olake-line bg-olake-surface p-[24px] lg:p-[32px]"><p class="m-0 text-[22px] leading-[1.2] tracking-[-0.01em] text-olake-ink lg:text-[26px]">OLake Go</p><p class="m-0 mt-[10px] max-w-[620px] text-[15px] leading-[1.6] text-olake-text-2">Replicate databases, Kafka, and S3 into Apache Iceberg with OLake Go, an open source EL engine built for Iceberg from the ground up.</p><div class="mt-[20px] flex flex-wrap gap-[10px]"><a href="https://olake.io/contact/" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-blue-ring bg-olake-blue text-olake-on-blue! hover:border-olake-blue-hover hover:bg-olake-blue-hover hover:text-white!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Signup</a><a href="https://olake.io/slack/" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M221.13,128A32,32,0,0,0,184,76.31V56a32,32,0,0,0-56-21.13A32,32,0,0,0,76.31,72H56a32,32,0,0,0-21.13,56A32,32,0,0,0,72,179.69V200a32,32,0,0,0,56,21.13A32,32,0,0,0,179.69,184H200a32,32,0,0,0,21.13-56ZM72,152a16,16,0,1,1-16-16H72Zm48,48a16,16,0,0,1-32,0V152a16,16,0,0,1,16-16h16Zm0-80H56a16,16,0,0,1,0-32h48a16,16,0,0,1,16,16Zm0-48H104a16,16,0,1,1,16-16Zm16-16a16,16,0,0,1,32,0v48a16,16,0,0,1-16,16H136Zm16,160a16,16,0,0,1-16-16V184h16a16,16,0,0,1,0,32Zm48-48H152a16,16,0,0,1-16-16V136h64a16,16,0,0,1,0,32Zm0-48H184V104a16,16,0,1,1,16,16Z"></path></svg>Join Slack</a><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>Explore OLake GitHub</a></div><p class="m-0 mt-[16px] text-[13px] text-olake-muted">Contact us at <strong class="font-medium text-olake-text-2">hello@olake.io</strong></p></aside>]]></content>
        <author>
            <name>Priyansh Khodiyar</name>
            <email>hello@olake.io</email>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="ETL" term="ETL"/>
        <category label="Data Pipeline Tools" term="Data Pipeline Tools"/>
        <category label="Data Ingestion" term="Data Ingestion"/>
        <category label="Best-of" term="Best-of"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[11 Best AWS ETL Tools in 2026, Compared]]></title>
        <id>https://olake.io/compare/aws-etl-tools/</id>
        <link href="https://olake.io/compare/aws-etl-tools/"/>
        <updated>2026-10-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The 11 best AWS ETL tools compared: Glue, DMS, AppFlow, Firehose and outside tools, with dated prices, limits and which one fits your data source.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="eager" src="https://olake.io/img/blog/cover/aws-etl-tools-cover.webp" alt="Cover for best ETL tools for AWS showing sources flowing through an ETL tool into S3, Redshift or Iceberg" width="1920" height="1080" fetchpriority="high" class="img_ev3q"></p>
<section class="olake-tldr" aria-label="Key takeaways"><p class="olake-tldr__label"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"></path></svg><span>Key takeaways</span></p><div class="olake-tldr__body"><ul>
<li class=""><strong>Pick AWS ETL (extract, transform, load) tools by where your data starts.</strong> Software-as-a-service (SaaS) apps such as Salesforce fit Amazon AppFlow or AWS Glue zero-ETL, a live database fits AWS DMS (Database Migration Service), and Spark code or big batch jobs fit AWS Glue.</li>
<li class=""><strong>AWS DMS cannot write Apache Iceberg directly.</strong> It lands raw change data capture (CDC) or full-load files in an Amazon S3 bucket, and a second step such as a Glue job turns them into Iceberg tables. AWS's own list of DMS targets has no Iceberg entry.</li>
<li class=""><strong>The billing unit drives the price.</strong> Glue bills compute time, DMS bills instance or capacity hours, AppFlow bills runs and gigabytes, and Fivetran bills monthly active rows.</li>
<li class=""><strong>Two names are off the table.</strong> AWS Data Pipeline is closed to new customers, and the Firehose database-to-Iceberg preview ended on 30 September 2025.</li>
</ul></div></section>
<p>ETL (extract, transform, load) copies data out of one system, reshapes it, and loads it into another. Many teams now load first and reshape later (ELT), and people search for both as "ETL", so this page covers both.</p>
<p>Prices and limits come from each vendor's own pages, read on 8 October 2026. Rates change often, so confirm on the vendor's page before you buy.</p>
<p>AWS loads its rate tables in the browser, so the AWS rates below come from its official price list files. Those are the <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">Glue file</a> (US East, Ohio, published 6 October 2026) and the <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSDatabaseMigrationSvc/current/us-east-1/index.json" target="_blank" rel="noopener noreferrer" class="">DMS (Database Migration Service) file</a> (US East, N. Virginia, published 11 September 2026).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="aws-etl-tools-at-a-glance">AWS ETL tools at a glance<a href="https://olake.io/compare/aws-etl-tools/#aws-etl-tools-at-a-glance" class="hash-link" aria-label="Direct link to AWS ETL tools at a glance" title="Direct link to AWS ETL tools at a glance" translate="no">​</a></h2>
<table><thead><tr><th>Tool</th><th>Kind</th><th>Best for</th><th>Database change capture</th><th>Billing unit</th></tr></thead><tbody><tr><td>AWS Glue</td><td>AWS service</td><td>Spark code, batch jobs, the Data Catalog</td><td>Not found in the docs for self-managed databases</td><td>DPU-hours</td></tr><tr><td>AWS DMS</td><td>AWS service</td><td>Moving a live database into AWS</td><td>Yes, from database logs</td><td>Instance or capacity hours</td></tr><tr><td>Glue zero-ETL</td><td>AWS feature</td><td>SaaS apps and DynamoDB into the lake</td><td>Self-managed databases go to Redshift only</td><td>Per GB ingested plus compute</td></tr><tr><td>Amazon AppFlow</td><td>AWS service</td><td>Small SaaS pulls into S3 or Redshift</td><td>Not found in the docs</td><td>Flow runs and GB</td></tr><tr><td>Amazon Data Firehose</td><td>AWS service</td><td>Streams into S3, Redshift or Iceberg</td><td>Database source preview ended</td><td>Per GB</td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>Open-source replication</td><td>Database changes into Iceberg or Parquet</td><td>Yes, from database logs, for four databases</td><td>Free licence, you run the servers</td></tr><tr><td>Fivetran</td><td>Managed ELT</td><td>Many connectors, no servers</td><td>Not covered here</td><td>Monthly active rows</td></tr><tr><td>Airbyte</td><td>Self-hosted Core and cloud</td><td>Connector choice, self-hosting</td><td>Yes, on scheduled syncs</td><td>Credits (Cloud), free (Core)</td></tr><tr><td>Hevo</td><td>Managed ELT</td><td>Small teams, Redshift</td><td>Log-based pipelines per its docs</td><td>Events</td></tr><tr><td>Matillion</td><td>Managed ETL</td><td>Visual pipelines in Redshift</td><td>Streaming CDC listed on the Scale card</td><td>Credits</td></tr><tr><td>Informatica</td><td>Enterprise suite</td><td>Large, governed estates</td><td>Not covered here</td><td>Processing units</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-we-picked">How we picked<a href="https://olake.io/compare/aws-etl-tools/#how-we-picked" class="hash-link" aria-label="Direct link to How we picked" title="Direct link to How we picked" translate="no">​</a></h2>
<p>Two tests. A tool had to move data into AWS storage or a warehouse, and its own pages had to say how you buy it or how it bills. We started with AWS's own services, then added outside tools that name Amazon Redshift or S3 as a destination in their docs.</p>
<p>This is a reading of vendor documents, not a lab test. We did not run these tools.</p>
<p>Entries carry a "What users say" line only where a public thread or review page we opened in October 2026 shows a concrete experience. Every quote is one person's view, not a verdict.</p>
<p>Anything we could not source from a primary page is left out, which covers AWS Lambda, Amazon EMR (Elastic MapReduce), Amazon MWAA (Managed Workflows for Apache Airflow) and Amazon Kinesis Data Streams as stand-alone ETL options. The tools are grouped by kind, not ranked: each entry says what it is best for and where it is the wrong choice.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="which-tool-fits-which-source">Which tool fits which source<a href="https://olake.io/compare/aws-etl-tools/#which-tool-fits-which-source" class="hash-link" aria-label="Direct link to Which tool fits which source" title="Direct link to Which tool fits which source" translate="no">​</a></h2>
<p>Your source cuts the list in half. A SaaS app has an API and no database log. Databases keep a log of changes that some tools can read, and streams or piles of files need a different kind of tool again.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/aws-etl-tools-which-fits.webp" alt="Which ETL option fits SaaS apps, live databases, or streams and files, with AWS and outside choices" width="1600" height="1140" class="img_ev3q"></p>
<p>You will see change data capture (CDC) a lot below. It means reading a database's own log of changes instead of re-reading whole tables, which keeps a copy fresh without hammering the source.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-11-best-aws-etl-tools">The 11 best AWS ETL tools<a href="https://olake.io/compare/aws-etl-tools/#the-11-best-aws-etl-tools" class="hash-link" aria-label="Direct link to The 11 best AWS ETL tools" title="Direct link to The 11 best AWS ETL tools" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="aws-native-services">AWS native services<a href="https://olake.io/compare/aws-etl-tools/#aws-native-services" class="hash-link" aria-label="Direct link to AWS native services" title="Direct link to AWS native services" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-aws-glue-best-for-spark-code-and-batch-jobs">1. AWS Glue: best for Spark code and batch jobs<a href="https://olake.io/compare/aws-etl-tools/#1-aws-glue-best-for-spark-code-and-batch-jobs" class="hash-link" aria-label="Direct link to 1. AWS Glue: best for Spark code and batch jobs" title="Direct link to 1. AWS Glue: best for Spark code and batch jobs" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-aws-glue.webp" alt="AWS Glue home page showing its headline and main navigation" width="1600" height="892" class="img_ev3q"></p>
<p><em>AWS Glue home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: serverless Spark-based ETL (extract, transform, load) service</li>
<li class="">Billing: DPU-hours, billed by the second per the <a href="https://aws.amazon.com/glue/faqs/" target="_blank" rel="noopener noreferrer" class="">Glue FAQ</a> (a DPU is a data processing unit, the compute Glue rents to run a job)</li>
<li class="">Rates: $0.44 per DPU-hour for earlier Glue versions and $0.308 for Glue 6.0 and above (US East, Ohio, <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">AWS price list file</a> published 6 October 2026)</li>
</ul>
<p>AWS <a href="https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html" target="_blank" rel="noopener noreferrer" class="">describes Glue</a> as a serverless data integration service. Glue runs jobs on Apache Spark, a data processing engine, and has a visual editor called Glue Studio. Alongside jobs it keeps the Glue Data Catalog, a table list that other tools below can use as an Iceberg catalog (the index that tells an engine where a table's files are).</p>
<p>AWS announced Glue 6.0 on 21 August 2026 with "30% lower pricing than previous AWS Glue versions" (<a href="https://aws.amazon.com/blogs/aws/aws-glue-6-0-now-available-with-30-lower-price-and-full-apache-iceberg-v3-support/" target="_blank" rel="noopener noreferrer" class="">AWS News Blog</a>). AWS's <a href="https://docs.aws.amazon.com/glue/latest/dg/add-job.html" target="_blank" rel="noopener noreferrer" class="">job docs</a> say a job created without a version defaults to Glue 5.1, which is the higher rate, so set the version on purpose.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">AWS says Glue is serverless, so <a href="https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html" target="_blank" rel="noopener noreferrer" class="">there is no infrastructure to manage</a>, and that you can connect to "more than 70 diverse data sources". Other tools here can write to its Data Catalog.</li>
<li class="">You pay for the time a job runs, not for environment provisioning or shutdown, and billing is per second with a 1-minute minimum (<a href="https://aws.amazon.com/glue/faqs/" target="_blank" rel="noopener noreferrer" class="">Glue FAQ</a>).</li>
<li class="">The Data Catalog's first million metadata objects and first million requests a month are free, and extra objects cost $1.00 per 100,000 a month (<a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">Worker sizes run from G.1X (1 DPU, 4 vCPU, 16 GB) up to G.16X (16 DPU, 64 vCPU, 256 GB), per the <a href="https://docs.aws.amazon.com/glue/latest/dg/add-job.html" target="_blank" rel="noopener noreferrer" class="">job docs</a>.</li>
<li class="">Iceberg table optimization in the Data Catalog is billed at $0.44 per DPU-hour, per second, with a 1-minute minimum (<a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">AWS's <a href="https://aws.amazon.com/blogs/big-data/modernize-your-legacy-databases-with-aws-data-lakes-part-2-build-a-data-lake-using-aws-dms-data-on-apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">DMS data lake blog</a> uses Glue jobs to apply database changes to Iceberg tables, one way to do the step after DMS.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class=""><a href="https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html" target="_blank" rel="noopener noreferrer" class="">Glue's docs</a> describe job bookmarks (a record of what a job already processed) and JDBC reads (queries over a standard database connection) for incremental loads, and we found no native log-based CDC for self-managed databases in them.</li>
<li class="">A Glue ETL job needs at least 2 DPUs and gets 10 by default (<a href="https://aws.amazon.com/glue/faqs/" target="_blank" rel="noopener noreferrer" class="">Glue FAQ</a>), and the Spark code is on you.</li>
<li class="">The <a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> shows no free tier for ETL jobs. Its free items are the Data Catalog's first million objects and requests.</li>
<li class="">Crawlers are billed at $0.44 per DPU-hour (<a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>) with a 10-minute minimum per run (<a href="https://aws.amazon.com/glue/faqs/" target="_blank" rel="noopener noreferrer" class="">Glue FAQ</a>).</li>
<li class="">Memory-optimized job runs cost more, at $0.52 per DPU-hour, or $0.364 on Glue 6.0 and above (US East, Ohio, <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">price list file</a>).</li>
<li class="">Temporary files, data quality results and shuffle files stored in S3 are billed at standard S3 rates (<a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-aws-dms-best-for-moving-a-live-database-into-aws">2. AWS DMS: best for moving a live database into AWS<a href="https://olake.io/compare/aws-etl-tools/#2-aws-dms-best-for-moving-a-live-database-into-aws" class="hash-link" aria-label="Direct link to 2. AWS DMS: best for moving a live database into AWS" title="Direct link to 2. AWS DMS: best for moving a live database into AWS" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-aws-dms.webp" alt="AWS DMS home page showing its headline and main navigation" width="1600" height="770" class="img_ev3q"></p>
<p><em>AWS DMS home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: managed replication service</li>
<li class="">Billing: hourly for replication instances or Serverless capacity</li>
<li class="">Rate: $0.0745 an hour for a dms.t3.medium instance (US East, N. Virginia, single-AZ, on-demand, <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSDatabaseMigrationSvc/current/us-east-1/index.json" target="_blank" rel="noopener noreferrer" class="">AWS price list file</a> published 11 September 2026)</li>
</ul>
<p><a href="https://aws.amazon.com/dms/pricing/" target="_blank" rel="noopener noreferrer" class="">DMS</a> copies a whole database, then keeps it current. AWS's <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html" target="_blank" rel="noopener noreferrer" class="">CDC docs</a> describe reading changes from the transaction logs of sources such as Oracle, SQL Server, MySQL and PostgreSQL.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">One task can load existing data and then keep applying changes, or apply changes only, per the <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html" target="_blank" rel="noopener noreferrer" class="">CDC docs</a>.</li>
<li class="">The same docs say DMS reads Oracle redo logs with the LogMiner API or a binary reader, SQL Server through MS-Replication or MS-CDC, and MySQL from row-based binary logs.</li>
<li class="">The <a href="https://aws.amazon.com/dms/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists three options: on-demand, serverless and Database Savings Plans. On-demand, you pay for replication instances and any additional log storage.</li>
<li class="">Serverless capacity is billed by the hour: 1 DCU is $0.0819 an hour and 16 DCU is $1.311 an hour in US East (N. Virginia), per the <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSDatabaseMigrationSvc/current/us-east-1/index.json" target="_blank" rel="noopener noreferrer" class="">price list file</a>.</li>
<li class="">All data transfer into DMS is free, and so is transfer to RDS and EC2 databases in the same Availability Zone (<a href="https://aws.amazon.com/dms/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">The <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html" target="_blank" rel="noopener noreferrer" class="">S3 docs</a> say CSV is the default output with Parquet as an option, and the first field of each CDC record marks an insert (I), update (U) or delete (D).</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class=""><a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html" target="_blank" rel="noopener noreferrer" class="">AWS's DMS target list</a> has no Apache Iceberg entry.</li>
<li class="">AWS's <a href="https://aws.amazon.com/blogs/big-data/modernize-your-legacy-databases-with-aws-data-lakes-part-2-build-a-data-lake-using-aws-dms-data-on-apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">data lake blog</a> lands changes in S3, then uses Glue jobs. In that design a file for a table with no primary key is not processed, and an SQS FIFO queue keeps the change files in order.</li>
<li class="">The <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html" target="_blank" rel="noopener noreferrer" class="">CDC docs</a> say "There are no SLAs for CDC latency." Latency can increase to several minutes or longer depending on source workload, network and other factors.</li>
<li class="">S3 targets record "no ALTER statement" when a source column changes, and DMS does not alter earlier records to match (<a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html" target="_blank" rel="noopener noreferrer" class="">S3 docs</a>).</li>
<li class="">The same S3 docs say BatchApply is not supported for an S3 endpoint and might lose data, and that full LOB mode is not supported.</li>
<li class="">The CDC start point is fixed when the task is created, so a different start point needs a new task. PostgreSQL sources do not support a custom CDC start time (<a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html" target="_blank" rel="noopener noreferrer" class="">CDC docs</a>).</li>
</ul>
<p><strong>What users say:</strong> In the Hacker News thread "We migrated our PostgreSQL database with 11 seconds downtime" (January 2024), one commenter <a href="https://news.ycombinator.com/item?id=39049790" target="_blank" rel="noopener noreferrer" class="">wrote</a> that "schema changes totally messed it up".</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/aws-etl-tools--aws-dms-target-endpoints.webp" alt="AWS DMS documentation listing target endpoints for data migration, including Amazon S3, Kinesis and Kafka, with no Apache Iceberg entry" width="1600" height="1419" class="img_ev3q"></p>
<p><em>AWS DMS documentation, target endpoints, October 2026.</em></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-aws-glue-zero-etl-best-for-saas-and-dynamodb-data-with-no-pipeline-code">3. AWS Glue zero-ETL: best for SaaS and DynamoDB data with no pipeline code<a href="https://olake.io/compare/aws-etl-tools/#3-aws-glue-zero-etl-best-for-saas-and-dynamodb-data-with-no-pipeline-code" class="hash-link" aria-label="Direct link to 3. AWS Glue zero-ETL: best for SaaS and DynamoDB data with no pipeline code" title="Direct link to 3. AWS Glue zero-ETL: best for SaaS and DynamoDB data with no pipeline code" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-aws-glue.webp" alt="AWS Glue home page showing its headline and main navigation" width="1600" height="892" class="img_ev3q"></p>
<p><em>AWS Glue home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: managed integrations inside Glue</li>
<li class="">Sources listed: DynamoDB, Oracle Database@AWS and SaaS apps such as Salesforce, SAP and Zendesk</li>
<li class="">Billing: $1.50 per GB of data ingested from applications (US East, Ohio, <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">AWS price list file</a> published 6 October 2026), plus target compute</li>
</ul>
<p>Targets include Amazon S3 and S3 Tables, plus Redshift. <a href="https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html" target="_blank" rel="noopener noreferrer" class="">Glue's docs</a> are clear about the limit for databases.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">AWS calls these fully managed integrations that minimize the need to build ETL pipelines.</li>
<li class="">The <a href="https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html" target="_blank" rel="noopener noreferrer" class="">Glue docs</a> list application sources including Facebook Ads, Instagram Ads, Salesforce, SAP OData, ServiceNow, Zendesk and Zoho CRM, plus DynamoDB and Oracle Database@AWS.</li>
<li class="">Listed targets are a general purpose S3 bucket, S3 Tables, Redshift Managed Storage and a Redshift data warehouse (same docs).</li>
<li class="">AWS says it does not charge an additional fee for the zero-ETL integration. You pay for the source and target resources (<a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">For application sources the <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">same price file</a> lists $0.44 per DPU-hour for the compute that processes zero-ETL data written to S3.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class=""><a href="https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html" target="_blank" rel="noopener noreferrer" class="">AWS's docs</a> say: "For self-managed database sources, you can replicate data only to an Amazon Redshift data warehouse. Other targets are not supported." The self-managed sources listed are Oracle, SQL Server, MySQL and PostgreSQL.</li>
<li class="">Ingestion from applications is billed at $1.50 per GB (US East, Ohio, <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">price list file</a>), and each ingestion request has a minimum volume of 1 MB (<a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">For S3 targets you also pay Glue compute per DPU-hour, billed per second with a 1-minute minimum (same page).</li>
<li class="">For DynamoDB sources, DynamoDB charges a separate fee to export data from continuous backups (same page).</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-amazon-appflow-best-for-small-saas-pulls">4. Amazon AppFlow: best for small SaaS pulls<a href="https://olake.io/compare/aws-etl-tools/#4-amazon-appflow-best-for-small-saas-pulls" class="hash-link" aria-label="Direct link to 4. Amazon AppFlow: best for small SaaS pulls" title="Direct link to 4. Amazon AppFlow: best for small SaaS pulls" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-amazon-appflow.webp" alt="Amazon AppFlow home page showing its headline and main navigation" width="1600" height="892" class="img_ev3q"></p>
<p><em>Amazon AppFlow home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: managed SaaS-to-AWS flow service</li>
<li class="">Billing: $0.001 per successful flow run, per <a href="https://aws.amazon.com/appflow/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS's pricing page</a></li>
<li class="">Data: $0.02 per GB processed, the rate AWS uses in its pricing examples for destinations on AWS</li>
</ul>
<p>AWS says <a href="https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html" target="_blank" rel="noopener noreferrer" class="">AppFlow</a> transfers data between SaaS apps, such as Salesforce, and AWS services, such as S3 and Redshift. Its <a href="https://aws.amazon.com/appflow/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> says a flow run that checks for new data counts as a run even when nothing new is found.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Two numbers set the price, and a small flow costs cents (see our arithmetic below).</li>
<li class="">Pricing is pay as you go with no upfront fees, per the <a href="https://aws.amazon.com/appflow/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>.</li>
<li class="">Flows can run on demand or on a schedule, and one docs example triggers a flow on each new record created in Salesforce (<a href="https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html" target="_blank" rel="noopener noreferrer" class="">AppFlow docs</a>).</li>
<li class="">A docs example moves Salesforce, Marketo, ServiceNow and Zendesk data to S3 weekly, in aggregate up to 100GB per flow (same docs).</li>
<li class="">Custom Connector SDKs for Python and Java let you build connectors for sources the service does not already integrate (same docs).</li>
<li class="">AppFlow supports ingestion of Salesforce Platform events and Change Data Capture events. The docs name no database change capture (same docs).</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">AWS's overview names SaaS apps as sources, not databases, and we found no database log reading on it.</li>
<li class="">Destinations that are not on AWS are priced differently, so check the pricing page before you plan one.</li>
<li class="">The overview names S3 and Redshift as destinations and does not mention Iceberg.</li>
<li class="">Beyond runs and data processed, you are charged standard request and storage rates to read and write AWS services such as S3 (<a href="https://aws.amazon.com/appflow/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">Some connectors, SAP for example, allow extra concurrent processes per flow run, and each extra process is charged as an additional flow (same page).</li>
<li class="">The pricing page states no free tier amount.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-amazon-data-firehose-best-for-streams-into-s3-redshift-or-iceberg">5. Amazon Data Firehose: best for streams into S3, Redshift or Iceberg<a href="https://olake.io/compare/aws-etl-tools/#5-amazon-data-firehose-best-for-streams-into-s3-redshift-or-iceberg" class="hash-link" aria-label="Direct link to 5. Amazon Data Firehose: best for streams into S3, Redshift or Iceberg" title="Direct link to 5. Amazon Data Firehose: best for streams into S3, Redshift or Iceberg" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-amazon-data-firehose.webp" alt="Amazon Data Firehose home page showing its headline and main navigation" width="1600" height="809" class="img_ev3q"></p>
<p><em>Amazon Data Firehose home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: managed delivery service for streaming data</li>
<li class="">Iceberg: can route records from one stream into different Iceberg tables and apply inserts, updates and deletes (<a href="https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-destination.html" target="_blank" rel="noopener noreferrer" class="">AWS docs</a>)</li>
<li class="">Billing: for an Iceberg destination, per GB ingested, per <a href="https://aws.amazon.com/firehose/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS's Firehose pricing page</a>, which has no database-source rate</li>
</ul>
<p>Think of Firehose as a delivery truck for streaming records. AWS's pricing page lists Amazon MSK (managed Kafka) and Kinesis Data Streams among its sources, and its Iceberg docs say the tables can sit in S3 or S3 Tables.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">It is an AWS path from an event stream to Iceberg tables, and one stream can feed several tables.</li>
<li class="">For Iceberg destinations the <a href="https://aws.amazon.com/firehose/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists $0.045 per GB delivered from a Kinesis Data Streams source, billed per GB ingested with no 5KB increments.</li>
<li class="">Firehose supports fine-grained access control on Iceberg tables in S3 with AWS Lake Formation (<a href="https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-destination.html" target="_blank" rel="noopener noreferrer" class="">destination docs</a>).</li>
<li class="">The <a href="https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-considerations.html" target="_blank" rel="noopener noreferrer" class="">considerations page</a> says the Glue Data Catalog supports automatic compaction of Iceberg tables, and that you can compact by hand with Athena OPTIMIZE and expire snapshots with VACUUM.</li>
<li class="">Setting the AppendOnly flag to true, for inserts only, lets Firehose scale automatically to match your throughput, and it can be set only through the CreateDeliveryStream API (same page).</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The database-as-source feature was only a preview, and <a href="https://aws.amazon.com/blogs/aws/replicate-changes-from-databases-to-apache-iceberg-tables-using-amazon-data-firehose/" target="_blank" rel="noopener noreferrer" class="">AWS's announcement post</a> now says the preview period "has ended on 09/30/2025".</li>
<li class="">For self-managed Iceberg tables, you handle compaction (merging small files) and snapshot expiration (removing old table versions) yourself. AWS adds that the Glue Data Catalog can compact Iceberg tables automatically, billed separately (<a href="https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-considerations.html" target="_blank" rel="noopener noreferrer" class="">Firehose docs</a>).</li>
<li class="">An update writes a delete file (a marker for removed rows) plus an insert, and delete files incur S3 put charges, per <a href="https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-considerations.html" target="_blank" rel="noopener noreferrer" class="">AWS</a>.</li>
<li class="">Column names and data types in the source data must exactly match those of the target tables for Firehose to deliver successfully (same page).</li>
<li class="">As ingest throughput rises, the number of partitions that can be written actively falls: about 3,000 at 20 MB/s or less, 100 at 40 to 400 MB/s, and 1 at 750 MB/s to 1.5 GB/s (same page).</li>
<li class="">Amazon MSK Serverless is not supported as a source for Iceberg tables, and AWS does not recommend several streams writing to the same Iceberg table (same page).</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/aws-firehose-db-source-preview-ended.webp" alt="AWS blog update stating the Data Firehose database-to-Iceberg preview ended on 30 September 2025" width="1600" height="530" class="img_ev3q"></p>
<p><em>AWS News Blog, Amazon Data Firehose database replication post, October 2026.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tools-from-outside-aws">Tools from outside AWS<a href="https://olake.io/compare/aws-etl-tools/#tools-from-outside-aws" class="hash-link" aria-label="Direct link to Tools from outside AWS" title="Direct link to Tools from outside AWS" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-olake-go-best-for-database-changes-into-iceberg-on-storage-you-own">6. OLake Go: best for database changes into Iceberg on storage you own<a href="https://olake.io/compare/aws-etl-tools/#6-olake-go-best-for-database-changes-into-iceberg-on-storage-you-own" class="hash-link" aria-label="Direct link to 6. OLake Go: best for database changes into Iceberg on storage you own" title="Direct link to 6. OLake Go: best for database changes into Iceberg on storage you own" translate="no">​</a></h4>
<img src="https://olake.io/img/logo/olake-blue-with-text.svg" alt="OLake" height="32" style="display:block;margin:2px 0 14px">
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-olake.webp" alt="OLake home page showing its headline and main navigation" width="1600" height="957" class="img_ev3q"></p>
<p><em>OLake home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: open-source database replication, licensed Apache 2.0</li>
<li class="">Change capture: Postgres, MySQL/MariaDB, MongoDB and SQL Server, per the <a class="" href="https://olake.io/docs/connectors/overview/">connector docs</a> (we did not test them)</li>
<li class="">Output: Apache Iceberg and Parquet</li>
<li class="">Price: free licence, you pay for your own servers</li>
<li class="">Support: <a class="" href="https://olake.io/contact/">contact the OLake team</a></li>
</ul>
<p>OLake Go moves databases, not SaaS apps, and it does not transform data on the way. You run it yourself with <a class="" href="https://olake.io/docs/install/docker-cli/">Docker</a>, <a class="" href="https://olake.io/docs/install/kubernetes/">Helm on Kubernetes</a> or the <a class="" href="https://olake.io/docs/install/olake-ui/">OLake UI</a>.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">One tool does the first load and then the change capture for four database families, with Full Refresh, Full Refresh + Incremental, Full Refresh + CDC and CDC Only sync modes (<a class="" href="https://olake.io/docs/">docs</a>).</li>
<li class=""><a class="" href="https://olake.io/docs/connectors/oracle/">Oracle</a>, <a class="" href="https://olake.io/docs/connectors/db2/">Db2</a>, <a class="" href="https://olake.io/docs/connectors/s3/">S3</a> and <a class="" href="https://olake.io/docs/connectors/kafka/">Kafka</a> also work as sources, without database change capture.</li>
<li class="">It writes Iceberg tables to catalogs such as <a class="" href="https://olake.io/docs/writers/iceberg/catalog/glue/">AWS Glue</a>, with eleven catalog types listed on the <a class="" href="https://olake.io/docs/understanding/compatibility-catalogs/">catalog compatibility page</a>, or Parquet files on object storage such as S3, MinIO and Google Cloud Storage.</li>
<li class="">Syncs are stateful and resumable: after a crash, a network failure or a pause they resume from the last checkpoint instead of starting over (<a class="" href="https://olake.io/docs/">docs</a>).</li>
<li class="">Parallel chunking splits large tables into chunks that are read in parallel, in the Full Refresh, Full Refresh + CDC and Full Refresh + Incremental modes (<a class="" href="https://olake.io/docs/">docs</a>).</li>
<li class="">Schema discovery runs at the start of every sync, and a new source column is added to the Iceberg schema automatically (<a class="" href="https://olake.io/docs/features/schema/">schema evolution docs</a>).</li>
</ul>
<p><strong>Bottom line:</strong> Pick OLake Go when your sources are Postgres, MySQL/MariaDB, MongoDB or SQL Server and you want Iceberg or Parquet on storage you run.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-fivetran-best-for-many-connectors-with-no-servers">7. Fivetran: best for many connectors with no servers<a href="https://olake.io/compare/aws-etl-tools/#7-fivetran-best-for-many-connectors-with-no-servers" class="hash-link" aria-label="Direct link to 7. Fivetran: best for many connectors with no servers" title="Direct link to 7. Fivetran: best for many connectors with no servers" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-fivetran.webp" alt="Fivetran home page showing its headline and main navigation" width="1600" height="826" class="img_ev3q"></p>
<p><em>Fivetran home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: managed ELT service</li>
<li class="">Free plan: up to 500,000 monthly active rows (MAR)</li>
<li class="">Billing: MAR, counted per connection; list rates are in its <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Service Consumption Table</a> (V.10, effective 1 February 2026: Standard starts at $495 per million MAR plus a $5 base per connection)</li>
</ul>
<p>Fivetran's <a href="https://fivetran.com/docs/destinations" target="_blank" rel="noopener noreferrer" class="">docs</a> list Amazon Redshift among its destinations. It can also write Parquet files to an S3 bucket through its Managed Data Lake Service, with AWS Glue as an optional catalog for Iceberg tables.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Fivetran describes itself as fully managed, so you run no servers (we did not test that), and its pricing page lists a free plan.</li>
<li class="">Its <a href="https://www.fivetran.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists Standard with unlimited users, 15-minute syncs, 700+ fully managed connectors and a dbt Core integration. Enterprise adds 1-minute syncs, custom roles and a Hybrid deployment option.</li>
<li class="">The same page says you can save up to 22% on an annual contract.</li>
<li class="">Its <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Managed Data Lake Service docs</a> say it writes Parquet files to cloud object storage (Amazon S3, Azure Data Lake Storage or Google Cloud Storage) and always creates and maintains Iceberg table metadata.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Its <a href="https://fivetran.com/docs/managed-data-lake-service/troubleshooting/aws-glue-compaction-compatibility" target="_blank" rel="noopener noreferrer" class="">troubleshooting docs</a> say AWS Glue compaction is not supported on Fivetran-managed Iceberg tables, and the next sync restores the managed state.</li>
<li class="">A row counts as active when it changes (<a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">MAR definition</a>), and the <a href="https://www.fivetran.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> says updates include deletes, so busy tables push the bill up.</li>
<li class="">The pricing page prints no per-row rate; the <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">service consumption table</a> lists Standard from $495 per million MAR, Enterprise from $661.67 and Business Critical from $1,061.67 (list price per connection, before discounts).</li>
<li class="">The pricing page lists 15-minute syncs for Standard and 1-minute syncs for Enterprise. It also applies a $5 base charge to standard connections with usage between 1 MAR and 1M MAR.</li>
<li class="">The Managed Data Lake Service docs say Fivetran does not support position deletes for Iceberg tables, nor the S3 Glacier Flexible Retrieval, Glacier Deep Archive or Intelligent-Tiering archive tiers.</li>
<li class="">The <a href="https://fivetran.com/docs/destinations" target="_blank" rel="noopener noreferrer" class="">destinations page</a> says it is not always possible to load large datasets into row stores like PostgreSQL and MySQL, and that your provider's compute charges depend on data volume and sync frequency.</li>
</ul>
<p><strong>What users say:</strong> A Hacker News commenter on the thread about Fivetran and dbt Labs merging (October 2025) wrote <a href="https://news.ycombinator.com/item?id=45568842" target="_blank" rel="noopener noreferrer" class="">that</a> "Fivetran is convenient but absurdly expensive."</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-airbyte-best-for-connector-choice-and-self-hosting">8. Airbyte: best for connector choice and self-hosting<a href="https://olake.io/compare/aws-etl-tools/#8-airbyte-best-for-connector-choice-and-self-hosting" class="hash-link" aria-label="Direct link to 8. Airbyte: best for connector choice and self-hosting" title="Direct link to 8. Airbyte: best for connector choice and self-hosting" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-airbyte.webp" alt="Airbyte home page showing its headline and main navigation" width="1600" height="910" class="img_ev3q"></p>
<p><em>Airbyte home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: ELT with a self-hosted Core edition and a paid cloud</li>
<li class="">Core: free to self-host under the Elastic License 2.0 (<a href="https://docs.airbyte.com/platform/developer-guides/licenses/license-faq" target="_blank" rel="noopener noreferrer" class="">licence FAQ</a>)</li>
<li class="">Cloud: Standard "Starting at $20 /month" with 5 credits included and extra credits at $5 each, per <a href="https://airbyte.com/pricing" target="_blank" rel="noopener noreferrer" class="">Airbyte's pricing page</a> (read 8 October 2026)</li>
</ul>
<p>Airbyte's docs list Redshift, S3, S3 Data Lake and others as destinations. The <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake connector</a> writes Iceberg to S3 and supports AWS Glue, Nessie, Polaris and REST (representational state transfer, a standard web interface) catalogs.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Airbyte's <a href="https://docs.airbyte.com/platform/developer-guides/licenses/license-faq" target="_blank" rel="noopener noreferrer" class="">licence FAQ</a> says no limits exist on volume or users for open-source use. Your costs are servers and the people who run them.</li>
<li class="">The comparison matrix on its <a href="https://airbyte.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists 700+ connectors on all four plans.</li>
<li class="">Its <a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">CDC docs</a> list Postgres, MySQL, SQL Server, MongoDB, Oracle, SAP HANA and Db2 as current CDC sources, read on a sync interval.</li>
<li class="">The <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake docs</a> list Full Refresh Overwrite, Append and Overwrite + Deduped, plus Incremental Append and Append + Deduped. Dedup is merge-on-read, using the stream's primary keys as Iceberg identifier columns.</li>
<li class="">The pricing page shows a 14-day free trial with 400 credits, and Plus starting at $189 a month for a 40-credit package.</li>
<li class="">Its Max Sync Frequency row reads 1 hr for Standard, 15 min for Plus, and 5 min for Pro and Enterprise Flex (same page).</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Database change capture runs as scheduled syncs, not as a continuous stream, per its <a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">CDC docs</a>. The first CDC sync takes a snapshot with a SELECT statement, which is effectively a Full Refresh.</li>
<li class="">The same docs say changes made by TRUNCATE or ALTER do not appear in the logs, so they do not reach the destination, and a refresh is required after you add a new table to a CDC connection.</li>
<li class="">The S3 Data Lake docs say the connector never rewrites existing Iceberg data files and warn against running compaction during a truncate refresh (a full reload that replaces the table's data).</li>
<li class="">In the S3 Data Lake connector, objects and unions are written as string columns of serialized JSON. On Airbyte Cloud with the Glue catalog, an Airbyte team member must enable IAM role authentication.</li>
<li class="">Marketplace connectors are community-maintained with no SLA, per Airbyte's <a href="https://docs.airbyte.com/integrations/connector-support-levels" target="_blank" rel="noopener noreferrer" class="">support levels</a>. Enterprise connectors are not available to Open Source or standard Cloud customers.</li>
<li class="">Pro and Enterprise Flex use capacity-based pricing with "Talk to sales" on the <a href="https://airbyte.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>, so no price is published for them.</li>
</ul>
<p><strong>What users say:</strong> A reviewer on <a href="https://aws.amazon.com/marketplace/reviews/reviews-list/prodview-izvitkdjd4gmc" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a> (August 2026) notes "occasional syncing issues or rate-limit errors with third-party APIs".</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="9-hevo-best-for-small-teams-loading-redshift">9. Hevo: best for small teams loading Redshift<a href="https://olake.io/compare/aws-etl-tools/#9-hevo-best-for-small-teams-loading-redshift" class="hash-link" aria-label="Direct link to 9. Hevo: best for small teams loading Redshift" title="Direct link to 9. Hevo: best for small teams loading Redshift" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-hevo.webp" alt="Hevo Data home page showing its headline and main navigation" width="1600" height="904" class="img_ev3q"></p>
<p><em>Hevo Data home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: managed ELT service</li>
<li class="">Free plan: $0, up to 1 million events a month</li>
<li class="">Paid: Starter from $299 a month ($265 on annual billing), Professional from $849 a month, per <a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Hevo's pricing page</a> (read 8 October 2026)</li>
</ul>
<p><a href="https://docs.hevodata.com/destinations/" target="_blank" rel="noopener noreferrer" class="">Hevo's docs</a> list Amazon Redshift and Redshift Serverless as destinations. Its billing word is "event", which means every record inserted, updated or deleted in the destination.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">The plans are tiered and posted, and there is a 14-day free trial with no credit card (<a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">Hevo's <a href="https://docs.hevodata.com/pipelines/working-with-pipelines/log-based-pipelines/" target="_blank" rel="noopener noreferrer" class="">docs</a> describe log-based pipelines for MySQL (BinLog), PostgreSQL (logical replication), SQL Server (Change Tracking), MongoDB (Change Streams or OpLog), Oracle (Redo Logs) and DynamoDB (Streams).</li>
<li class="">The <a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> says the Free plan allows up to 5 users and 1-hour scheduling, with limited connectors.</li>
<li class="">Starter adds up to 10 users, 150+ connectors, a dbt integration, SSH/SSL and 24*7 email and live chat support (same page).</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Streaming pipelines show on the Professional and Business Critical columns of the pricing page, and the docs say Hevo Sales must enable streaming, which from Release 2.21 covers those sources except SQL Server (all variants) and DynamoDB. Business Critical is "Custom."</li>
<li class="">Its only Iceberg route in the <a href="https://docs.hevodata.com/edge/destinations/snowflake-iceberg/" target="_blank" rel="noopener noreferrer" class="">docs we read</a> is an Early Access Edge destination into Snowflake-managed Iceberg tables, not Iceberg on S3 with an open catalog.</li>
<li class="">That route needs an active Snowflake account, a Snowflake warehouse and database, and an S3 bucket with an IAM policy that grants Snowflake access. Engines such as Spark and Trino read the tables through the Horizon Iceberg REST Catalog API (same docs).</li>
<li class="">The same docs warn that a Snowflake Iceberg destination configured with access credentials may stop connecting at any time, because Snowflake is deprecating password-based authentication. Hevo recommends key pair authentication.</li>
<li class="">By Hevo's <a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">definition</a>, every insert, update or delete is an event, so a row updated five times is five events and busy tables use up quota fast.</li>
<li class="">Events above your plan's quota are on-demand and charged on top of the plan, and the page shows no rate for them (same page).</li>
</ul>
<p><strong>What users say:</strong> A reviewer on <a href="https://aws.amazon.com/marketplace/reviews/reviews-list/prodview-4odpzmzmjqczg" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a> (August 2026) says "Hevo is designed for fast individual pipelines, but struggles with many concurrent pipelines."</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="10-matillion-best-for-visual-pipelines-inside-redshift">10. Matillion: best for visual pipelines inside Redshift<a href="https://olake.io/compare/aws-etl-tools/#10-matillion-best-for-visual-pipelines-inside-redshift" class="hash-link" aria-label="Direct link to 10. Matillion: best for visual pipelines inside Redshift" title="Direct link to 10. Matillion: best for visual pipelines inside Redshift" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-matillion.webp" alt="Matillion home page showing its headline and main navigation" width="1600" height="1058" class="img_ev3q"></p>
<p><em>Matillion home page, October 2026.</em></p>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: cloud ETL platform</li>
<li class="">Billing: credits, driven by task hours (<a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit consumption terms</a>)</li>
<li class="">Price: not published on <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">Matillion's pricing page</a> (read 8 October 2026)</li>
</ul>
<p>Matillion's <a href="https://docs.maia.ai/docs/streaming/streaming-pipelines" target="_blank" rel="noopener noreferrer" class="">streaming docs</a> say streaming pipelines can write to Amazon S3, and a pre-built pipeline loads that change data into Redshift. The streaming runner is deployed in your own cloud.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Analysts can design pipelines visually. The Developer card on the <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists a low-code canvas with SQL and Python, pre-built connectors and a built-in Git repository.</li>
<li class="">The credit rates are public in Matillion's <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit consumption terms</a>: orchestration is 1 credit per task hour and transformation is 3. Streaming CDC pipelines are 1 credit per task hour for the essential type and 2 for the premium type.</li>
<li class="">Task hours count only while a pipeline runs, in 2-second increments. Validation and sampling do not count (same terms).</li>
<li class="">Matillion's <a href="https://docs.maia.ai/docs/streaming/streaming-pipelines" target="_blank" rel="noopener noreferrer" class="">streaming docs</a> list Db2 for IBM i, SQL Server, MySQL, Oracle and PostgreSQL as CDC sources, and describe "near-real-time data ingestion" into cloud storage or a warehouse.</li>
<li class="">The Teams card lists 5 developer users, an audit log and a Service Level Agreement. Scale adds custom SSO, hybrid cloud deployment and data lineage tracking (<a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>).</li>
<li class="">Per the <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing FAQ</a>, you can contract directly with Matillion or pay through your AWS, Azure or Snowflake account.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">No plan shows a dollar price, and the price per credit is not published.</li>
<li class="">Streaming change data capture is listed on the Scale card of the <a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>, and the <a href="https://docs.maia.ai/docs/streaming/streaming-pipelines" target="_blank" rel="noopener noreferrer" class="">streaming docs</a> say the feature is "only available to customers on specific Maia plans."</li>
<li class="">Streaming pipelines "only currently support relational databases as sources" per the <a href="https://docs.maia.ai/docs/streaming/streaming-pipelines" target="_blank" rel="noopener noreferrer" class="">streaming docs</a>. The streaming runner is deployed and configured in your own cloud infrastructure, with one runner per pipeline.</li>
<li class="">Developer users beyond the included ones cost 70 credits per user a month (<a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit terms</a>).</li>
<li class="">The <a href="https://www.matillion.com/legal/credit-consumption-terms" target="_blank" rel="noopener noreferrer" class="">credit terms</a> say the overage rate "will be listed on the Order Form", and under Pay-Go (capped at 60 days after the term) you lose access to all Products unless you sign a new term. Pay-Go brings no support services.</li>
<li class="">The terms do not define the "essential" and "premium" CDC pipeline types.</li>
</ul>
<p><strong>What users say:</strong> A reviewer on AWS Marketplace (June 2026) wrote "My main concern is around pricing. I'd really like more transparency and predictability on cost," in a <a href="https://aws.amazon.com/marketplace/reviews/reviews-list/B08P7F1KTL?rating=3" target="_blank" rel="noopener noreferrer" class="">review</a> about whether the Maia AI assistant stays bundled.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="11-informatica-best-for-large-governed-estates">11. Informatica: best for large, governed estates<a href="https://olake.io/compare/aws-etl-tools/#11-informatica-best-for-large-governed-estates" class="hash-link" aria-label="Direct link to 11. Informatica: best for large, governed estates" title="Direct link to 11. Informatica: best for large, governed estates" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Kind: enterprise data management suite (the cloud product is called IDMC)</li>
<li class="">Price: an <a href="https://aws.amazon.com/marketplace/pp/prodview-vetdnosd4u6oe" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace listing</a> shows $131,760 for 12 months for a bundle of 120 IPUs (Informatica Processing Units) a month (read 8 October 2026)</li>
<li class="">Iceberg: its <a href="https://docs.informatica.com/integration-cloud/cloud-data-integration-connectors/current-version.html" target="_blank" rel="noopener noreferrer" class="">connector docs</a> describe an Amazon SageMaker Lakehouse connector that can read from or write to Apache Iceberg tables</li>
</ul>
<p>The listing is a list price for one bundle, not a rate card.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its AWS Marketplace listing describes IPUs as one shared currency across data integration, ingestion and master data management services, and offers 12-month, 24-month and 36-month contract tabs.</li>
<li class="">Its <a href="https://docs.informatica.com/integration-cloud/cloud-data-integration-connectors/current-version.html" target="_blank" rel="noopener noreferrer" class="">connector docs</a> describe an Open Table Connector that reads or writes Apache Iceberg or Delta Lake tables.</li>
<li class="">The same docs say the Amazon SageMaker Lakehouse connector works with Iceberg data in S3 managed by the AWS Glue Data Catalog or the S3 tables catalog.</li>
<li class="">The Oracle CDC V2 Connector retrieves Oracle change records from a PowerExchange change data capture environment (same docs).</li>
<li class="">The <a href="https://www.informatica.com/pricing.html" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists "Free Cloud Data Integration" and a "Data Warehouse Trial" under Get Started.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Its <a href="https://www.informatica.com/pricing.html" target="_blank" rel="noopener noreferrer" class="">pricing page</a> shows no dollar price per IPU and no calculator, and ends with a "get quote" button.</li>
<li class="">The page says IPU consumption is calculated per scaler, based on the scaler's usage including Secure Agent, CDI-e and Data Mass Ingestion volume, so several usage measures feed the bill.</li>
<li class="">Overage fee rates are not published on the page either.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-each-option-bills-for">What each option bills for<a href="https://olake.io/compare/aws-etl-tools/#what-each-option-bills-for" class="hash-link" aria-label="Direct link to What each option bills for" title="Direct link to What each option bills for" translate="no">​</a></h2>
<p>The billing unit is usually the answer to a surprising invoice, and it matters more than any feature. Glue and DMS charge for capacity or compute time, so an idle DMS instance still costs money. AppFlow charges per run and per gigabyte, and Fivetran charges per changed row.</p>
<p>Here are four small examples with invented workloads. The first row comes from AWS's Glue page, and the rest are our arithmetic on the vendor rates above, so treat them as illustrations, not quotes.</p>
<table><thead><tr><th>Example</th><th>Math</th><th>Result</th></tr></thead><tbody><tr><td>Glue job, 6 DPUs for 15 minutes, at $0.44</td><td>6 x 0.25 hours x $0.44</td><td>$0.66 (AWS's own page example)</td></tr><tr><td>The same job on Glue 6.0, at $0.308</td><td>6 x 0.25 hours x $0.308</td><td>about $0.46</td></tr><tr><td>One dms.t3.medium instance for a 730-hour month</td><td>$0.0745 x 730</td><td>about $54.39, before storage and transfer</td></tr><tr><td>A daily AppFlow flow moving 10 GB a month to S3</td><td>30 runs x $0.001 + 10 GB x $0.02</td><td>$0.23</td></tr></tbody></table>
<p>Sources: <a href="https://aws.amazon.com/glue/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS Glue pricing</a> for the $0.66 example, AWS Glue <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json" target="_blank" rel="noopener noreferrer" class="">US East (Ohio) price list</a>, <a href="https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSDatabaseMigrationSvc/current/us-east-1/index.json" target="_blank" rel="noopener noreferrer" class="">AWS DMS price list</a>, <a href="https://aws.amazon.com/appflow/pricing/" target="_blank" rel="noopener noreferrer" class="">Amazon AppFlow pricing</a>. Checked October 2026.</p>
<p>Glue rates are US East (Ohio) and the DMS rate is US East (N. Virginia). The AppFlow row uses the rates in AWS's worked pricing example (Europe, Frankfurt, S3 to Snowflake hosted on AWS). Other regions can differ, and storage, data transfer and target costs come on top.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pick-the-right-aws-etl-tool">Pick the right AWS ETL tool<a href="https://olake.io/compare/aws-etl-tools/#pick-the-right-aws-etl-tool" class="hash-link" aria-label="Direct link to Pick the right AWS ETL tool" title="Direct link to Pick the right AWS ETL tool" translate="no">​</a></h2>
<table><thead><tr><th>If your situation is...</th><th>Start with</th><th>Iceberg tables on S3, per the sources above</th></tr></thead><tbody><tr><td>A few SaaS apps into S3 or Redshift</td><td>AppFlow</td><td>Not named on AppFlow's overview</td></tr><tr><td>SaaS apps or DynamoDB with no pipeline to build</td><td>Glue zero-ETL</td><td>S3 Tables is a listed target, not for self-managed databases</td></tr><tr><td>A live database moving into AWS</td><td>DMS</td><td>No Iceberg target, so a second step is needed</td></tr><tr><td>Database changes into Iceberg tables on S3</td><td>DMS plus Glue, or a tool that writes Iceberg itself</td><td>AWS's blog uses Glue jobs after DMS</td></tr><tr><td>Spark code and big batch transforms</td><td>Glue</td><td>AWS's DMS data lake blog uses Glue jobs to write Iceberg</td></tr><tr><td>Events already in Kafka or Kinesis</td><td>Firehose</td><td>Delivers streams into Iceberg tables</td></tr><tr><td>Many SaaS connectors, no servers</td><td>Fivetran or Airbyte Cloud</td><td>Both document an Iceberg route, with the limits above</td></tr><tr><td>A tool you host yourself</td><td>Airbyte Core</td><td>The S3 Data Lake connector writes Iceberg</td></tr><tr><td>Postgres, MySQL, MongoDB or SQL Server changes into Iceberg you run</td><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>Writes Iceberg and Parquet itself, per its docs</td></tr><tr><td>Redshift loads, a small team, posted prices</td><td>Hevo</td><td>Only Snowflake-managed Iceberg, in Early Access</td></tr><tr><td>Visual pipelines run inside Redshift</td><td>Matillion</td><td>Not covered here</td></tr><tr><td>A big governed estate</td><td>Informatica</td><td>A SageMaker Lakehouse connector reads and writes Iceberg</td></tr></tbody></table>
<p>Want a quicker answer? Try this short quiz.</p>
<section class="root_PuUS" aria-labelledby="_R_14lqfdbih_-h"><header><h3 id="_R_14lqfdbih_-h" class="title_QNC9" tabindex="-1">Which AWS ETL tool fits you?</h3></header><div class="progress_EyIk" role="progressbar" aria-valuemin="1" aria-valuemax="5" aria-valuenow="1" aria-label="Quiz progress"><span style="width:0%"></span></div><p class="count_OugS">Question <!-- -->1<!-- --> of <!-- -->5</p><p id="_R_14lqfdbih_-q" class="question_IKMS">Where does your data start?</p><p class="hint_x3sW">The source cuts the list in half right away.</p><div role="radiogroup" aria-labelledby="_R_14lqfdbih_-q" class="options_xbjx"><button type="button" role="radio" aria-checked="false" tabindex="0" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">A</span><span class="optLabel_qDTb">SaaS apps such as Salesforce</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">B</span><span class="optLabel_qDTb">A live database</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">C</span><span class="optLabel_qDTb">Events already in Kafka or Kinesis</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">D</span><span class="optLabel_qDTb">A mix of databases and SaaS apps</span></button></div><div class="actions_XZHX"><button type="button" class="primary_KVNI" disabled="">Next</button></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tools-that-often-appear-on-these-lists-but-are-not-here">Tools that often appear on these lists but are not here<a href="https://olake.io/compare/aws-etl-tools/#tools-that-often-appear-on-these-lists-but-are-not-here" class="hash-link" aria-label="Direct link to Tools that often appear on these lists but are not here" title="Direct link to Tools that often appear on these lists but are not here" translate="no">​</a></h2>
<p><strong>AWS Data Pipeline</strong> is not a current option. AWS's <a href="https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/what-is-datapipeline.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say it is "no longer available to new customers" and is in maintenance mode with no new features planned. Existing customers can keep using it, so do not start a new project on it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-note-on-iceberg-and-open-table-formats">A note on Iceberg and open table formats<a href="https://olake.io/compare/aws-etl-tools/#a-note-on-iceberg-and-open-table-formats" class="hash-link" aria-label="Direct link to A note on Iceberg and open table formats" title="Direct link to A note on Iceberg and open table formats" translate="no">​</a></h2>
<p>Many teams now want Apache Iceberg tables on S3, so several engines can read the same data. AWS's DMS target list does not name Iceberg, AppFlow's overview does not mention it, and Firehose takes streams rather than databases as its source now. Glue, Airbyte, Informatica and Fivetran each document a route, and the limits we found are in their entries above.</p>
<p>If that is your goal, OLake Go (entry 6) writes Iceberg or Parquet on storage you own, and the <a class="" href="https://olake.io/docs/">OLake Go docs</a> cover the rest.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="test-two-finalists-before-you-commit">Test two finalists before you commit<a href="https://olake.io/compare/aws-etl-tools/#test-two-finalists-before-you-commit" class="hash-link" aria-label="Direct link to Test two finalists before you commit" title="Direct link to Test two finalists before you commit" translate="no">​</a></h2>
<p>Run one real table through two finalists and write down what you see. This checklist is our suggestion, not a vendor procedure, and one table does not prove production reliability.</p>
<ul>
<li class=""><strong>Initial load:</strong> do the row counts in the destination match the source?</li>
<li class=""><strong>Update:</strong> does a changed row show up as a change or as a second copy?</li>
<li class=""><strong>Delete:</strong> what happens to a row you delete at the source?</li>
<li class=""><strong>Column change:</strong> add or rename a column and note what lands, or what fails.</li>
<li class=""><strong>Restart:</strong> stop the job mid-run, restart it, and check for gaps or duplicates.</li>
<li class=""><strong>Bill:</strong> compare the month's usage with the vendor's billing unit, then confirm the rates on its page.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faqs">FAQs<a href="https://olake.io/compare/aws-etl-tools/#faqs" class="hash-link" aria-label="Direct link to FAQs" title="Direct link to FAQs" translate="no">​</a></h2>
<div class="olake-faq"><details class="alert olake-faq__item"><summary><span class="olake-faq__question">What is the best ETL tool for AWS?</span></summary><div class="olake-faq__answer">It depends on the source. AppFlow suits SaaS apps, DMS suits live databases, Glue suits Spark code and batch jobs, and Firehose suits event streams. Outside tools such as Fivetran, Airbyte and Hevo bring their own connector libraries.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Is AWS Glue an ETL tool?</span></summary><div class="olake-faq__answer">Yes. AWS describes Glue as a serverless data integration service that runs Apache Spark jobs. It bills DPU-hours at $0.44 for earlier Glue versions and $0.308 for Glue 6.0 and above in US East (Ohio), per AWS's price list file published 6 October 2026.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Can AWS DMS write Apache Iceberg tables?</span></summary><div class="olake-faq__answer">Not directly. AWS's list of DMS target endpoints has no Iceberg entry. DMS lands raw full-load and change data capture (CDC) files in an S3 bucket, and AWS's own blog then uses Glue jobs to apply them to Iceberg tables.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Is AWS Data Pipeline still available?</span></summary><div class="olake-faq__answer">Only if you are already a customer. AWS's docs say it is no longer available to new customers and is in maintenance mode with no new features planned.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">What does a small AppFlow workload cost?</span></summary><div class="olake-faq__answer">AppFlow charges $0.001 per flow run and $0.02 per GB in AWS's pricing examples for AWS destinations. A daily flow moving 10 GB a month comes to about $0.23 on those rates, by our arithmetic. Non-AWS destinations are priced differently, so check the page first.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Can Glue or AppFlow read database changes (CDC)?</span></summary><div class="olake-faq__answer">Not that we could find. We saw no native log-based CDC for self-managed databases in Glue's docs, and AppFlow's overview names SaaS apps as sources. DMS reads changes from database logs. Glue zero-ETL sends self-managed database data to Redshift only.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Which ETL tools on this list have a free plan?</span></summary><div class="olake-faq__answer">Fivetran has a free plan for up to 500,000 monthly active rows, and Hevo has one for up to 1 million events a month, per their pricing pages. Airbyte Core is free to self-host under the Elastic License 2.0, and OLake Go is open source under Apache 2.0. AWS Glue shows no free tier for ETL jobs on its pricing page.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">How should I compare ETL tool prices on AWS?</span></summary><div class="olake-faq__answer">Start with the billing unit: DPU-hours for Glue, instance hours for DMS, runs and GB for AppFlow, monthly active rows for Fivetran, events for Hevo and credits for Airbyte Cloud and Matillion. Then price one real table on each, and add storage, transfer and warehouse costs.</div></details></div>
<aside class="not-prose my-10 rounded-[16px] border border-solid border-olake-line bg-olake-surface p-[24px] lg:p-[32px]"><p class="m-0 text-[22px] leading-[1.2] tracking-[-0.01em] text-olake-ink lg:text-[26px]">OLake Go</p><p class="m-0 mt-[10px] max-w-[620px] text-[15px] leading-[1.6] text-olake-text-2">Replicate databases, Kafka, and S3 into Apache Iceberg with OLake Go, an open source EL engine built for Iceberg from the ground up.</p><div class="mt-[20px] flex flex-wrap gap-[10px]"><a href="https://olake.io/contact/" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-blue-ring bg-olake-blue text-olake-on-blue! hover:border-olake-blue-hover hover:bg-olake-blue-hover hover:text-white!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Signup</a><a href="https://olake.io/slack/" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M221.13,128A32,32,0,0,0,184,76.31V56a32,32,0,0,0-56-21.13A32,32,0,0,0,76.31,72H56a32,32,0,0,0-21.13,56A32,32,0,0,0,72,179.69V200a32,32,0,0,0,56,21.13A32,32,0,0,0,179.69,184H200a32,32,0,0,0,21.13-56ZM72,152a16,16,0,1,1-16-16H72Zm48,48a16,16,0,0,1-32,0V152a16,16,0,0,1,16-16h16Zm0-80H56a16,16,0,0,1,0-32h48a16,16,0,0,1,16,16Zm0-48H104a16,16,0,1,1,16-16Zm16-16a16,16,0,0,1,32,0v48a16,16,0,0,1-16,16H136Zm16,160a16,16,0,0,1-16-16V184h16a16,16,0,0,1,0,32Zm48-48H152a16,16,0,0,1-16-16V136h64a16,16,0,0,1,0,32Zm0-48H184V104a16,16,0,1,1,16,16Z"></path></svg>Join Slack</a><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>Explore OLake GitHub</a></div><p class="m-0 mt-[16px] text-[13px] text-olake-muted">Contact us at <strong class="font-medium text-olake-text-2">hello@olake.io</strong></p></aside>]]></content>
        <author>
            <name>Priyansh Khodiyar</name>
            <email>hello@olake.io</email>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="ETL" term="ETL"/>
        <category label="Data Pipeline Tools" term="Data Pipeline Tools"/>
        <category label="AWS" term="AWS"/>
        <category label="Best-of" term="Best-of"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[MySQL to Iceberg Tools: 8 Compared (2026)]]></title>
        <id>https://olake.io/compare/mysql-to-iceberg-tools/</id>
        <link href="https://olake.io/compare/mysql-to-iceberg-tools/"/>
        <updated>2026-10-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MySQL to Iceberg tools compared: eight options on binlog setup, catalogs, deletes, upkeep and price, with each tool's documented limits.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="eager" src="https://olake.io/img/blog/cover/mysql-to-iceberg-tools-cover.webp" alt="MySQL to Iceberg tools compared, showing a database flowing through a replication tool into Iceberg tables" width="1920" height="1080" fetchpriority="high" class="img_ev3q"></p>
<section class="olake-tldr" aria-label="Key takeaways"><p class="olake-tldr__label"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"></path></svg><span>Key takeaways</span></p><div class="olake-tldr__body"><p>Short version: none of these MySQL to Iceberg tools is best for everyone. They copy MySQL changes into Apache Iceberg using a technique called change data capture (CDC), and your pick depends on who will run it and what you already own.</p><ul>
<li class="">Already on Kafka? Look at Kafka Connect.</li>
<li class="">On Flink? Try Flink CDC.</li>
<li class="">Want a vendor to run it for you? Fivetran, Airbyte and Estuary are the ones to check.</li>
</ul><p>Before you commit, ask three things. Which MySQL settings does the tool need, how does it write deletes, and who compacts the small files?</p><ul>
<li class="">Most tools here read MySQL through its binary log (the binlog), in ROW format with a full row image.</li>
<li class="">The tools don't agree on the settings. Some tools, such as Supermetal, list <code>binlog_row_metadata=FULL</code> in their prerequisites, while the Debezium, Airbyte and Fivetran pages don't.</li>
<li class="">MySQL deletes old binlog files after a set time. Keep your tool down longer than that and you're taking a new snapshot.</li>
<li class="">Fivetran's lake destination doesn't support Iceberg position deletes, and Flink CDC's Iceberg sink needs a primary key. Good to know before you pick.</li>
</ul></div></section>
<p>Every fact about a tool comes from its own documentation or pricing page, read on 1 October 2026. Prices were re-read on 7 October 2026. When a page says nothing, we write "not stated" instead of guessing.</p>
<p>We did not run the other tools, so any "easy", "fast" or "reliable" claim below about them is the vendor's, not ours. There are no user quotes either, because the public threads we found were about Postgres, SaaS sources or came from vendors, and we would rather print none.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-mysql-to-iceberg-involves">What "MySQL to Iceberg" involves<a href="https://olake.io/compare/mysql-to-iceberg-tools/#what-mysql-to-iceberg-involves" class="hash-link" aria-label="Direct link to What &quot;MySQL to Iceberg&quot; involves" title="Direct link to What &quot;MySQL to Iceberg&quot; involves" translate="no">​</a></h2>
<p>Picture it: your MySQL database is busy all day, and you want its changes sitting in cheap storage where query tools can read them as tables. That's the whole job. Two parts matter, how you read MySQL and how you write Iceberg.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/mysql-to-iceberg-tools-pipeline-steps.webp" alt="MySQL changes travel through the binary log to a reader tool and land as Iceberg files in a catalog" width="1600" height="720" class="img_ev3q"></p>
<p><strong>Reading MySQL.</strong> MySQL writes down every change in its binary log, like a diary that never skips an entry. <a href="https://debezium.io/documentation/reference/stable/connectors/mysql.html" target="_blank" rel="noopener noreferrer" class="">Debezium's MySQL docs</a> call it a record of all operations in commit order, including schema changes. A CDC tool reads each entry and turns it into an insert, update or delete event.</p>
<p><strong>Three settings decide what your tool can actually see.</strong></p>
<p>First, <code>binlog_format</code> must be <code>ROW</code>, so the log holds the changed rows and not just the SQL text. Second, <code>binlog_row_image</code> set to <code>FULL</code> makes MySQL write every column of the row. Supermetal's docs say it's needed "to capture complete before and after row images".</p>
<p>Third, <code>binlog_row_metadata</code> set to <code>FULL</code> adds column details to each event. Only some tools ask for this one, which is where the confusion starts.</p>
<p><strong>The tool joins as a replica.</strong> Fivetran's docs say "we connect to your database as a replica", and Flink CDC's docs say its reader joins the cluster as another server. That means most binlog readers here need their own unique server id and a user with replication privileges, as their docs describe. Fivetran calls it a replica ID, and Estuary has an advanced Node ID setting that it picks for you if you leave it unset.</p>
<p><strong>GTID is optional in most docs.</strong> A global transaction identifier (GTID) is just a label MySQL sticks on each transaction. Debezium says you don't need it, Supermetal recommends it for failover, and Flink CDC needs it for high availability.</p>
<p><strong>Snapshot, then changes.</strong> First the tool copies the rows that already exist. That's the initial snapshot. Then it reads the binlog from where the snapshot began, and Debezium's docs explain why that matters: MySQL purges binlogs after a set time.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/mysql-to-iceberg-tools-binlog-purge.webp" alt="A tool back before MySQL purges old logs resumes, while one out too long needs a new snapshot" width="1600" height="720" class="img_ev3q"></p>
<p><strong>Retention is the clock.</strong> MySQL throws old logs away, and it won't wait for your tool. Debezium's docs say that if the saved position is gone, the connector fails and asks for a new snapshot, unless you set <code>snapshot.mode</code> to <code>when_needed</code>.</p>
<p>Advice on how long to keep logs runs from 3 days at Supermetal to 10 days at Airbyte.</p>
<p><strong>Writing Iceberg.</strong> Apache Iceberg is a table format: Parquet data files plus metadata that lets engines such as Spark, Trino and Athena treat them as one table. A catalog keeps track of where each table's metadata lives, and many offer a REST (web API) interface. Every commit makes a new snapshot, which is just a saved version of the table.</p>
<p>Updates and deletes get into Iceberg one of two ways. Either you rewrite data files, or you write delete files that mark old rows as removed.</p>
<p>A tool that applies each change this way is said to upsert, meaning update or insert. Equality deletes match rows by key value, and positional deletes point at a file path and row position. Here's the catch: the kind you pick decides which query engines can read the result.</p>
<p>Frequent commits leave lots of small files. Compaction rewrites them into fewer big ones, and old snapshots need expiring too.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-we-picked">How we picked<a href="https://olake.io/compare/mysql-to-iceberg-tools/#how-we-picked" class="hash-link" aria-label="Direct link to How we picked" title="Direct link to How we picked" translate="no">​</a></h2>
<p>We kept the rules simple. A tool made the list if its own docs show a MySQL source and an Apache Iceberg destination, or a documented route to one. Then we compared how each reads MySQL, how it writes updates, deletes and schema changes, who compacts, what the price is based on, and what the docs say it cannot do.</p>
<p>One name you might expect is missing, Amazon Data Firehose. <a href="https://aws.amazon.com/blogs/aws/replicate-changes-from-databases-to-apache-iceberg-tables-using-amazon-data-firehose/" target="_blank" rel="noopener noreferrer" class="">AWS's launch post</a> for its database-to-Iceberg feature now says the preview ended on 30 September 2025 and the capability cannot be tried.</p>
<p>Each tool's documented strengths and scope sit side by side in the tables below.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="mysql-to-iceberg-tools-at-a-glance">MySQL to Iceberg Tools at a Glance<a href="https://olake.io/compare/mysql-to-iceberg-tools/#mysql-to-iceberg-tools-at-a-glance" class="hash-link" aria-label="Direct link to MySQL to Iceberg Tools at a Glance" title="Direct link to MySQL to Iceberg Tools at a Glance" translate="no">​</a></h2>
<p><strong>Reading MySQL</strong></p>
<table><thead><tr><th>Tool</th><th>Binlog settings the docs list</th><th>Retention advice in docs</th></tr></thead><tbody><tr><td>Debezium Server with community Iceberg sink</td><td>ROW, row image FULL; row metadata not listed</td><td>Example of 10 days</td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go (MySQL 5.7 or newer)</td><td>ROW, row image FULL, row metadata FULL listed</td><td>7 days in the generic guide</td></tr><tr><td>Kafka Connect: Debezium source plus Iceberg sink</td><td>Same as Debezium</td><td>Same as Debezium</td></tr><tr><td>Flink CDC</td><td>Row image and metadata not stated on pages we read</td><td>Not stated</td></tr><tr><td>Airbyte</td><td>ROW, row image FULL; row metadata not listed</td><td>10 days recommended</td></tr><tr><td>Fivetran (binary log method)</td><td>ROW; row image and metadata not listed</td><td>1 day minimum, 7 recommended</td></tr><tr><td>Estuary</td><td>ROW; row metadata listed only in the Aurora steps</td><td>At least 7 days</td></tr><tr><td>Supermetal (MySQL 5.7 or newer)</td><td>ROW, row image FULL, row metadata FULL</td><td>3 days recommended</td></tr></tbody></table>
<p><strong>Table behaviour and price</strong></p>
<table><thead><tr><th>Tool</th><th>Updates and deletes</th><th>Schema changes</th><th>Compaction and cleanup</th><th>Pricing basis (read Oct 2026)</th></tr></thead><tbody><tr><td>Debezium Server sink</td><td>Append by default; upsert is a setting</td><td>New columns added by default</td><td>Not on the Debezium page; the sink's own FAQ says to run periodic maintenance</td><td>Free (Apache 2.0), you pay for servers</td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>Upsert with equality deletes, positional deletes or deletion vectors (v0.11.0 and later); or append</td><td><a class="" href="https://olake.io/docs/features/schema/">Adds, drops and renames detected; type widening</a></td><td>OLake Fusion (Lite, Medium, Full)</td><td>Free (Apache 2.0), you pay for servers</td></tr><tr><td>Kafka Connect</td><td>CDC feature, fed by an experimental Debezium transform</td><td>Off by default</td><td>Not covered</td><td>No licence fee, you pay for Kafka and servers</td></tr><tr><td>Flink CDC</td><td>Primary key required; at-least-once</td><td>MySQL source sends schema changes by default</td><td>Not described</td><td>Free, you pay for the Flink cluster</td></tr><tr><td>Airbyte</td><td>Dedup mode: equality delete plus insert; or append</td><td>Add, drop, widen a column; never rewrites old files</td><td>Not described</td><td>Core free; Cloud on credits</td></tr><tr><td>Fivetran</td><td>No position deletes; method not stated</td><td>Not stated</td><td>Daily snapshot cleanup; compaction not listed</td><td>Monthly active rows for connectors; no lake-specific rate found</td></tr><tr><td>Estuary</td><td>Spark jobs merge updates; delete file type not stated</td><td>Not stated</td><td>Optional Glue optimizers, off by default</td><td><a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">$0.50 per GB moved plus connector instances</a>, read 7 Oct 2026</td></tr><tr><td>Supermetal</td><td>Merge-on-read (equality by default, or positional) or append</td><td>No data type promotion; partition changes need a new table</td><td>You run it, with Spark or Trino</td><td>Compute based; Enterprise Self-Hosted "from $10K/ year", per its <a href="https://supermetal.io/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>, read 7 Oct 2026</td></tr></tbody></table>
<p>Prices change often, so double-check the vendor's page before you budget. Estuary's and Supermetal's figures are quoted as the vendors print them.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-8-tools-one-at-a-time">The 8 tools, one at a time<a href="https://olake.io/compare/mysql-to-iceberg-tools/#the-8-tools-one-at-a-time" class="hash-link" aria-label="Direct link to The 8 tools, one at a time" title="Direct link to The 8 tools, one at a time" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-debezium-server-with-the-community-iceberg-sink-best-for-kafka-free-debezium">1. Debezium Server with the community Iceberg sink: best for Kafka-free Debezium<a href="https://olake.io/compare/mysql-to-iceberg-tools/#1-debezium-server-with-the-community-iceberg-sink-best-for-kafka-free-debezium" class="hash-link" aria-label="Direct link to 1. Debezium Server with the community Iceberg sink: best for Kafka-free Debezium" title="Direct link to 1. Debezium Server with the community Iceberg sink: best for Kafka-free Debezium" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-debezium.webp" alt="Debezium home page showing its headline and main navigation" width="1600" height="899" class="img_ev3q"></p>
<p><em>Debezium home page, October 2026.</em></p>
<p><strong>At a glance:</strong> Apache 2.0 · self-hosted · Java 21 · free licence</p>
<p>Debezium is an open-source change reader. <a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">Debezium Server's docs</a> describe an Iceberg sink that consumes events from a source Debezium connector and calls it "a community-maintained, open-source project" kept in a separate repository.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/mysql-to-iceberg-tools-debezium-binlog.webp" alt="Debezium MySQL docs section on enabling the binlog with server-id, log_bin, binlog_format ROW and binlog_row_image FULL" width="1600" height="553" class="img_ev3q"></p>
<p><em>Debezium's MySQL connector documentation, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its docs describe running Debezium's own MySQL reader without Kafka, which is the main reason to pick it.</li>
<li class="">The MySQL docs spell out the user privileges and cover Amazon RDS and Aurora, where the snapshot needs <code>LOCK TABLES</code>.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">It's community maintained, not part of Debezium's core, and the Iceberg sink's docs page doesn't list supported catalogs. Its own <a href="https://memiiso.github.io/debezium-server-iceberg/faq/" target="_blank" rel="noopener noreferrer" class="">FAQ</a> says upsert tables need periodic jobs to compact data and rewrite delete files.</li>
<li class="">Upsert is off by default, so a fresh setup just appends every event (the sink's <a href="https://github.com/memiiso/debezium-server-iceberg/blob/master/docs/iceberg.md" target="_blank" rel="noopener noreferrer" class="">configuration page</a> lists the settings). Even once upsert is on, deleted rows are kept and marked unless you change a second setting.</li>
<li class="">On RDS the binlog stays off unless automated backups are on, and <code>binlog_row_value_options</code> must not be <code>PARTIAL_JSON</code>. Both come from the MySQL docs.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-olake-go-best-for-a-self-hosted-mysql-to-iceberg-job-run-from-a-ui">2. OLake Go: best for a self-hosted MySQL to Iceberg job run from a UI<a href="https://olake.io/compare/mysql-to-iceberg-tools/#2-olake-go-best-for-a-self-hosted-mysql-to-iceberg-job-run-from-a-ui" class="hash-link" aria-label="Direct link to 2. OLake Go: best for a self-hosted MySQL to Iceberg job run from a UI" title="Direct link to 2. OLake Go: best for a self-hosted MySQL to Iceberg job run from a UI" translate="no">​</a></h3>
<img src="https://olake.io/img/logo/olake-blue-with-text.svg" alt="OLake" height="32" style="display:block;margin:2px 0 14px">
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-olake.webp" alt="OLake home page showing its headline and main navigation" width="1600" height="957" class="img_ev3q"></p>
<p><em>OLake home page, October 2026.</em></p>
<p><strong>At a glance:</strong> Apache 2.0 · self-hosted · UI or CLI · Iceberg or Parquet only</p>
<p>OLake Go is open source under Apache 2.0 and copies databases into Iceberg tables on storage you control. It reads the binlog on MySQL 5.7 or newer and supports the MariaDB flavour as a CDC source (see the <a class="" href="https://olake.io/docs/connectors/mysql/">MySQL connector page</a>).</p>
<p>It has four sync modes:</p>
<ul>
<li class="">Full Refresh (<code>full_refresh</code>) copies every row.</li>
<li class="">Full Refresh + Incremental (<code>incremental</code>) copies rows past a cursor column, such as an updated-at timestamp.</li>
<li class="">Full Refresh + CDC (<code>cdc</code>) takes a snapshot, then reads the binlog.</li>
<li class="">CDC Only (<code>strict_cdc</code>) reads the binlog with no initial snapshot.</li>
</ul>
<p><strong>What's good</strong></p>
<ul>
<li class="">Catalogs include Glue, JDBC, Hive and REST catalogs such as Lakekeeper and S3 Tables, on S3, MinIO, GCS or Azure Data Lake Storage Gen2.</li>
<li class="">You choose between equality deletes, positional deletes and deletion vectors, which lets you match your query engine, subject to the reader limits below.</li>
<li class="">Full loads use parallel chunking and automatic resume for failed runs, with setup guides for Aurora, RDS, Azure and Cloud SQL.</li>
<li class="">Compaction is covered too, as <a class="" href="https://olake.io/docs/fusion/compaction/types-of-compaction/">OLake Fusion</a>, with Lite, Medium and Full types.</li>
</ul>
<p><strong>Good to know</strong></p>
<ul>
<li class="">You run it on your own infrastructure, through the UI or the command line (see the <a class="" href="https://olake.io/docs/install/olake-ui/">UI install guide</a>).</li>
<li class="">Deletion vectors are an Iceberg v3 feature that the <a class="" href="https://olake.io/docs/release/ingestion/v0.11.0/">v0.11.0 release notes</a> add as a delete mode. Pick the delete mode that matches your query engine, and use the <a class="" href="https://olake.io/docs/understanding/compatibility-engines/">engine compatibility page</a> to see which engines read each one.</li>
<li class="">The <a class="" href="https://olake.io/docs/understanding/compatibility-catalogs/">catalogs compatibility page</a> lists Nessie and Polaris as REST catalogs with setup links.</li>
<li class="">The prerequisites list <code>binlog_row_metadata=FULL</code>, and the v0.10.0 <a class="" href="https://olake.io/docs/release/ingestion/v0.10.0/">release notes</a> say MySQL CDC also works without it.</li>
<li class="">MySQL <code>BINARY</code> columns written to Iceberg are tracked in an <a href="https://github.com/datazip-inc/olake/issues/1031" target="_blank" rel="noopener noreferrer" class="">open issue in the OLake repository</a>, reported on v0.8.2.</li>
</ul>
<p><strong>Bottom line:</strong> Pick OLake Go if you want a UI, a documented catalog list and no licence fee. Fivetran, Airbyte Cloud and Estuary suit teams that want a vendor to run the pipeline, and Kafka Connect suits several systems reading one change stream.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/mysql-to-iceberg-tools-olake-prereq.webp" alt="MySQL connector docs page listing binary logging prerequisites including ROW format, row image, row metadata and optional GTID" width="1600" height="935" class="img_ev3q"></p>
<p><em>The OLake Go MySQL connector page, October 2026.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-kafka-connect-with-a-debezium-source-and-the-iceberg-sink-best-for-teams-already-on-kafka">3. Kafka Connect with a Debezium source and the Iceberg sink: best for teams already on Kafka<a href="https://olake.io/compare/mysql-to-iceberg-tools/#3-kafka-connect-with-a-debezium-source-and-the-iceberg-sink-best-for-teams-already-on-kafka" class="hash-link" aria-label="Direct link to 3. Kafka Connect with a Debezium source and the Iceberg sink: best for teams already on Kafka" title="Direct link to 3. Kafka Connect with a Debezium source and the Iceberg sink: best for teams already on Kafka" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-kafka-connect.webp" alt="Kafka Connect home page showing its headline and main navigation" width="1600" height="825" class="img_ev3q"></p>
<p><em>Kafka Connect home page, October 2026.</em></p>
<p><strong>At a glance:</strong> you run Kafka and Kafka Connect · Iceberg sink from the Iceberg project · no licence fee</p>
<p><a href="https://iceberg.apache.org/docs/nightly/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">The Iceberg docs</a> describe a Kafka Connect sink that writes Kafka data into Iceberg tables, and name Debezium source connectors as the way to bring database changes into Kafka. Debezium reads MySQL into Kafka topics, and the sink moves them on from there. Exactly-once delivery is a listed feature, and it relies on Kafka 2.5 or later.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Many consumers can read the same Kafka topics, so the lake is just one of several readers.</li>
<li class="">Catalog examples include REST, Glue, Nessie and Hive, and one sink can write several tables.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Heads up: the Debezium transform that prepares change events is marked experimental in the Iceberg docs.</li>
<li class="">Table creation and schema evolution are off by default, and the page doesn't cover compaction.</li>
<li class="">You end up running three systems, not one.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-flink-cdc-best-for-teams-that-already-run-flink">4. Flink CDC: best for teams that already run Flink<a href="https://olake.io/compare/mysql-to-iceberg-tools/#4-flink-cdc-best-for-teams-that-already-run-flink" class="hash-link" aria-label="Direct link to 4. Flink CDC: best for teams that already run Flink" title="Direct link to 4. Flink CDC: best for teams that already run Flink" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-flink-cdc.webp" alt="Apache Flink CDC home page showing its headline and main navigation" width="1600" height="1000" class="img_ev3q"></p>
<p><em>Apache Flink CDC home page, October 2026.</em></p>
<p><strong>At a glance:</strong> Apache 2.0 · runs on Apache Flink · Java 11 or newer · pipeline YAML</p>
<p>Flink CDC has a MySQL pipeline source and an Iceberg pipeline sink, so both halves live in one project. The <a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/mysql/" target="_blank" rel="noopener noreferrer" class="">MySQL source docs</a> describe a snapshot followed by the changes. The <a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">Iceberg sink docs</a> list automatic table creation, schema synchronisation, and batch or streaming writes.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">One tool covers both the snapshot and the change stream, and the snapshot is split into chunks of 8,096 rows by default.</li>
<li class="">Per the docs, unlike the Postgres source, the MySQL source sends schema change events by default, so the sink can follow table changes.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The MySQL JDBC driver isn't bundled, because its GPLv2 licence doesn't fit the project. You download <code>mysql-connector-java</code> 8.0.27 yourself and pass it with <code>--jar</code>.</li>
<li class="">The source table must have a primary key, and the Iceberg sink doesn't offer exactly-once semantics. It's at-least-once, so the docs lean on the primary key to make a repeated write give the same result.</li>
<li class="">Catalog types are Hadoop, Hive, Glue or a custom class. REST isn't stated, and each parallel reader needs its own server id.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-airbyte-best-for-teams-that-want-one-tool-for-databases-and-saas-apps">5. Airbyte: best for teams that want one tool for databases and SaaS apps<a href="https://olake.io/compare/mysql-to-iceberg-tools/#5-airbyte-best-for-teams-that-want-one-tool-for-databases-and-saas-apps" class="hash-link" aria-label="Direct link to 5. Airbyte: best for teams that want one tool for databases and SaaS apps" title="Direct link to 5. Airbyte: best for teams that want one tool for databases and SaaS apps" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-airbyte.webp" alt="Airbyte home page showing its headline and main navigation" width="1600" height="910" class="img_ev3q"></p>
<p><em>Airbyte home page, October 2026.</em></p>
<p><strong>At a glance:</strong> Core self-managed (Elastic License 2.0) · Cloud · Enterprise Flex hybrid · S3 Data Lake destination</p>
<p>Airbyte's <a href="https://docs.airbyte.com/integrations/sources/mysql" target="_blank" rel="noopener noreferrer" class="">MySQL source</a> reads the binlog and recommends CDC over its cursor-based method. Its <a href="https://docs.airbyte.com/integrations/destinations/s3-data-lake" target="_blank" rel="noopener noreferrer" class="">S3 Data Lake destination</a> calls itself "official support for the Iceberg protocol on S3" and supports REST, Glue, Nessie and Polaris catalogs. The two live on separate docs pages.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Airbyte's <a href="https://airbyte.com/connectors" target="_blank" rel="noopener noreferrer" class="">connectors page</a>, read 7 October 2026, counts its connectors in the hundreds, so MySQL is one of many sources you can wire up.</li>
<li class="">The MySQL page lists the exact settings and suggests 10 days of retention.</li>
<li class="">Deduplication is documented as merge-on-read, meaning updates are written as delete files and applied when you query. Each update is an equality delete plus an insert. Core is free to self-host, and Cloud is credit based.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">On Amazon RDS, the binlog retention parameter defaults to 0 hours. The docs say that means logs are removed at once, so you must raise it.</li>
<li class="">The destination never rewrites existing Iceberg data files, so only some schema changes work, and objects are written as JSON strings. The page doesn't describe compaction.</li>
<li class="">Core uses the Elastic License 2.0, which is NOT an open-source licence. Syncs run on a schedule, not as a continuous stream.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-fivetran-managed-data-lake-service-best-for-hands-off-vendor-run-pipelines">6. Fivetran Managed Data Lake Service: best for hands-off, vendor-run pipelines<a href="https://olake.io/compare/mysql-to-iceberg-tools/#6-fivetran-managed-data-lake-service-best-for-hands-off-vendor-run-pipelines" class="hash-link" aria-label="Direct link to 6. Fivetran Managed Data Lake Service: best for hands-off, vendor-run pipelines" title="Direct link to 6. Fivetran Managed Data Lake Service: best for hands-off, vendor-run pipelines" translate="no">​</a></h3>
<p><strong>At a glance:</strong> SaaS · writes Parquet to your S3, Azure or GCS bucket · Iceberg metadata always created · monthly active rows pricing</p>
<p><a href="https://fivetran.com/docs/connectors/databases/mysql/setup-guide" target="_blank" rel="noopener noreferrer" class="">Fivetran's MySQL setup guide</a> offers the binary log or Teleport Sync, and wants <code>binlog_format=ROW</code>. Its <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Managed Data Lake Service docs</a> say your data stays in your cloud storage while Fivetran keeps the Iceberg metadata. We found no page that pairs the two, so treat Fivetran as a conditional candidate and ask it to confirm the combination.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Fivetran's docs say it runs the pipeline and the table upkeep, including snapshot cleanup every day. We have not tested that.</li>
<li class="">Per its docs, your data stays in your own bucket, with a Fivetran Catalog built on Apache Polaris by default, or another supported catalog.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The lake docs say there's no support for Iceberg position deletes, and they don't say which delete method is used.</li>
<li class="">Teleport Sync, the alternative to the binary log, "disables large, rapidly changing tables if they fail to sync". Compaction isn't in the lake page's list of maintenance operations.</li>
<li class="">The destination runs as SaaS only. Fivetran's connector pricing counts monthly active rows, and we found no separate lake rate.</li>
</ul>
<p><strong>Ask Fivetran before you rely on it:</strong> does the MySQL connector write to the Managed Data Lake Service, which delete method it uses, and what the lake destination adds to the monthly active rows bill.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/mysql-to-iceberg-tools-fivetran-mdls.webp" alt="Fivetran Managed Data Lake Service docs saying it always creates Apache Iceberg metadata for tables in your cloud storage" width="1600" height="667" class="img_ev3q"></p>
<p><em>Fivetran's Managed Data Lake Service documentation, October 2026.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-estuary-best-for-aws-teams-that-want-a-vendor-to-run-it">7. Estuary: best for AWS teams that want a vendor to run it<a href="https://olake.io/compare/mysql-to-iceberg-tools/#7-estuary-best-for-aws-teams-that-want-a-vendor-to-run-it" class="hash-link" aria-label="Direct link to 7. Estuary: best for AWS teams that want a vendor to run it" title="Direct link to 7. Estuary: best for AWS teams that want a vendor to run it" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-estuary.webp" alt="Estuary Flow home page showing its headline and main navigation" width="1600" height="937" class="img_ev3q"></p>
<p><em>Estuary Flow home page, October 2026.</em></p>
<p><strong>At a glance:</strong> Cloud, private or Bring Your Own Cloud (BYOC) · Business Source License · MySQL capture plus Iceberg materialization</p>
<p>Estuary's <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/MySQL/" target="_blank" rel="noopener noreferrer" class="">MySQL capture docs</a> need <code>binlog_format=ROW</code> and a binlog expiry of at least 7 days. Its <a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Iceberg connector</a> works differently: it "orchestrates Spark jobs running on your configured compute system to merge updates into materialized tables".</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">One product documents both MySQL capture and Iceberg materialization, plus a hosted option, with MySQL setup steps for self-hosted, RDS, Aurora, Cloud SQL and Azure.</li>
<li class="">The docs describe catalog setups for Glue, Snowflake Open Catalog and Dremio Cloud.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The Iceberg connector needs an AWS EMR Serverless application you configure, an S3 staging bucket and IAM roles. That is three AWS pieces to set up before a first sync.</li>
<li class="">Today it supports only REST catalogs on Amazon S3 storage. GCP and Azure are planned.</li>
<li class="">Billing has two meters. Estuary's <a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> (read 7 October 2026) lists $0.50 per GB moved, plus connector instances: $100 a month each for the first six, $50 each after that. It also lists a free tier of 10 GB a month with 2 connector instances.</li>
</ul>
<p><strong>Ask Estuary before you rely on it:</strong> how GB moved is counted for a busy MySQL table, since the bill has two meters.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-supermetal-best-for-a-single-self-hosted-agent-priced-on-compute">8. Supermetal: best for a single self-hosted agent priced on compute<a href="https://olake.io/compare/mysql-to-iceberg-tools/#8-supermetal-best-for-a-single-self-hosted-agent-priced-on-compute" class="hash-link" aria-label="Direct link to 8. Supermetal: best for a single self-hosted agent priced on compute" title="Direct link to 8. Supermetal: best for a single self-hosted agent priced on compute" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-supermetal.webp" alt="Supermetal home page showing its headline and main navigation" width="1600" height="1213" class="img_ev3q"></p>
<p><em>Supermetal home page, October 2026.</em></p>
<p><strong>At a glance:</strong> Self-hosted, described by Supermetal as a single binary · Iceberg V3 or V2 · compute-based price · licence not stated</p>
<p>Supermetal's <a href="https://docs.supermetal.io/docs/main/targets/iceberg/" target="_blank" rel="noopener noreferrer" class="">Iceberg target docs</a> say it writes Parquet to Iceberg through REST, Glue or S3 Tables catalogs on S3 or GCS. New tables default to Iceberg V3, and V2 is selectable for engines that lack V3 support. Its MySQL source reads the binlog and takes snapshots in parallel.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">You get merge-on-read by default (updates are written as delete files and applied at query time), or positional deletes only, per its docs.</li>
<li class="">The MySQL source works without GTID, so that's one less thing to turn on.</li>
<li class="">Pricing is compute based, and there's a free trial of 1,000 sync hours on that page. Its <a href="https://supermetal.io/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a>, read 7 October 2026, shows Enterprise Self-Hosted "from $10K/ year".</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Data type promotion isn't supported yet, and changing partitioning needs a new table.</li>
<li class="">Compaction is on you, using Spark, Trino or a table service.</li>
<li class="">It asks for <code>binlog_row_metadata=FULL</code>, it's paid after the trial and the free pilot on its pricing page, and the pages we read don't state a licence.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/mysql-to-iceberg-tools-supermetal-mysql.webp" alt="Supermetal MySQL source docs listing binlog_format ROW, binlog_row_image FULL and binlog_row_metadata FULL as required settings" width="1600" height="711" class="img_ev3q"></p>
<p><em>Supermetal's MySQL source documentation, October 2026.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="also-considered">Also considered<a href="https://olake.io/compare/mysql-to-iceberg-tools/#also-considered" class="hash-link" aria-label="Direct link to Also considered" title="Direct link to Also considered" translate="no">​</a></h2>
<p>Three more names keep coming up in searches. They don't get a full entry.</p>
<p><strong>RisingWave</strong> is a streaming engine. Its <a href="https://docs.risingwave.com/ingestion/sources/mysql/mysql-cdc" target="_blank" rel="noopener noreferrer" class="">MySQL CDC docs</a> list MySQL 5.7, 8.0 and 8.4, plus MariaDB and TiDB, and ask for a unique server id. Its <a href="https://docs.risingwave.com/iceberg/overview" target="_blank" rel="noopener noreferrer" class="">Iceberg docs</a> describe automatic maintenance and a manual <code>VACUUM FULL</code> that compacts data files.</p>
<p>Some compaction behaviour needs a licence, per its <a href="https://docs.risingwave.com/changelog/release-notes" target="_blank" rel="noopener noreferrer" class="">release notes</a>. It fits if you also want to run SQL on the stream.</p>
<p><strong>AWS Database Migration Service (DMS)</strong> reads MySQL's row-based binary logs. Apache Iceberg isn't in its list of target endpoints, though Amazon S3 and Kafka are. So you'd have to build an extra step to reach Iceberg.</p>
<p><strong>Upsolver</strong> now sits inside Qlik as <a href="https://www.qlik.com/us/products/qlik-open-lakehouse" target="_blank" rel="noopener noreferrer" class="">Qlik Open Lakehouse</a>, which Qlik says "writes data as fully spec-compliant Apache Iceberg tables". The pages we read don't say which databases it reads by log.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/mysql-to-iceberg-tools-dms-targets.webp" alt="AWS DMS docs heading listing target endpoints including Amazon S3, Kinesis Data Streams and Apache Kafka, with no Iceberg entry" width="1600" height="653" class="img_ev3q"></p>
<p><em>AWS DMS target endpoints documentation, October 2026. Iceberg is not on the list.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="which-route-for-which-team">Which Route for Which Team<a href="https://olake.io/compare/mysql-to-iceberg-tools/#which-route-for-which-team" class="hash-link" aria-label="Direct link to Which Route for Which Team" title="Direct link to Which Route for Which Team" translate="no">​</a></h2>
<p>Short answer: pick by what you already run, then read the "watch for" column before you get excited.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/mysql-to-iceberg-tools-which-route.webp" alt="Which route fits: self-run tools for Kafka, Flink or fewer parts, and vendor-run or compute-priced options for hands-off teams" width="1600" height="720" class="img_ev3q"></p>
<table><thead><tr><th>Your situation</th><th>Look first at</th><th>Watch for</th></tr></thead><tbody><tr><td>You already run Kafka and several teams read changes</td><td>Kafka Connect with Debezium</td><td>Experimental transform; you run three systems</td></tr><tr><td>You already run Flink</td><td>Flink CDC</td><td>Primary key needed; MySQL JDBC driver added by you</td></tr><tr><td>You want a vendor to run it</td><td>Fivetran, Airbyte Cloud or Estuary</td><td>Position deletes, EMR Serverless, credits</td></tr><tr><td>You want few moving parts</td><td>OLake Go or Debezium Server</td><td>Both run on your own servers</td></tr><tr><td>You want one self-hosted agent and have a budget</td><td>Supermetal</td><td>Paid tier; no type promotion</td></tr></tbody></table>
<section class="root_PuUS" aria-labelledby="_R_105qfdbih_-h"><header><h3 id="_R_105qfdbih_-h" class="title_QNC9" tabindex="-1">Which MySQL to Iceberg tool fits you?</h3></header><div class="progress_EyIk" role="progressbar" aria-valuemin="1" aria-valuemax="5" aria-valuenow="1" aria-label="Quiz progress"><span style="width:0%"></span></div><p class="count_OugS">Question <!-- -->1<!-- --> of <!-- -->5</p><p id="_R_105qfdbih_-q" class="question_IKMS">Who should run the pipeline?</p><p class="hint_x3sW">Free software still has a bill: servers and people.</p><div role="radiogroup" aria-labelledby="_R_105qfdbih_-q" class="options_xbjx"><button type="button" role="radio" aria-checked="false" tabindex="0" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">A</span><span class="optLabel_qDTb">A vendor runs it for me</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">B</span><span class="optLabel_qDTb">My team runs it, with a UI or command line</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">C</span><span class="optLabel_qDTb">My team runs it, as Java services or code</span></button></div><div class="actions_XZHX"><button type="button" class="primary_KVNI" disabled="">Next</button></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="mariadb-notes">MariaDB notes<a href="https://olake.io/compare/mysql-to-iceberg-tools/#mariadb-notes" class="hash-link" aria-label="Direct link to MariaDB notes" title="Direct link to MariaDB notes" translate="no">​</a></h2>
<p>MariaDB has a binlog like MySQL's, but tools treat it differently. Debezium and Estuary each have a separate MariaDB connector, and Flink CDC lists MariaDB 10.x with MySQL versions.</p>
<p>Fivetran's connector list names MariaDB for the binary log method. Airbyte and Supermetal pages we read don't.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-test-before-you-commit">How to test before you commit<a href="https://olake.io/compare/mysql-to-iceberg-tools/#how-to-test-before-you-commit" class="hash-link" aria-label="Direct link to How to test before you commit" title="Direct link to How to test before you commit" translate="no">​</a></h2>
<p>This is a test plan, not results. Take each finalist for a spin on one table with real deletes, updates and a large text column.</p>
<ol>
<li class="">Run <code>DELETE FROM orders WHERE id = 1;</code>, then read the table from your engine. Pass: the row is gone.</li>
<li class="">Update another column on a row with a large text value. Pass: the large value is intact, and <code>SHOW VARIABLES LIKE 'binlog_row_image';</code> returns FULL.</li>
<li class="">Run <code>ALTER TABLE orders ADD COLUMN note VARCHAR(50);</code>. Pass: the tool carries it over, or fails loudly.</li>
<li class="">In a test system, stop the tool for longer than your binlog retention, then run <code>SHOW BINARY LOGS;</code>. Make a few inserts, updates and deletes while the tool is stopped, then compare the source and Iceberg rows after it comes back. Pass: the tool says plainly that it needs a new snapshot, or the two sides match exactly. A silent gap in the data is a fail, full stop.</li>
<li class="">After a day, query the Iceberg <code>files</code> metadata table, for example <code>SELECT file_path, file_size_in_bytes FROM my_catalog.my_db.orders.files;</code> in Spark. Lots of tiny files mean you need a compaction plan.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faqs">FAQs<a href="https://olake.io/compare/mysql-to-iceberg-tools/#faqs" class="hash-link" aria-label="Direct link to FAQs" title="Direct link to FAQs" translate="no">​</a></h2>
<div class="olake-faq"><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q1. What is the easiest way to replicate MySQL to Iceberg?</span></summary><div class="olake-faq__answer">A vendor-run service means less to operate yourself, such as Fivetran, Airbyte Cloud or Estuary, but each has limits in its docs and we have not tested any of them. Self-run tools put the operating work on your team. So ask yourself who'll carry the pager.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q2. Do I need Kafka to move MySQL changes into Iceberg?</span></summary><div class="olake-faq__answer">Nope. The Debezium Server Iceberg sink runs Debezium without Kafka, and Flink CDC, Airbyte, Fivetran, Estuary and Supermetal also read MySQL directly. Only the Kafka Connect route needs Kafka.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q3. Which MySQL settings do I need for CDC?</span></summary><div class="olake-faq__answer">Every set of MySQL source docs we read lists three things: binary logging on, binlog_format set to ROW and a user with replication privileges. A unique server id (a replica ID at Fivetran) is listed by all of them (an optional Node ID at Estuary), and most also want binlog_row_image set to FULL. Supermetal lists binlog_row_metadata set to FULL in its prerequisites, and Estuary lists it only in its Aurora steps.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q4. What happens if my tool is down longer than the binlog retention?</span></summary><div class="olake-faq__answer">That's the awkward one. MySQL purges old binlog files by age, and Debezium's docs say that if the saved position is gone, the connector fails and needs a new snapshot, unless snapshot.mode is when_needed. Rule of thumb: keep retention longer than your worst outage.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q5. How are deletes handled in MySQL CDC to Iceberg?</span></summary><div class="olake-faq__answer">It depends on the tool. Either it writes delete files (equality or positional) or it merges changes into rewritten data files, as Estuary does with Spark jobs. Debezium's Iceberg sink appends by default, Fivetran's lake destination doesn't support position deletes, and Flink CDC needs a primary key.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q6. Do I need to compact Iceberg tables?</span></summary><div class="olake-faq__answer">Yes, if you write often, because CDC leaves a trail of small files. Fivetran lists cleanup tasks, and Supermetal leaves it to you. The Debezium sink's FAQ also advises periodic maintenance jobs.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q7. Which of these tools have no licence fee?</span></summary><div class="olake-faq__answer">A few. Debezium Server and its sink, Kafka Connect with the Iceberg sink and Flink CDC carry no licence fee, and Airbyte Core is free under the Elastic License 2.0. You still pay for servers and people's time, though. Fivetran, Estuary and Supermetal charge for use, beyond any free tier, trial or pilot.</div></details></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://olake.io/compare/mysql-to-iceberg-tools/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>MySQL to Iceberg is really two jobs: reading a binlog safely and writing tables that stay fast. The tools differ most in the settings they demand, how they handle deletes, and who compacts the files, so test those on your own data first.</p>
<p>One last tip: from day one, watch the tool's lag against your remaining retention. If the lag grows toward the retention window, the oldest logs MySQL keeps are closing in on the tool's saved position, so step in before they pass it.</p>
<aside class="not-prose my-10 rounded-[16px] border border-solid border-olake-line bg-olake-surface p-[24px] lg:p-[32px]"><p class="m-0 text-[22px] leading-[1.2] tracking-[-0.01em] text-olake-ink lg:text-[26px]">OLake Go</p><p class="m-0 mt-[10px] max-w-[620px] text-[15px] leading-[1.6] text-olake-text-2">Replicate databases, Kafka, and S3 into Apache Iceberg with OLake Go, an open source EL engine built for Iceberg from the ground up.</p><div class="mt-[20px] flex flex-wrap gap-[10px]"><a href="https://olake.io/contact/" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-blue-ring bg-olake-blue text-olake-on-blue! hover:border-olake-blue-hover hover:bg-olake-blue-hover hover:text-white!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Signup</a><a href="https://olake.io/slack/" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M221.13,128A32,32,0,0,0,184,76.31V56a32,32,0,0,0-56-21.13A32,32,0,0,0,76.31,72H56a32,32,0,0,0-21.13,56A32,32,0,0,0,72,179.69V200a32,32,0,0,0,56,21.13A32,32,0,0,0,179.69,184H200a32,32,0,0,0,21.13-56ZM72,152a16,16,0,1,1-16-16H72Zm48,48a16,16,0,0,1-32,0V152a16,16,0,0,1,16-16h16Zm0-80H56a16,16,0,0,1,0-32h48a16,16,0,0,1,16,16Zm0-48H104a16,16,0,1,1,16-16Zm16-16a16,16,0,0,1,32,0v48a16,16,0,0,1-16,16H136Zm16,160a16,16,0,0,1-16-16V184h16a16,16,0,0,1,0,32Zm48-48H152a16,16,0,0,1-16-16V136h64a16,16,0,0,1,0,32Zm0-48H184V104a16,16,0,1,1,16,16Z"></path></svg>Join Slack</a><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>Explore OLake GitHub</a></div><p class="m-0 mt-[16px] text-[13px] text-olake-muted">Contact us at <strong class="font-medium text-olake-text-2">hello@olake.io</strong></p></aside>]]></content>
        <author>
            <name>Priyansh Khodiyar</name>
            <email>hello@olake.io</email>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="Apache Iceberg" term="Apache Iceberg"/>
        <category label="MySQL" term="MySQL"/>
        <category label="CDC - Change Data Capture" term="CDC - Change Data Capture"/>
        <category label="Data Pipeline Tools" term="Data Pipeline Tools"/>
        <category label="Best-of" term="Best-of"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Database to Iceberg Without Kafka: 7 Options]]></title>
        <id>https://olake.io/compare/database-to-iceberg-without-kafka/</id>
        <link href="https://olake.io/compare/database-to-iceberg-without-kafka/"/>
        <updated>2026-10-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Database to Iceberg without Kafka: seven options compared from each tool's own docs, with CDC limits, catalogs, delete handling and who does upkeep.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="eager" src="https://olake.io/img/blog/cover/database-to-iceberg-without-kafka-cover.webp" alt="Cover showing a database feeding one writer that creates Apache Iceberg tables with no Kafka broker in between" width="1920" height="1080" fetchpriority="high" class="img_ev3q"></p>
<section class="olake-tldr" aria-label="Key takeaways"><p class="olake-tldr__label"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"></path></svg><span>Key takeaways</span></p><div class="olake-tldr__body"><p>Short answer: yes, database to Iceberg without Kafka works. It relies on change data capture (CDC), which reads a database's own change log, and seven tools document a path for it: Debezium Server, Flink CDC, RisingWave, Estuary, Fivetran, dlt and OLake Go.</p><p>Amazon Data Firehose is not on that list, because AWS says its database preview ended on September 30, 2025. Before you pick a tool, ask whether you need a streaming platform at all.</p><ul>
<li class="">Kafka isn't required to write Iceberg. Debezium's own maintainers wrote on May 22, 2026 that Kafka Connect is "one deployment model, not a requirement."</li>
<li class="">"No Kafka" isn't the same as "no moving parts". Flink CDC needs a Flink cluster, RisingWave is a streaming system in its own right, and Estuary's Iceberg connector needs a Spark job on Amazon EMR Serverless.</li>
<li class="">Table upkeep (compaction, which merges many small files into fewer big ones) is usually your job. Check who does it before you pick, not after.</li>
</ul></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="do-you-need-a-streaming-platform-at-all">Do you need a streaming platform at all?<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#do-you-need-a-streaming-platform-at-all" class="hash-link" aria-label="Direct link to Do you need a streaming platform at all?" title="Direct link to Do you need a streaming platform at all?" translate="no">​</a></h2>
<p>Apache Kafka calls itself an <a href="https://kafka.apache.org/" target="_blank" rel="noopener noreferrer" class="">open-source distributed event streaming platform</a>: changes sit in named topics on machines called brokers until something reads them. Debezium's maintainers give three reasons teams keep it, in <a href="https://debezium.io/blog/2026/05/22/what-nobody-explains-about-debezium-2026/" target="_blank" rel="noopener noreferrer" class="">their May 2026 post</a>. Kafka Connect has a large library of sink connectors, it handles worker failures with built-in high availability, and it spreads work across a cluster.</p>
<p>The same post gives a test: ask "do I need the capabilities that Kafka provides?" If you don't, you're paying to run brokers for a pipeline with one reader. Also ask whether you need to hold changes while the lake is down, or replay them later, and check how each tool's docs handle restarts.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/database-to-iceberg-without-kafka-which-fits.webp" alt="Decision guide: keep Kafka when many systems read the same changes, keep a stream processor when you transform in flight, skip both when only the lake needs the data" width="1600" height="1020" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-we-picked">How we picked<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#how-we-picked" class="hash-link" aria-label="Direct link to How we picked" title="Direct link to How we picked" translate="no">​</a></h2>
<p>An option made this list if its own documents say it can read database changes and write Apache Iceberg tables, it can run without Kafka today, and its public pages say enough for us to check catalogs, deletes and table upkeep. We added one baseline, Debezium on Kafka Connect, so you can see what you'd be skipping.</p>
<p>We read each vendor's documentation in September and October 2026 and link every claim. We did not run the other tools, so for them this is a reading of documents, not a lab test.</p>
<p>Where a page says nothing, the table says "not stated". We left out speed claims, because no vendor publishes a comparable test. Where an entry has no "What users say" line, the comments we found did not describe running the tool.</p>
<p>Two tools were left out on those rules. <a href="https://olake.io/compare/database-to-iceberg-without-kafka/#left-out-of-the-list-and-why" class="">We explain why below</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="database-to-iceberg-without-kafka-options-at-a-glance">Database to Iceberg without Kafka: options at a glance<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#database-to-iceberg-without-kafka-options-at-a-glance" class="hash-link" aria-label="Direct link to Database to Iceberg without Kafka: options at a glance" title="Direct link to Database to Iceberg without Kafka: options at a glance" translate="no">​</a></h2>
<p>The first row is the baseline with Kafka, and the next seven don't need it. The Catalogs column lists only what each page names. REST means a catalog with a standard web interface.</p>
<table><thead><tr><th>Option</th><th>What sits between database and Iceberg</th><th>CDC sources (per docs)</th><th>Catalogs named in docs</th><th>Table upkeep</th></tr></thead><tbody><tr><td>Baseline: Debezium on Kafka Connect with the Iceberg sink</td><td><a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">Kafka brokers and Kafka Connect</a></td><td>Debezium connectors such as <a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">PostgreSQL, MySQL, MongoDB, SQL Server, Oracle</a>; the sink page has <a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">transforms for Debezium messages</a></td><td><a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">REST, Glue, DynamoDB, Hadoop, Nessie, JDBC, Hive, BigQuery Metastore</a></td><td><a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">Not stated on the page we read</a></td></tr><tr><td>Debezium Server with the community Iceberg sink</td><td><a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">One Debezium Server process</a></td><td>Same Debezium connectors, <a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">one connector per Server instance</a></td><td><a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">Not listed; settings pass through to Iceberg</a></td><td>You; the <a href="https://memiiso.github.io/debezium-server-iceberg/faq/" target="_blank" rel="noopener noreferrer" class="">sink FAQ</a> advises periodic maintenance</td></tr><tr><td>Flink CDC</td><td><a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">A Flink cluster</a></td><td><a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/overview/" target="_blank" rel="noopener noreferrer" class="">MySQL, PostgreSQL, Oracle</a> in YAML pipelines; <a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/flink-sources/overview/" target="_blank" rel="noopener noreferrer" class="">MongoDB and SQL Server</a> through Flink SQL</td><td><a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">Hadoop, Hive, Glue, or a custom class</a></td><td><a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">Not stated on the pipeline page</a></td></tr><tr><td>RisingWave</td><td><a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer" class="">RisingWave itself, a streaming system</a></td><td><a href="https://docs.risingwave.com/ingestion/overview" target="_blank" rel="noopener noreferrer" class="">PostgreSQL, MySQL, MongoDB, SQL Server</a> (the overview table's MongoDB row reads "CDC via Kafka")</td><td><a href="https://docs.risingwave.com/iceberg/catalogs" target="_blank" rel="noopener noreferrer" class="">Built-in, Glue, S3 Tables, JDBC, REST, Lakekeeper, Hive, SeaweedFS, Snowflake, Unity</a>; Snowflake is <a href="https://docs.risingwave.com/iceberg/iceberg-feature-support" target="_blank" rel="noopener noreferrer" class="">read-only</a></td><td><a href="https://docs.risingwave.com/iceberg/maintenance" target="_blank" rel="noopener noreferrer" class="">Automatic maintenance</a> listed, with a dedicated compactor node; a <a href="https://docs.risingwave.com/changelog/release-notes" target="_blank" rel="noopener noreferrer" class="">release note</a> ties the default auto compaction strategy to Iceberg compaction being licensed</td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>One OLake Go process, with a <a class="" href="https://olake.io/docs/release/ingestion/v0.3.5/">Java helper</a> for the Iceberg write</td><td><a class="" href="https://olake.io/docs/connectors/postgres/">PostgreSQL</a>, <a class="" href="https://olake.io/docs/connectors/mysql/">MySQL and MariaDB</a>, <a class="" href="https://olake.io/docs/connectors/mongodb/">MongoDB</a>, <a class="" href="https://olake.io/docs/connectors/mssql/">SQL Server</a></td><td><a class="" href="https://olake.io/docs/understanding/compatibility-catalogs/">11 catalog types</a>: Glue, JDBC, Hive Metastore, S3 Tables, and REST catalogs such as Lakekeeper, Unity, Nessie, Polaris, BigLake and Snowflake Horizon</td><td><a class="" href="https://olake.io/docs/fusion/getting-started/overview/">OLake Fusion</a> for compaction and maintenance</td></tr><tr><td>Estuary</td><td>Estuary's hosted platform, plus a <a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Spark job on EMR Serverless for the REST connector</a></td><td><a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/PostgreSQL/" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a>, <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/MySQL/" target="_blank" rel="noopener noreferrer" class="">MySQL</a>, <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/MariaDB/" target="_blank" rel="noopener noreferrer" class="">MariaDB</a>, <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/SQLServer/" target="_blank" rel="noopener noreferrer" class="">SQL Server</a>, <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/OracleDB/" target="_blank" rel="noopener noreferrer" class="">Oracle</a>, <a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/MongoDB/" target="_blank" rel="noopener noreferrer" class="">MongoDB</a></td><td><a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Glue, S3 Tables, Snowflake Open Catalog, Dremio Cloud; REST on S3 only</a></td><td><a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Optional Glue optimizers, off by default</a></td></tr><tr><td>Fivetran Managed Data Lake Service</td><td><a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Fivetran's hosted service</a></td><td>Set per connector, such as <a href="https://fivetran.com/docs/connectors/databases/postgresql" target="_blank" rel="noopener noreferrer" class="">logical replication for PostgreSQL</a>; the <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">destination page</a> names no connectors</td><td><a href="https://fivetran.com/docs/destinations/managed-data-lake-service/metadata-catalogs" target="_blank" rel="noopener noreferrer" class="">Fivetran Catalog, Glue, BigLake, Unity, OneLake</a></td><td><a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Snapshot and file cleanup listed; compaction not listed</a></td></tr><tr><td>dlt</td><td><a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">Your own Python code</a></td><td><a href="https://dlthub.com/docs/dlt-ecosystem/verified-sources/pg_replication" target="_blank" rel="noopener noreferrer" class="">Log-based for PostgreSQL</a>; the <a href="https://dlthub.com/docs/dlt-ecosystem/verified-sources/sql_database/" target="_blank" rel="noopener noreferrer" class="">SQL database source</a> reads tables directly, and the docs describe no log-based CDC for other databases</td><td><a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">Whatever PyIceberg supports, including REST and SQL</a></td><td><a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">Not described</a></td></tr></tbody></table>
<p>Prices aren't in the table, and that's on purpose. Several of these are free software with a server and staff bill, and the hosted ones price in different units, so one column would mislead you.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="updates-deletes-and-delivery-what-each-tools-docs-say">Updates, deletes and delivery: what each tool's docs say<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#updates-deletes-and-delivery-what-each-tools-docs-say" class="hash-link" aria-label="Direct link to Updates, deletes and delivery: what each tool's docs say" title="Direct link to Updates, deletes and delivery: what each tool's docs say" translate="no">​</a></h2>
<p>This is where the options differ most. A primary key is the column that identifies each row. An upsert updates the row if its key already exists and inserts it if not, while an append adds every change as a new row, so the table holds both versions of a changed row.</p>
<p>Iceberg can handle a delete in two ways. Copy-on-write rewrites the affected data files, and merge-on-read writes the delete as a small separate file that is applied when someone reads the table.</p>
<p>Equality deletes match rows by key values, and positional deletes point at a file and a row position. Delivery guarantee means whether a change can land twice (at-least-once) or exactly once.</p>
<table><thead><tr><th>Option</th><th>Update to a row</th><th>Delete of a row</th><th>Delivery guarantee (per docs)</th></tr></thead><tbody><tr><td>Iceberg Kafka Connect sink</td><td><a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">Not described on the page we read</a></td><td><a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">Not described on the page we read</a></td><td><a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">Exactly-once listed; needs Kafka 2.5 or later</a></td></tr><tr><td>Debezium Server sink</td><td><a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">Append-only by default; upsert mode is off by default and keeps the record with the highest value in a dedup column</a></td><td><a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">In upsert mode, kept and marked <code>__deleted=true</code> by default</a></td><td>Not stated for the Iceberg sink; the Server page's <a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">JDBC sink section</a> warns exactly-once features may differ from Kafka Connect</td></tr><tr><td>Flink CDC (Iceberg pipeline connector)</td><td><a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">Primary key keeps repeated writes safe</a></td><td><a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">Not described on the pipeline page</a></td><td><a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">At-least-once; the pipeline page says exactly-once is not supported</a></td></tr><tr><td>RisingWave</td><td><a href="https://docs.risingwave.com/iceberg/deliver-to-iceberg" target="_blank" rel="noopener noreferrer" class="">Append-only or upsert sink</a></td><td><a href="https://docs.risingwave.com/iceberg/deliver-to-iceberg" target="_blank" rel="noopener noreferrer" class="">Upsert sink is for updates and deletes; with force_append_only, deletes are ignored</a></td><td><a href="https://docs.risingwave.com/iceberg/deliver-to-iceberg" target="_blank" rel="noopener noreferrer" class="">Exactly-once setting, on by default</a></td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td><a class="" href="https://olake.io/docs/understanding/terminologies/olake/#7-modes-to-ingest-data-upsert-vs-append">Upsert by default, append per table</a></td><td><a class="" href="https://olake.io/docs/understanding/terminologies/olake/#7-modes-to-ingest-data-upsert-vs-append">Equality deletes, positional deletes or deletion vectors</a></td><td>Two-phase commit for Iceberg writes, which avoids duplicate writes (<a class="" href="https://olake.io/docs/release/ingestion/v0.5.0/">v0.5.0 notes</a>)</td></tr><tr><td>Estuary</td><td><a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Merge job on Spark</a></td><td><a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Soft delete by default, hard delete optional</a></td><td><a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Not stated on the page we read</a></td></tr><tr><td>Fivetran</td><td><a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Not described on the destination page</a></td><td>Not described; <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">position deletes aren't supported</a></td><td><a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Not stated on the page we read</a></td></tr><tr><td>dlt</td><td><a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">Merge supports upsert and insert-only</a></td><td><a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">Not described on the Iceberg page</a></td><td><a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">Not stated on the page we read</a></td></tr></tbody></table>
<p>"Not described" and "not stated" mean we couldn't find the answer on the pages we read. If your tool lands there, test one update and one delete yourself.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="baseline-debezium-on-kafka-connect-with-the-iceberg-sink">Baseline: Debezium on Kafka Connect with the Iceberg sink<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#baseline-debezium-on-kafka-connect-with-the-iceberg-sink" class="hash-link" aria-label="Direct link to Baseline: Debezium on Kafka Connect with the Iceberg sink" title="Direct link to Baseline: Debezium on Kafka Connect with the Iceberg sink" translate="no">​</a></h2>
<p><strong>At a glance:</strong> Apache 2.0 software you run, plus a Kafka cluster. It's the route most tutorials teach.</p>
<p>Debezium reads the database log and puts each change into a Kafka topic, and the Apache Iceberg docs describe a <a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">Kafka Connect sink</a> that reads those topics and writes Iceberg tables. Debezium's own sink list for Kafka Connect shows only JDBC (Java Database Connectivity) and MongoDB, so the Iceberg sink comes from the Iceberg project, not from Debezium.</p>
<p><strong>What it writes:</strong> Iceberg tables through catalogs such as REST, Glue, Hive and Nessie. The docs list exactly-once delivery, which relies on Kafka 2.5 or later. Automatic table creation and schema evolution are listed too, but both default to off.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/iceberg-kafka-connect-sink-features.webp" alt="Apache Iceberg documentation listing Kafka Connect sink features such as exactly-once delivery and automatic table creation" width="1600" height="743" class="img_ev3q"></p>
<p><em>Apache Iceberg documentation, Kafka Connect sink page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Debezium's post above says Kafka Connect's distributed mode spreads work across workers and handles worker failures. We did not test that. If many systems already read the same topics, the Iceberg sink is just one more reader.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">You run Kafka brokers and Kafka Connect workers, plus the Debezium and Iceberg connectors that run inside them. The sink page's install steps also have you build the connector zip from the Iceberg source code.</li>
<li class="">The page we read doesn't explain how updates and deletes are applied, even though it mentions a "CDC feature". The Debezium transform that feeds it is marked experimental.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-debezium-server-with-the-community-iceberg-sink-the-same-debezium-connectors-with-no-kafka">1. Debezium Server with the community Iceberg sink: the same Debezium connectors with no Kafka<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#1-debezium-server-with-the-community-iceberg-sink-the-same-debezium-connectors-with-no-kafka" class="hash-link" aria-label="Direct link to 1. Debezium Server with the community Iceberg sink: the same Debezium connectors with no Kafka" title="Direct link to 1. Debezium Server with the community Iceberg sink: the same Debezium connectors with no Kafka" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/landing-debezium.webp" alt="Debezium home page showing its headline and main navigation" width="1600" height="899" class="img_ev3q"></p>
<p><em>Debezium home page, October 2026.</em></p>
<p><strong>At a glance:</strong> Apache 2.0, you run it. Debezium Server is, in its docs' words, a ready-to-use application that streams change events "without requiring Apache Kafka."</p>
<p>The <a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">Debezium Server docs</a> list an Apache Iceberg sink. Here's the catch: it is "a community-maintained, open-source project" in a separate repository, memiiso/debezium-server-iceberg, not part of Debezium itself.</p>
<p><strong>What it writes:</strong> Parquet files by default, with Avro and ORC (two other file formats) selectable. It has upsert and append modes, but upsert is off by default. Even in upsert mode, deleted rows are kept and marked <code>__deleted=true</code> unless you change a setting.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/debezium-iceberg-sink-status.webp" alt="Debezium Server documentation describing the Apache Iceberg sink, its upsert and append modes, and the community-maintained note" width="1600" height="630" class="img_ev3q"></p>
<p><em>Debezium Server documentation, Apache Iceberg section, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">You keep Debezium's connector list: its index shows MongoDB, MariaDB, MySQL, PostgreSQL, SQL Server, Oracle, Db2 and Cassandra as main connectors.</li>
<li class="">The sink's README claims it replicates "from any database to Iceberg tables" without Spark, Kafka or a streaming platform, which we did not test. The latest release is 1.2.0.Final from October 4, 2026.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The sink is community maintained, and the docs name no catalog types. Upsert depends on a Debezium transformation called event flattening, so tables with no primary key stay append-only.</li>
<li class="">Each Debezium Server instance runs exactly one connector. A July 2026 Debezium post about its JDBC sink says Kafka Connect's multi-task setting is <a href="https://debezium.io/blog/2026/07/06/kafka-less-migration/" target="_blank" rel="noopener noreferrer" class="">"not yet available in DS."</a></li>
<li class="">The sink's <a href="https://memiiso.github.io/debezium-server-iceberg/faq/" target="_blank" rel="noopener noreferrer" class="">FAQ</a> says to run periodic maintenance on delete files, so that chore is yours. Full schema evolution isn't supported, though adding fields and promoting types is, and a column dropped at the source stays in the table with nulls.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-flink-cdc-when-you-already-run-apache-flink">2. Flink CDC: when you already run Apache Flink<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#2-flink-cdc-when-you-already-run-apache-flink" class="hash-link" aria-label="Direct link to 2. Flink CDC: when you already run Apache Flink" title="Direct link to 2. Flink CDC: when you already run Apache Flink" translate="no">​</a></h2>
<p><strong>At a glance:</strong> Apache 2.0, you run it, and it needs a Flink cluster. Flink CDC calls itself <a href="https://raw.githubusercontent.com/apache/flink-cdc/master/README.md" target="_blank" rel="noopener noreferrer" class="">"a distributed data integration tool for real-time data and batch data, built on top of Apache Flink"</a>. Its docs also say some sources use Debezium as the engine inside.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/database-to-iceberg-without-kafka-flink-cdc-home.webp" alt="Apache Flink CDC documentation home page showing the YAML data integration tool and its sources and targets" width="1600" height="1000" class="img_ev3q"></p>
<p><em>Apache Flink CDC documentation, October 2026.</em></p>
<p><strong>What it writes:</strong> The <a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">Iceberg pipeline connector</a> creates tables and syncs added columns. The catalog type can be Hadoop, Hive or Glue, or a custom class. It first appears in the Flink CDC 3.4 line.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its docs describe reshaping data in the same job. Iceberg's own <a href="https://iceberg.apache.org/docs/latest/flink-writes/" target="_blank" rel="noopener noreferrer" class="">Flink docs</a> describe upserts on version 2 tables with a primary key.</li>
<li class="">Its docs list Standalone, YARN or Kubernetes deployment, with no Kafka listed as a requirement.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The pipeline page says "The source table must have a primary key." It also says exactly-once isn't supported, and offers at-least-once writes made safe by the primary key.</li>
<li class="">The Postgres pipeline source doesn't sync table structure changes. MongoDB and SQL Server CDC are Flink SQL sources, not YAML pipeline sources, so you write more code for them.</li>
<li class="">Someone has to run Flink, which is cluster work like Kafka.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-risingwave-for-a-sql-first-team-that-wants-processing-and-iceberg-together">3. RisingWave: for a SQL-first team that wants processing and Iceberg together<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#3-risingwave-for-a-sql-first-team-that-wants-processing-and-iceberg-together" class="hash-link" aria-label="Direct link to 3. RisingWave: for a SQL-first team that wants processing and Iceberg together" title="Direct link to 3. RisingWave: for a SQL-first team that wants processing and Iceberg together" translate="no">​</a></h2>
<p><strong>At a glance:</strong> Apache 2.0 core, self-hosted or hosted, with premium features behind a licence. RisingWave describes itself as an <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer" class="">"event streaming platform"</a>, so you're skipping Kafka, but not streaming.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/database-to-iceberg-without-kafka-risingwave-home.webp" alt="RisingWave home page describing real-time data delivered to managed Apache Iceberg tables" width="1600" height="745" class="img_ev3q"></p>
<p><em>RisingWave home page, October 2026.</em></p>
<p><strong>What it writes:</strong> The <a href="https://docs.risingwave.com/iceberg/deliver-to-iceberg" target="_blank" rel="noopener noreferrer" class="">Iceberg docs</a> show append-only and upsert sinks, merge-on-read writes by default, and an <code>is_exactly_once</code> setting that defaults to true. Exactly-once needs sink decoupling, a RisingWave setting that is on by default, and turning it off disables exactly-once. Catalogs include Glue, S3 Tables, JDBC, REST, Lakekeeper, Hive, Snowflake and Unity.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its <a href="https://docs.risingwave.com/ingestion/overview" target="_blank" rel="noopener noreferrer" class="">ingestion overview</a> lists CDC for PostgreSQL, MySQL and SQL Server, labels MongoDB "CDC via Kafka", and offers SQL for shaping data.</li>
<li class="">Its docs say Iceberg maintenance, including compaction and snapshot cleanup, is automatic. We did not test how that behaves on your table sizes, so ask what it costs to run.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Some features need a licence key, and RisingWave's <a href="https://risingwave.com/pricing/" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists direct SQL Server CDC as premium. So "open source" applies to the core only.</li>
<li class="">Schema evolution on the Iceberg sink covers adding columns only, and works only while exactly-once is on, per its docs.</li>
<li class="">Its Postgres source needs primary keys that match upstream tables.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-olake-go-for-scheduled-copies-from-postgres-mysql-mongodb-or-sql-server">4. OLake Go: for scheduled copies from Postgres, MySQL, MongoDB or SQL Server<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#4-olake-go-for-scheduled-copies-from-postgres-mysql-mongodb-or-sql-server" class="hash-link" aria-label="Direct link to 4. OLake Go: for scheduled copies from Postgres, MySQL, MongoDB or SQL Server" title="Direct link to 4. OLake Go: for scheduled copies from Postgres, MySQL, MongoDB or SQL Server" translate="no">​</a></h2>
<img src="https://olake.io/img/logo/olake-blue-with-text.svg" alt="OLake" height="32" style="display:block;margin:2px 0 14px">
<p><strong>At a glance:</strong> Apache 2.0 open source that runs on your own infrastructure. <a class="" href="https://olake.io/docs/">OLake Go</a> does a full load and then change capture straight from the database, and writes Apache Iceberg or Parquet on storage you control, with no Debezium or Kafka to run. Install with Docker, Helm or the UI (see the <a class="" href="https://olake.io/docs/install/docker-cli/">Docker install page</a>).</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/database-to-iceberg-without-kafka-olake-home.webp" alt="OLake home page: open source ingestion and maintenance tool for Apache Iceberg" width="1600" height="957" class="img_ev3q"></p>
<p><em>OLake home page, October 2026.</em></p>
<p><strong>What it writes:</strong> Iceberg tables. For updates, OLake Go has an Upsert mode with three delete formats: equality deletes and positional deletes (both Iceberg v2), and deletion vectors (Iceberg v3). The default (see the <a class="" href="https://olake.io/docs/understanding/terminologies/olake/">terminology page</a>) is the first format your selected query engine supports, checking equality deletes, then positional deletes, then deletion vectors.</p>
<p>Different streams in one job can use different formats.</p>
<p>Deletion vectors were added in <a class="" href="https://olake.io/docs/release/ingestion/v0.11.0/">release 0.11.0</a>. That release note lists them as a delete mode and says nothing wider about Iceberg v3 tables. The <a class="" href="https://olake.io/docs/understanding/compatibility-engines/#delete-format-support-by-query-engine">engine compatibility page</a> lists Amazon Athena as not supporting deletion vectors, so check your engine first.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">CDC covers PostgreSQL, MySQL and its MariaDB flavor, MongoDB and SQL Server. The setup pages are <a class="" href="https://olake.io/docs/connectors/postgres/">Postgres</a>, <a class="" href="https://olake.io/docs/connectors/mysql/">MySQL</a>, <a class="" href="https://olake.io/docs/connectors/mongodb/">MongoDB</a> and <a class="" href="https://olake.io/docs/connectors/mssql/">SQL Server</a>.</li>
<li class="">In the Streams panel, every table starts as Upsert and you can switch a table to Append. Full refresh is always append, and a table found later defaults to Upsert unless every table is set to Append; see the terminology page above.</li>
<li class="">The <a class="" href="https://olake.io/docs/release/ingestion/v0.5.0/">v0.5.0 release notes</a> describe a two-phase commit for Iceberg writes from MongoDB, PostgreSQL, MySQL and SQL Server, which avoids duplicate writes. The <a class="" href="https://olake.io/docs/release/ingestion/v0.7.0/">v0.7.0 notes</a> name the Iceberg table property that records it, <code>olake_2pc</code>.</li>
<li class="">The <a class="" href="https://olake.io/docs/understanding/compatibility-catalogs/">catalogs compatibility page</a> lists a wide set of Iceberg catalogs, including AWS Glue, JDBC, Hive Metastore, S3 Tables, Nessie, Polaris, Unity and Lakekeeper.</li>
<li class="">The <a class="" href="https://olake.io/docs/features/schema/">schema page</a> documents schema evolution for widening type changes.</li>
<li class="">OLake Fusion, a separate OLake product, handles compaction and Iceberg table maintenance.</li>
</ul>
<p><strong>Good to know</strong></p>
<ul>
<li class="">Oracle, Db2 and S3 sources load by full refresh or incremental sync.</li>
<li class="">Jobs run on a schedule you set: every minute, hourly, daily, weekly or a cron expression (see the <a class="" href="https://olake.io/docs/getting-started/job-level-properties/">job settings page</a>). By default CDC captures recent changes, replicates them, then stops (see the <a class="" href="https://olake.io/docs/understanding/terminologies/general/">terminology page</a>), and an orchestrator such as Airflow can run jobs at frequent intervals for near real-time replication. Freshness follows the schedule you choose, so set it to match your target.</li>
<li class="">MySQL <code>BINARY</code> columns written to Iceberg are tracked in an <a href="https://github.com/datazip-inc/olake/issues/1031" target="_blank" rel="noopener noreferrer" class="">open issue in the OLake repository</a>, reported on v0.8.2.</li>
</ul>
<p><strong>Bottom line:</strong> Pick OLake Go for scheduled copies from PostgreSQL, MySQL, MongoDB or SQL Server into Iceberg or Parquet on storage you run, with one tool to install, Apache 2.0 licensing and 11 catalog options to choose from.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-estuary-a-hosted-pipeline-where-you-dont-run-the-capture-side">5. Estuary: a hosted pipeline where you don't run the capture side<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#5-estuary-a-hosted-pipeline-where-you-dont-run-the-capture-side" class="hash-link" aria-label="Direct link to 5. Estuary: a hosted pipeline where you don't run the capture side" title="Direct link to 5. Estuary: a hosted pipeline where you don't run the capture side" translate="no">​</a></h2>
<p><strong>At a glance:</strong> Hosted, with private and bring-your-own-cloud options. The platform code is under the Business Source License 1.1, which its own text says "is not an Open Source license."</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/database-to-iceberg-without-kafka-estuary-home.webp" alt="Estuary home page showing one data pipeline from sources such as SQL Server and Oracle to targets such as Snowflake and Iceberg" width="1600" height="937" class="img_ev3q"></p>
<p><em>Estuary home page, October 2026.</em></p>
<p><strong>What it writes:</strong> Estuary's <a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Iceberg connector</a> writes to catalogs that implement the Iceberg REST API (a standard web interface for catalogs). The docs walk through AWS Glue, Snowflake Open Catalog and Dremio Cloud. A second connector appends Parquet files to Iceberg tables on an interval.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Its docs list log-based capture connectors for PostgreSQL, MySQL, MariaDB, SQL Server, Oracle and MongoDB.</li>
<li class="">Its docs list optional Glue table optimizers for compaction, snapshot retention and orphan file deletion.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The REST connector needs an Amazon EMR Serverless application running Spark, an S3 staging bucket and IAM roles in your AWS account.</li>
<li class="">The docs say only REST catalogs on Amazon S3 are supported, and label the connector Beta for catalogs other than Glue. Nested types aren't supported, so arrays and objects arrive as strings.</li>
<li class="">The optimizers are off by default, and without them the docs say to run regular maintenance yourself.</li>
<li class="">Estuary's pricing page lists $0.50 per GB moved plus connector fees, read October 2026, so the bill grows with your data volume. Ask for an estimate on your own change volume before you commit.</li>
</ul>
<p><strong>What users say:</strong> An August 2026 G2 review, mirrored on <a href="https://aws.amazon.com/marketplace/reviews/reviews-list/prodview-2yad6rs5mph44" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>, says "Some limited observability - would be nice to see more detailed logs".</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-fivetran-managed-data-lake-service-if-fivetran-already-moves-your-data">6. Fivetran Managed Data Lake Service: if Fivetran already moves your data<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#6-fivetran-managed-data-lake-service-if-fivetran-already-moves-your-data" class="hash-link" aria-label="Direct link to 6. Fivetran Managed Data Lake Service: if Fivetran already moves your data" title="Direct link to 6. Fivetran Managed Data Lake Service: if Fivetran already moves your data" translate="no">​</a></h2>
<p><strong>At a glance:</strong> Hosted by Fivetran, and the destination page lists the SaaS deployment model only. Fivetran's docs say it <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">"always creates Apache Iceberg metadata"</a> for these tables, and since July 2026 Delta Lake metadata is opt-in.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/database-to-iceberg-without-kafka-fivetran-mdls.webp" alt="Fivetran documentation page for the Managed Data Lake Service describing Iceberg metadata and supported storage providers" width="1600" height="939" class="img_ev3q"></p>
<p><em>Fivetran documentation, October 2026.</em></p>
<p><strong>What it writes:</strong> Iceberg tables on S3, Azure Data Lake Storage or Google Cloud Storage. The default catalog is the Fivetran Catalog, an Iceberg REST catalog built on Apache Polaris, with Glue and BigLake as options.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Fivetran hosts the service, and the destination page asks you for no brokers, cluster or sink.</li>
<li class="">Fivetran also sells connectors for databases and SaaS apps, so one vendor could cover both if your sources are on its list.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Fivetran bills by monthly active rows per connection, and its billing docs say deletes count as paid rows from January 1, 2026. Ask for an estimate on your own row counts before you commit.</li>
<li class="">The docs say there's no support for Iceberg position deletes. Fivetran's <a href="https://fivetran.com/docs/destinations/managed-data-lake-service/metadata-catalogs" target="_blank" rel="noopener noreferrer" class="">catalog docs</a> warn that editing Fivetran-managed tables from outside can corrupt them.</li>
<li class="">Maintenance lists snapshot and unreferenced-file cleanup, but compaction isn't listed. A <a href="https://fivetran.com/docs/managed-data-lake-service/troubleshooting/aws-glue-compaction-compatibility" target="_blank" rel="noopener noreferrer" class="">troubleshooting page</a> says Glue compaction on these tables is reverted at the next sync.</li>
<li class="">The destination page says Fivetran ingests data from "supported sources" and names no database connectors. Fivetran's <a href="https://fivetran.com/docs/connectors/databases/postgresql" target="_blank" rel="noopener noreferrer" class="">PostgreSQL connector page</a> documents capturing deletes through logical replication, but the MongoDB connector page doesn't mention this destination, so confirm your own source by name with Fivetran.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-dlt-for-python-teams-who-want-pipelines-as-code">7. dlt: for Python teams who want pipelines as code<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#7-dlt-for-python-teams-who-want-pipelines-as-code" class="hash-link" aria-label="Direct link to 7. dlt: for Python teams who want pipelines as code" title="Direct link to 7. dlt: for Python teams who want pipelines as code" translate="no">​</a></h2>
<p><strong>At a glance:</strong> dlt is an open-source Python library, and dltHub is the paid platform on top of it. The <a href="https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg" target="_blank" rel="noopener noreferrer" class="">Iceberg docs</a> say dlt writes Iceberg tables through its filesystem destination, using the PyIceberg library.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/database-to-iceberg-without-kafka-dlt-home.webp" alt="dltHub home page describing an AI-native data engineering platform" width="1600" height="935" class="img_ev3q"></p>
<p><em>dltHub home page, October 2026.</em></p>
<p><strong>What it writes:</strong> Parquet only, to whatever catalog PyIceberg can load, "including REST and SQL catalogs." Merge supports upsert and insert-only. You bring your own catalog, since the docs describe no managed one.</p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Pipelines live in your code and your repo, so you can review them like any other code.</li>
<li class="">Its Postgres source reads a replication slot with the built-in pgoutput plugin, as the <a href="https://dlthub.com/docs/dlt-ecosystem/verified-sources/pg_replication" target="_blank" rel="noopener noreferrer" class="">pg_replication docs</a> explain.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Log-based CDC in the open-source library is PostgreSQL only. The docs describe no log-based CDC for MySQL or Oracle, and SQL Server uses Change Tracking under the commercial dltHub licence.</li>
<li class="">The docs list limits: no partition evolution (changing how an existing table is split into folders), Parquet only, and schema evolution isn't supported with upsert on PyIceberg 0.10.0.</li>
<li class="">You write, schedule and watch the code.</li>
<li class="">dltHub's <a href="https://dlthub.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing FAQ</a> says paid subscriptions include a licence for CDC and Iceberg support. The open-source Iceberg docs show no licence notice, so check which features need one before you rely on them.</li>
</ul>
<p><strong>What users say:</strong> In a <a href="https://seifert.substack.com/p/i-migrated-a-fivetran-pipeline-to" target="_blank" rel="noopener noreferrer" class="">July 2026 post</a> on moving one daily MySQL sync from Fivetran to dltHub, the author wrote that the pipeline "does not reproduce Fivetran's soft-delete behavior for physical source deletes."</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="left-out-of-the-list-and-why">Left out of the list, and why<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#left-out-of-the-list-and-why" class="hash-link" aria-label="Direct link to Left out of the list, and why" title="Direct link to Left out of the list, and why" translate="no">​</a></h2>
<p>Two tools did not meet the three rules in How we picked. The first is Amazon Data Firehose, which is not a current Kafka-free option.</p>
<p>In November 2024 AWS announced that Firehose could read PostgreSQL and MySQL and replicate changes to Iceberg tables, as a preview. AWS then added an update to that <a href="https://aws.amazon.com/blogs/aws/replicate-changes-from-databases-to-apache-iceberg-tables-using-amazon-data-firehose/" target="_blank" rel="noopener noreferrer" class="">announcement post</a>: "The preview period has ended on 09/30/2025 and its not possible to try this capability." We found no AWS page that offers database-to-Iceberg replication today.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/aws-firehose-db-source-preview-ended.webp" alt="AWS News Blog update stating the Firehose database to Iceberg preview ended on 09/30/2025 and cannot be tried" width="1600" height="530" class="img_ev3q"></p>
<p><em>AWS News Blog, Amazon Data Firehose database replication post, October 2026.</em></p>
<p>Firehose still writes Iceberg from other sources. Its <a href="https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-destination.html" target="_blank" rel="noopener noreferrer" class="">docs</a> say it supports Iceberg version 2 only and writes Parquet, and for self-managed tables "you manage all the table optimizations such as compaction, and snapshot expiration."</p>
<p>The second is Supermetal. Its <a href="https://supermetal.io/blog/iceberg-target" target="_blank" rel="noopener noreferrer" class="">announcement</a> of April 1, 2026 describes a single Rust program that reads the database log and writes Iceberg with no Kafka, Spark or Flink. We read only that post, not documentation on catalogs, deletes and upkeep, so it didn't get a full entry.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="postgres-without-debezium-or-spark">Postgres without Debezium or Spark<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#postgres-without-debezium-or-spark" class="hash-link" aria-label="Direct link to Postgres without Debezium or Spark" title="Direct link to Postgres without Debezium or Spark" translate="no">​</a></h2>
<p>Of the options above, only Estuary's REST connector lists a Spark application as a prerequisite. Flink CDC's docs say some of its sources use Debezium inside, so ask each vendor if that matters to you.</p>
<p>All of them still read the same thing: Postgres's write-ahead log (WAL), through a replication slot, which is a bookmark that Postgres keeps for the reader. Several also need a publication, which is a list of tables whose changes Postgres will stream.</p>
<p>Estuary's docs warn that if a slot stops advancing, Postgres keeps WAL without limit by default. That risk follows you into every route.</p>
<table><thead><tr><th>Option</th><th>What the docs say Postgres needs</th></tr></thead><tbody><tr><td>Estuary (<a href="https://docs.estuary.dev/reference/Connectors/capture-connectors/PostgreSQL/" target="_blank" rel="noopener noreferrer" class="">Postgres capture docs</a>)</td><td><code>wal_level=logical</code>, a user with the REPLICATION attribute, a slot and a publication, PostgreSQL 10 or later</td></tr><tr><td>RisingWave (<a href="https://docs.risingwave.com/ingestion/sources/postgresql/pg-cdc" target="_blank" rel="noopener noreferrer" class="">Postgres CDC source docs</a>)</td><td><code>wal_level = logical</code>, PostgreSQL 10 through 18, one slot per source</td></tr><tr><td>dlt (<a href="https://dlthub.com/docs/dlt-ecosystem/verified-sources/pg_replication" target="_blank" rel="noopener noreferrer" class="">pg_replication docs</a>)</td><td>A replication slot with the pgoutput plugin</td></tr><tr><td>Flink CDC (<a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/postgres/" target="_blank" rel="noopener noreferrer" class="">Postgres pipeline source docs</a>)</td><td>A required <code>slot.name</code>, with decoderbufs or pgoutput</td></tr><tr><td>OLake Go (<a class="" href="https://olake.io/docs/connectors/postgres/">Postgres connector page</a>)</td><td>pgoutput plugin, PostgreSQL 10 or later, a replication slot and a publication in the same database, not shared between jobs</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="which-one-should-you-pick">Which one should you pick?<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#which-one-should-you-pick" class="hash-link" aria-label="Direct link to Which one should you pick?" title="Direct link to Which one should you pick?" translate="no">​</a></h2>
<table><thead><tr><th>Your situation</th><th>Option to check</th><th>What you run or watch</th></tr></thead><tbody><tr><td>Kafka runs and others read the topics</td><td>Kafka Connect with the Iceberg sink</td><td>You run Kafka brokers, Connect workers and <a href="https://iceberg.apache.org/docs/latest/kafka-connect/" target="_blank" rel="noopener noreferrer" class="">two connectors</a></td></tr><tr><td>No Kafka, need Oracle CDC</td><td>Debezium Server sink or Estuary</td><td><a href="https://debezium.io/documentation/reference/stable/operations/debezium-server.html" target="_blank" rel="noopener noreferrer" class="">Community sink</a> with no stated catalogs, or hosted with <a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">AWS setup</a></td></tr><tr><td>You join or reshape data in flight</td><td>Flink CDC or RisingWave</td><td><a href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/connectors/pipeline-connectors/iceberg/" target="_blank" rel="noopener noreferrer" class="">A Flink cluster</a>, or a streaming system and some <a href="https://risingwave.com/pricing/" target="_blank" rel="noopener noreferrer" class="">licensed features</a></td></tr><tr><td>You want it hosted</td><td>Fivetran, or Estuary if your lake is on S3</td><td><a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">No position deletes on Fivetran</a>, and <a href="https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg/" target="_blank" rel="noopener noreferrer" class="">Estuary needs EMR Serverless</a></td></tr><tr><td>Python team, Postgres source</td><td>dlt</td><td><a href="https://dlthub.com/docs/dlt-ecosystem/verified-sources/pg_replication" target="_blank" rel="noopener noreferrer" class="">Log-based CDC for Postgres only</a></td></tr><tr><td>Postgres, MySQL, MongoDB or SQL Server only, with scheduled copies</td><td>OLake Go</td><td>One process from <a class="" href="https://olake.io/docs/install/docker-cli/">Docker</a>, <a class="" href="https://olake.io/docs/install/kubernetes/">Helm</a> or the <a class="" href="https://olake.io/docs/install/olake-ui/">UI</a>, on a <a class="" href="https://olake.io/docs/getting-started/job-level-properties/">schedule you set</a></td></tr></tbody></table>
<section class="root_PuUS" aria-labelledby="_R_tdqfdbih_-h"><header><h3 id="_R_tdqfdbih_-h" class="title_QNC9" tabindex="-1">Which route to Iceberg fits you?</h3></header><div class="progress_EyIk" role="progressbar" aria-valuemin="1" aria-valuemax="5" aria-valuenow="1" aria-label="Quiz progress"><span style="width:0%"></span></div><p class="count_OugS">Question <!-- -->1<!-- --> of <!-- -->5</p><p id="_R_tdqfdbih_-q" class="question_IKMS">Is Kafka already running in your company?</p><p class="hint_x3sW">Think about whether other teams or tools read the same change feed.</p><div role="radiogroup" aria-labelledby="_R_tdqfdbih_-q" class="options_xbjx"><button type="button" role="radio" aria-checked="false" tabindex="0" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">A</span><span class="optLabel_qDTb">Yes, and several systems read it</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">B</span><span class="optLabel_qDTb">Yes, but only for this job</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">C</span><span class="optLabel_qDTb">No, and I would rather not add it</span></button></div><div class="actions_XZHX"><button type="button" class="primary_KVNI" disabled="">Next</button></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faqs">FAQs<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#faqs" class="hash-link" aria-label="Direct link to FAQs" title="Direct link to FAQs" translate="no">​</a></h2>
<div class="olake-faq"><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Can I write Iceberg from a database without Kafka?</span></summary><div class="olake-faq__answer">Yes. Each of the seven options on this page documents a path that doesn't need a Kafka cluster.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Does Debezium need Kafka?</span></summary><div class="olake-faq__answer">No, it doesn't. Debezium Server is described in its docs as a ready-to-use application that streams changes without requiring Apache Kafka. Its Iceberg sink is community maintained and lives in a separate repository.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Does Flink CDC to Iceberg work without Kafka?</span></summary><div class="olake-faq__answer">Yes, but you'll need a Flink cluster. The Iceberg pipeline connector requires a primary key on the source table and doesn't support exactly-once.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Can Amazon Data Firehose replicate a database into Iceberg?</span></summary><div class="olake-faq__answer">Not through the database preview. AWS announced it in November 2024 and added an update to that post saying the preview ended on September 30, 2025 and can't be tried. That update covers the database replication preview only, and Firehose's docs still describe Iceberg as a destination for other sources.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Do I need Spark to get Postgres changes into Iceberg?</span></summary><div class="olake-faq__answer">Not for most options. Among the tools here, only Estuary's REST connector lists a Spark application (Amazon EMR Serverless) as a prerequisite, and the other pages we read list none.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Who compacts the Iceberg tables?</span></summary><div class="olake-faq__answer">Usually you do. RisingWave lists automatic maintenance, and Estuary offers optional Glue optimizers.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Which options document exactly-once delivery?</span></summary><div class="olake-faq__answer">Two of the options in this post do: the Iceberg Kafka Connect sink (Kafka 2.5 or later) and RisingWave (an on-by-default setting). OLake Go uses a two-phase commit that avoids duplicate writes, and Flink CDC says exactly-once isn't supported. For Debezium Server, Estuary, Fivetran and dlt, the pages we read don't state a guarantee.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">When should I keep Kafka?</span></summary><div class="olake-faq__answer">Keep it when several systems read the same changes, or when you need Kafka Connect's built-in fault tolerance and large sink library, per Debezium's own post. If the Iceberg table is your only reader, a direct writer is lighter to run.</div></details></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://olake.io/compare/database-to-iceberg-without-kafka/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Ask whether you need what Kafka provides, then test one update and one delete before you commit.</p>
<p>Last reviewed October 2026. If a vendor spots a statement here that's out of date, tell us and we'll correct it.</p>
<aside class="not-prose my-10 rounded-[16px] border border-solid border-olake-line bg-olake-surface p-[24px] lg:p-[32px]"><p class="m-0 text-[22px] leading-[1.2] tracking-[-0.01em] text-olake-ink lg:text-[26px]">OLake Go</p><p class="m-0 mt-[10px] max-w-[620px] text-[15px] leading-[1.6] text-olake-text-2">Replicate databases, Kafka, and S3 into Apache Iceberg with OLake Go, an open source EL engine built for Iceberg from the ground up.</p><div class="mt-[20px] flex flex-wrap gap-[10px]"><a href="https://olake.io/contact/" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-blue-ring bg-olake-blue text-olake-on-blue! hover:border-olake-blue-hover hover:bg-olake-blue-hover hover:text-white!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Signup</a><a href="https://olake.io/slack/" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M221.13,128A32,32,0,0,0,184,76.31V56a32,32,0,0,0-56-21.13A32,32,0,0,0,76.31,72H56a32,32,0,0,0-21.13,56A32,32,0,0,0,72,179.69V200a32,32,0,0,0,56,21.13A32,32,0,0,0,179.69,184H200a32,32,0,0,0,21.13-56ZM72,152a16,16,0,1,1-16-16H72Zm48,48a16,16,0,0,1-32,0V152a16,16,0,0,1,16-16h16Zm0-80H56a16,16,0,0,1,0-32h48a16,16,0,0,1,16,16Zm0-48H104a16,16,0,1,1,16-16Zm16-16a16,16,0,0,1,32,0v48a16,16,0,0,1-16,16H136Zm16,160a16,16,0,0,1-16-16V184h16a16,16,0,0,1,0,32Zm48-48H152a16,16,0,0,1-16-16V136h64a16,16,0,0,1,0,32Zm0-48H184V104a16,16,0,1,1,16,16Z"></path></svg>Join Slack</a><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>Explore OLake GitHub</a></div><p class="m-0 mt-[16px] text-[13px] text-olake-muted">Contact us at <strong class="font-medium text-olake-text-2">hello@olake.io</strong></p></aside>]]></content>
        <author>
            <name>Priyansh Khodiyar</name>
            <email>hello@olake.io</email>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="CDC - Change Data Capture" term="CDC - Change Data Capture"/>
        <category label="Apache Iceberg" term="Apache Iceberg"/>
        <category label="Data Ingestion" term="Data Ingestion"/>
        <category label="Alternatives" term="Alternatives"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Best Data Migration Tools in 2026, Picked by Job]]></title>
        <id>https://olake.io/compare/data-migration-tools/</id>
        <link href="https://olake.io/compare/data-migration-tools/"/>
        <updated>2026-10-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Twelve data migration tools compared by job: database to database, files, lake and warehouse, with dated prices and what each one cannot do.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="eager" src="https://olake.io/img/blog/cover/data-migration-tools-cover.webp" alt="Cover for best data migration tools showing an old database moving through a migration tool to the cloud" width="1920" height="1080" fetchpriority="high" class="img_ev3q"></p>
<p>There is no single best pick among data migration tools, because "migration" covers four different jobs. This post sorts twelve tools by job, with dated prices and what each one cannot do.</p>
<section class="olake-tldr" aria-label="Key takeaways"><p class="olake-tldr__label"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"></path></svg><span>Key takeaways</span></p><div class="olake-tldr__body"><ul>
<li class=""><strong>Pick by job first.</strong> For a database, start with your target cloud's own service (AWS Database Migration Service (DMS), Azure Database Migration Service or Google Database Migration Service); for Oracle or mixed estates, look at Oracle GoldenGate or Qlik Replicate.</li>
<li class=""><strong>For files, split the job.</strong> Copying files between storage systems is AWS DataSync. Loading CSV, JSON or Parquet files from S3 into Iceberg tables is OLake Go (<a class="" href="https://olake.io/docs/connectors/s3/">S3 source docs</a>). Warehouse tables and business apps go to Fivetran, Airbyte, Hevo or Skyvia.</li>
<li class=""><strong>Some cloud moves list no charge.</strong> Google says native moves to Cloud SQL or AlloyDB for PostgreSQL carry no additional charge.</li>
<li class=""><strong>Check for retirements first.</strong> Microsoft's <a href="https://learn.microsoft.com/en-us/answers/questions/1190831/retirement-notice-database-migration-service-class" target="_blank" rel="noopener noreferrer" class="">retirement notice</a> says Azure Database Migration Service (classic) for SQL Server scenarios is not supported after 15 March 2026.</li>
<li class=""><strong>Few tools write Apache Iceberg.</strong> The <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html" target="_blank" rel="noopener noreferrer" class="">AWS DMS targets page</a>, the <a href="https://learn.microsoft.com/en-us/azure/dms/dms-overview" target="_blank" rel="noopener noreferrer" class="">Azure DMS overview</a> and the <a href="https://docs.cloud.google.com/database-migration/docs/overview" target="_blank" rel="noopener noreferrer" class="">Google DMS overview</a> do not list it as a destination.</li>
</ul></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-data-migration-means">What data migration means<a href="https://olake.io/compare/data-migration-tools/#what-data-migration-means" class="hash-link" aria-label="Direct link to What data migration means" title="Direct link to What data migration means" translate="no">​</a></h2>
<p>AWS defines data migration as moving data from one computing environment or storage system to another, and lists storage, database and application migration among the types. In this post, "source" is where data starts and "target" is where it ends up.</p>
<p>Migration is a one-time move with an end date. Replication keeps a copy current for as long as you need it, which is a different job.</p>
<table><thead><tr><th>Job</th><th>What it does</th><th>Ends when</th><th>Example tools in this post</th></tr></thead><tbody><tr><td>Database migration</td><td>Moves a database to a new server, cloud or engine</td><td>You switch the app to the new database</td><td>AWS DMS, Azure DMS, Google DMS</td></tr><tr><td>Storage migration</td><td>Moves files and objects between storage systems</td><td>The files are copied and checked</td><td>AWS DataSync</td></tr><tr><td>Loading for analysis</td><td>Copies data into a warehouse or lake, often on a schedule</td><td>You stop the pipeline (it often runs for years)</td><td>OLake Go, Datastream, Fivetran, Airbyte, Hevo, Skyvia</td></tr><tr><td>Schema migration</td><td>Versions changes to a database's tables with scripts</td><td>Never; it is part of normal development</td><td>Not covered here</td></tr></tbody></table>
<p>The last row is a different tool family: Flyway's docs describe its migrations as SQL scripts that capture incremental schema and data changes, so it's version control for your tables, not a way to move data between systems.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-which-job.webp" alt="Moving a system needs a database, file or schema tool, while analysis needs a warehouse, lake or change-copy tool" width="1600" height="720" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="homogeneous-or-heterogeneous">Homogeneous or heterogeneous<a href="https://olake.io/compare/data-migration-tools/#homogeneous-or-heterogeneous" class="hash-link" aria-label="Direct link to Homogeneous or heterogeneous" title="Direct link to Homogeneous or heterogeneous" translate="no">​</a></h3>
<p>Google's docs say a homogeneous migration moves between the same database technology, for example MySQL to Cloud SQL for MySQL. A heterogeneous one changes the technology, such as Oracle to Cloud SQL for PostgreSQL.</p>
<p>Heterogeneous moves are harder, because table definitions, data types and code all have to be converted. AWS lists Database Migration Service (DMS) Schema Conversion for that job.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="offline-or-online">Offline or online<a href="https://olake.io/compare/data-migration-tools/#offline-or-online" class="hash-link" aria-label="Direct link to Offline or online" title="Direct link to Offline or online" translate="no">​</a></h3>
<p>Offline copies a point-in-time snapshot, so changes made after it starts are not carried over, and you normally stop writes during the copy. The online (continuous) kind follows a full load with a flow of changes until you switch, as Google's docs describe.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-offline-vs-online.webp" alt="Offline migration stops writes during the whole copy, while online migration copies first, then applies changes until cutover" width="1600" height="810" class="img_ev3q"></p>
<p>Online usually reads the database's transaction log, where every change is recorded in order. That's change data capture (CDC).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-we-picked">How we picked<a href="https://olake.io/compare/data-migration-tools/#how-we-picked" class="hash-link" aria-label="Direct link to How we picked" title="Direct link to How we picked" translate="no">​</a></h2>
<p>Each tool had to move data out of a database or storage system, still be maintained, and publish documentation we could open. We compared job, sources and targets, ongoing changes and price from each vendor's own pages, checked in October 2026. This is a reading of vendor documents, not a lab test, and what vendors say about themselves is reported as their claim.</p>
<p>Schema-migration tools and backup products are left out.</p>
<p>We quote a user comment only when it names a concrete problem, so most entries have none.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="data-migration-tools-at-a-glance">Data migration tools at a glance<a href="https://olake.io/compare/data-migration-tools/#data-migration-tools-at-a-glance" class="hash-link" aria-label="Direct link to Data migration tools at a glance" title="Direct link to Data migration tools at a glance" translate="no">​</a></h2>
<p>Prices use different bases, so read the last column as a way in, not as a like-for-like cost.</p>
<table><thead><tr><th>Tool</th><th>Job</th><th>Ongoing changes?</th><th>Where data lands</th><th>Entry price or free route (October 2026)</th></tr></thead><tbody><tr><td>AWS DMS</td><td>Database to database</td><td>Yes, log-based; AWS gives no latency guarantee</td><td>Many AWS targets, S3 files; not Iceberg</td><td>dms.t3.medium <a href="https://aws.amazon.com/dms/pricing/" target="_blank" rel="noopener noreferrer" class="">$0.0745 an hour</a></td></tr><tr><td>Azure Database Migration Service</td><td>SQL Server to Azure</td><td>Online mode on some targets</td><td>Azure SQL targets</td><td>Current price not established (<a href="https://azure.microsoft.com/en-us/pricing/details/database-migration/" target="_blank" rel="noopener noreferrer" class="">classic page</a>: Standard free)</td></tr><tr><td>Google Database Migration Service</td><td>Database to Google Cloud</td><td>Yes, continuous mode</td><td>Cloud SQL, AlloyDB</td><td>Same-engine native moves: <a href="https://cloud.google.com/database-migration/pricing" target="_blank" rel="noopener noreferrer" class="">no additional charge</a></td></tr><tr><td>Oracle GoldenGate</td><td>Database to database, many targets</td><td>Yes, one-way or two-way</td><td>Many; Iceberg in a separate product</td><td><a href="https://docs.oracle.com/en/middleware/goldengate/free/21/uggfe/what-is-goldengate-free.html" target="_blank" rel="noopener noreferrer" class="">GoldenGate Free</a> for Oracle databases of 20 GB or smaller</td></tr><tr><td>Qlik Replicate</td><td>Mixed legacy and mainframe</td><td>Yes, log-based</td><td>Many; Iceberg via a Cloudera target or Qlik's cloud</td><td>Not published on <a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">Qlik's pricing page</a></td></tr><tr><td>AWS DataSync</td><td>Files and objects</td><td>Scheduled copies</td><td>S3, FSx, Elastic File System</td><td><a href="https://aws.amazon.com/datasync/pricing/" target="_blank" rel="noopener noreferrer" class="">$0.0125 per GB</a> in Basic mode</td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>Databases, S3 and Kafka into a lake</td><td>CDC for PostgreSQL, MySQL/MariaDB, MongoDB and SQL Server; full refresh or incremental for Oracle and Db2</td><td>Apache Iceberg or Parquet on your own storage; many engines read its Iceberg tables</td><td>Open source (<a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="">Apache 2.0</a>); your own infrastructure and operator time</td></tr><tr><td>Google Datastream</td><td>Into BigQuery or Iceberg</td><td>Yes, backfill then CDC</td><td>BigQuery, Cloud Storage, Iceberg tables in BigQuery (append-only)</td><td>Per-GiB rates; see its <a href="https://cloud.google.com/datastream/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a></td></tr><tr><td>Fivetran</td><td>Into a warehouse or lake</td><td>Yes, per connector</td><td>Warehouses and a managed lake service</td><td><a href="https://www.fivetran.com/pricing" target="_blank" rel="noopener noreferrer" class="">Free plan</a> to 500,000 rows</td></tr><tr><td>Airbyte</td><td>Into a warehouse or lake</td><td>CDC on scheduled syncs</td><td>Warehouses and Iceberg on S3 and GCS</td><td>Core free; Cloud Standard from <a href="https://docs.airbyte.com/release_notes/cloud" target="_blank" rel="noopener noreferrer" class="">$20 a month</a></td></tr><tr><td>Hevo</td><td>Into a warehouse</td><td>Log-based; streaming on request</td><td>Warehouses; a Snowflake Iceberg destination in early access</td><td>Free to 1M events; Starter from <a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">$299 a month</a></td></tr><tr><td>Skyvia</td><td>SaaS apps and databases</td><td>Log-based CDC for SQL Server only</td><td>Warehouses and databases</td><td>Free to 10k records; Basic <a href="https://skyvia.com/pricing" target="_blank" rel="noopener noreferrer" class="">$99, shown reduced to $79</a></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-12-best-data-migration-tools">The 12 best data migration tools<a href="https://olake.io/compare/data-migration-tools/#the-12-best-data-migration-tools" class="hash-link" aria-label="Direct link to The 12 best data migration tools" title="Direct link to The 12 best data migration tools" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="database-to-database">Database to database<a href="https://olake.io/compare/data-migration-tools/#database-to-database" class="hash-link" aria-label="Direct link to Database to database" title="Direct link to Database to database" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-aws-database-migration-service-best-for-moving-databases-into-aws">1. AWS Database Migration Service: best for moving databases into AWS<a href="https://olake.io/compare/data-migration-tools/#1-aws-database-migration-service-best-for-moving-databases-into-aws" class="hash-link" aria-label="Direct link to 1. AWS Database Migration Service: best for moving databases into AWS" title="Direct link to 1. AWS Database Migration Service: best for moving databases into AWS" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: One-time moves or ongoing replication between databases</li>
<li class="">Price: Replication instance hours or Serverless DCU hours (a DCU is 2 GB of memory), plus storage, with no separate CDC fee; dms.t3.medium lists at $0.0745 an hour in us-east-1, on demand, Single-AZ (<a href="https://aws.amazon.com/dms/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS DMS pricing</a>, checked October 2026; price file published September 11, 2026)</li>
</ul>
<p>AWS says a DMS task can run a full load first and then capture changes. The docs list <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html" target="_blank" rel="noopener noreferrer" class="">sources</a> such as Oracle, SQL Server, MySQL, MariaDB, PostgreSQL, MongoDB and Db2. It reads Oracle with LogMiner or a binary reader, MySQL binary logs, PostgreSQL logical slots and the MongoDB oplog.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-aws-dms-home.webp" alt="AWS Database Migration Service product page section titled Why DMS, with a paragraph on security and a video thumbnail" width="1600" height="571" class="img_ev3q"></p>
<p><em>AWS Database Migration Service product page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">AWS's targets list includes S3, Redshift, DynamoDB, Kafka and many database engines.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">AWS's <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html" target="_blank" rel="noopener noreferrer" class="">best practices page</a> says DMS ongoing replication does not provide real-time replication and that AWS offers no SLA (service level agreement) for CDC latency. It adds that latency can spike to several minutes or longer when the source is busy.</li>
<li class="">Apache Iceberg is not a target, though an AWS blog has DMS write S3 files and Glue jobs load them into Iceberg.</li>
</ul>
<p><strong>Ask AWS:</strong> its product page says "Zero data loss and data accuracy are maintained" through data validation. That is AWS's claim, and the validation limits further down show what it cannot check.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-azure-database-migration-service-best-for-sql-server-into-azure">2. Azure Database Migration Service: best for SQL Server into Azure<a href="https://olake.io/compare/data-migration-tools/#2-azure-database-migration-service-best-for-sql-server-into-azure" class="hash-link" aria-label="Direct link to 2. Azure Database Migration Service: best for SQL Server into Azure" title="Direct link to 2. Azure Database Migration Service: best for SQL Server into Azure" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Moves SQL Server databases to Azure SQL targets</li>
<li class="">Price: Not established for the current service. The only pricing page we found is for Azure DMS (classic): a free Standard tier for offline moves and Premium 4-vCore at $0.37 an hour, free for the first 6 months (Central US, <a href="https://azure.microsoft.com/en-us/pricing/details/database-migration/" target="_blank" rel="noopener noreferrer" class="">Microsoft's pricing page</a>, October 2026)</li>
</ul>
<p>Microsoft's <a href="https://learn.microsoft.com/en-us/azure/dms/dms-overview" target="_blank" rel="noopener noreferrer" class="">overview</a> lists three targets: Azure SQL Database (offline), Azure SQL Managed Instance and SQL Server on Azure Virtual Machines (both online and offline). It also lists schema migration, Azure CLI and PowerShell automation, and private endpoints. The pricing page says "classic" and does not say whether the portal service has the same rates, so treat those figures as history.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-azure-dms-home.webp" alt="Azure Database Migration Service product page showing four feature cards: Awareness, Guidance, Compatibility and Resilience" width="1600" height="760" class="img_ev3q"></p>
<p><em>Azure Database Migration Service product page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Microsoft's overview lists online moves for two of its three targets.</li>
<li class="">Schema migration and command-line automation are listed as supported.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Microsoft's overview table does not list assessment, login migration or databases encrypted with Transparent Data Encryption for the portal version.</li>
<li class="">Microsoft's <a href="https://learn.microsoft.com/en-us/answers/questions/1190831/retirement-notice-database-migration-service-class" target="_blank" rel="noopener noreferrer" class="">retirement notice</a> says DMS (classic) for SQL Server scenarios was not supported after 15 March 2026.</li>
<li class="">That notice points users to the portal service and puts MySQL, PostgreSQL and MongoDB scenarios out of scope.</li>
</ul>
<p><strong>Check before you rely on it:</strong> the product page card in the screenshot says the service supports SQL Server, MySQL, PostgreSQL and MongoDB migrations. The Learn overview names Azure SQL targets only, so confirm your exact source and target pair on Microsoft's supported-scenarios page.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-google-database-migration-service-best-for-moving-into-cloud-sql-or-alloydb">3. Google Database Migration Service: best for moving into Cloud SQL or AlloyDB<a href="https://olake.io/compare/data-migration-tools/#3-google-database-migration-service-best-for-moving-into-cloud-sql-or-alloydb" class="hash-link" aria-label="Direct link to 3. Google Database Migration Service: best for moving into Cloud SQL or AlloyDB" title="Direct link to 3. Google Database Migration Service: best for moving into Cloud SQL or AlloyDB" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: One-time or continuous moves into Google Cloud databases</li>
<li class="">Price: No additional charge for native same-engine moves to Cloud SQL or AlloyDB for PostgreSQL; per GiB processed for different-engine moves (<a href="https://cloud.google.com/database-migration/pricing" target="_blank" rel="noopener noreferrer" class="">Google's pricing page</a>, October 2026)</li>
</ul>
<p>Google's overview lists same-engine moves to Cloud SQL for MySQL, Cloud SQL for PostgreSQL, AlloyDB and Cloud SQL for SQL Server. It also lists different-engine moves from Oracle or SQL Server to Cloud SQL for PostgreSQL or AlloyDB.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-google-dms-home.webp" alt="Google Database Migration Service product page Key features section with four feature descriptions and a video card" width="1600" height="1235" class="img_ev3q"></p>
<p><em>Google Database Migration Service product page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Native same-engine moves to Cloud SQL or AlloyDB for PostgreSQL carry no additional charge, and the pricing page says per-GiB billing counts raw, uncompressed bytes.</li>
<li class="">A continuous mode that follows the first copy with changes.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Destinations are Google Cloud databases only, and no lake or warehouse is listed.</li>
<li class="">The pricing page gives the free backfill allowance two ways, 500 GiB in the summary and 50 GiB in the details, so we quote neither.</li>
</ul>
<p><strong>Ask Google:</strong> its product page says the service gives "highly accurate, high-fidelity migrations" and that you can run a validation first. Ask what the validation compares.</p>
<p><strong>What users say:</strong> A guide on the observability vendor OneUptime's blog, written about moving Amazon Relational Database Service (RDS) PostgreSQL, warns that "DMS sometimes does not sync sequence values perfectly" (OneUptime blog, February 2026). Check sequences after any PostgreSQL cutover.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-google-dms-pricing.webp" alt="Google Database Migration Service pricing page summary: no extra charge for native homogeneous migrations, per GiB for heterogeneous" width="1600" height="383" class="img_ev3q"></p>
<p><em>Google Cloud's Database Migration Service pricing page, October 2026.</em></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-oracle-goldengate-best-for-oracle-estates-and-long-running-or-two-way-copies">4. Oracle GoldenGate: best for Oracle estates and long-running or two-way copies<a href="https://olake.io/compare/data-migration-tools/#4-oracle-goldengate-best-for-oracle-estates-and-long-running-or-two-way-copies" class="hash-link" aria-label="Direct link to 4. Oracle GoldenGate: best for Oracle estates and long-running or two-way copies" title="Direct link to 4. Oracle GoldenGate: best for Oracle estates and long-running or two-way copies" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Real-time copies between many systems, including one-way, two-way and multi-way setups</li>
<li class="">Price: Oracle's <a href="https://www.oracle.com/a/ocom/docs/corporate/pricing/technology-price-list-070617.pdf" target="_blank" rel="noopener noreferrer" class="">Technology Global Price List</a> (edition dated September 15, 2026, read October 2026) lists GoldenGate at $17,500 per Processor or $350 per Named User Plus, and counts the processors or users at both the capture and the apply database. This is list price, and we do not know what any buyer pays.</li>
</ul>
<p>Oracle's <a href="https://docs.oracle.com/en/database/goldengate/core/26/coredoc/ogg-frequently-asked-questions.html" target="_blank" rel="noopener noreferrer" class="">FAQ</a> says GoldenGate captures, transforms and delivers changes across systems in real time, and lists zero-downtime migrations among its uses. Its supported list includes Oracle, MySQL, PostgreSQL, SQL Server, Db2, MongoDB, Kafka, Snowflake and Apache Iceberg.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-goldengate-home.webp" alt="Oracle GoldenGate product page section titled common use cases, with six use case blurbs in two columns" width="1600" height="1028" class="img_ev3q"></p>
<p><em>Oracle GoldenGate product page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Oracle's FAQ lists Oracle among its supported sources and documents two-way setups, with advice to define conflict rules.</li>
<li class=""><a href="https://docs.oracle.com/en/middleware/goldengate/free/21/uggfe/what-is-goldengate-free.html" target="_blank" rel="noopener noreferrer" class="">GoldenGate Free</a> is limited to Oracle databases of 20 GB or smaller. Oracle says it can be used in production but is not supported by Oracle Support (community forums only), and it cannot be used with fully licensed GoldenGate products.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Iceberg writing sits in a separate product, GoldenGate for Distributed Applications and Analytics, per Oracle's FAQ and Iceberg docs.</li>
<li class="">Oracle's FAQ says it cannot capture from Salesforce, Teradata or TimesTen.</li>
</ul>
<p><strong>Ask Oracle:</strong> for a written quote that covers both the capture and the apply side, and for the support terms of the edition you would run.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-qlik-replicate-best-for-mixed-legacy-and-mainframe-sources">5. Qlik Replicate: best for mixed legacy and mainframe sources<a href="https://olake.io/compare/data-migration-tools/#5-qlik-replicate-best-for-mixed-legacy-and-mainframe-sources" class="hash-link" aria-label="Direct link to 5. Qlik Replicate: best for mixed legacy and mainframe sources" title="Direct link to 5. Qlik Replicate: best for mixed legacy and mainframe sources" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Log-based copies from many databases to many targets</li>
<li class="">Price: No list price for Qlik Replicate on the pages we read. Qlik's <a href="https://www.qlik.com/us/pricing/data-integration-products-pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> describes its separate cloud subscription, Qlik Talend Cloud, as capacity bands by data volume and job runs, also without list prices (October 2026)</li>
</ul>
<p>Qlik's product page lists Oracle, SQL Server, Db2, MySQL, PostgreSQL and mainframe sources. Qlik describes Replicate as client-managed software, so you install it yourself.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-qlik-replicate-home.webp" alt="Qlik Replicate product page section on change data capture, with four delivery options and a diagram of data transport" width="1600" height="849" class="img_ev3q"></p>
<p><em>Qlik Replicate product page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">A Cloudera Iceberg target endpoint, added in the <a href="https://help.qlik.com/en-US/replicate/May2026/Content/Replicate/Main/Release_Notes/features.htm" target="_blank" rel="noopener noreferrer" class="">May 2026 release</a>. Qlik's pricing page also lists Qlik Open Lakehouse for Apache Iceberg in the Standard edition of Qlik Talend Cloud, which is a different product from Replicate.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Prices are not published, and you run the software yourself.</li>
<li class="">Replicate's own Iceberg route in the notes we read is the Cloudera target. The Iceberg lakehouse feature belongs to Qlik Talend Cloud.</li>
</ul>
<p><strong>Check before you rely on it:</strong> Qlik's page headline calls Replicate "Universal Data Replication Software". Confirm your exact source, target and versions with Qlik.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="files-and-objects">Files and objects<a href="https://olake.io/compare/data-migration-tools/#files-and-objects" class="hash-link" aria-label="Direct link to Files and objects" title="Direct link to Files and objects" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-aws-datasync-best-for-moving-files-and-objects-into-aws-storage">6. AWS DataSync: best for moving files and objects into AWS storage<a href="https://olake.io/compare/data-migration-tools/#6-aws-datasync-best-for-moving-files-and-objects-into-aws-storage" class="hash-link" aria-label="Direct link to 6. AWS DataSync: best for moving files and objects into AWS storage" title="Direct link to 6. AWS DataSync: best for moving files and objects into AWS storage" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Online transfer of files and objects, with checks that the copy matches</li>
<li class="">Price: Basic mode $0.0125 per GB; Enhanced mode $0.015 per GB plus $0.55 per task execution (US East (Ohio), <a href="https://aws.amazon.com/datasync/pricing/" target="_blank" rel="noopener noreferrer" class="">AWS DataSync pricing</a>, October 2026)</li>
</ul>
<p>AWS describes DataSync as a service to move data from on-premises storage, other clouds and AWS storage to Amazon S3, Amazon Elastic File System and FSx. It validates data end to end. AWS's Basic mode example moves 50 TB of 16 MB files into an empty S3 bucket for $640 in DataSync fees plus $16.38 in S3 requests, $656.38 in all.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-aws-datasync-home.webp" alt="AWS DataSync page use cases section: migrate, protect, archive and accelerate hybrid and multicloud workloads" width="1600" height="687" class="img_ev3q"></p>
<p><em>AWS DataSync home page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Basic mode lists a flat per-GB fee, and AWS gives a worked example on the pricing page.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">The pages we read name file and object storage only, with no database or change capture.</li>
<li class="">S3 and other AWS charges come on top, and cross-region copies add transfer fees. The example assumes 16 MB files, and our reading of AWS's formula is that request charges grow with file count.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-aws-datasync-pricing.webp" alt="AWS DataSync pricing page showing a Basic mode example of moving 50 TB to Amazon S3 for 656 dollars" width="1600" height="343" class="img_ev3q"></p>
<p><em>AWS DataSync pricing page, October 2026.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="into-a-lake">Into a lake<a href="https://olake.io/compare/data-migration-tools/#into-a-lake" class="hash-link" aria-label="Direct link to Into a lake" title="Direct link to Into a lake" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-olake-go-best-for-copying-databases-into-iceberg-or-parquet-on-storage-you-run">7. OLake Go: best for copying databases into Iceberg or Parquet on storage you run<a href="https://olake.io/compare/data-migration-tools/#7-olake-go-best-for-copying-databases-into-iceberg-or-parquet-on-storage-you-run" class="hash-link" aria-label="Direct link to 7. OLake Go: best for copying databases into Iceberg or Parquet on storage you run" title="Direct link to 7. OLake Go: best for copying databases into Iceberg or Parquet on storage you run" translate="no">​</a></h4>
<img src="https://olake.io/img/logo/olake-blue-with-text.svg" alt="OLake" height="32" style="display:block;margin:2px 0 14px">
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Copies databases, S3 files and Kafka topics into Apache Iceberg or Parquet files, with change capture for four database families</li>
<li class="">Price: Open source under the Apache 2.0 licence (<a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="">GitHub repository</a>). There is no licence fee. You run it on your own infrastructure, so your cost is your own servers, storage and engineering time.</li>
</ul>
<p>OLake Go reads <a class="" href="https://olake.io/docs/connectors/postgres/">PostgreSQL</a>, <a class="" href="https://olake.io/docs/connectors/mysql/">MySQL and MariaDB</a>, <a class="" href="https://olake.io/docs/connectors/mongodb/">MongoDB</a> and <a class="" href="https://olake.io/docs/connectors/mssql/">SQL Server</a> with change capture after a full load, and reads Oracle and Db2 by full refresh or incremental copy. See the <a class="" href="https://olake.io/docs/connectors/overview/">connector overview</a> for every source.</p>
<p>It also reads S3 files and Kafka topics, with a single sync mode for Kafka (see the <a class="" href="https://olake.io/docs/connectors/kafka/">Kafka docs</a>).</p>
<p>It writes Apache Iceberg tables through catalogs such as <a class="" href="https://olake.io/docs/writers/iceberg/catalog/glue/">AWS Glue</a>, <a class="" href="https://olake.io/docs/writers/iceberg/catalog/hive/">Hive</a>, a <a class="" href="https://olake.io/docs/writers/iceberg/catalog/jdbc/">database used as the catalog</a> or a <a class="" href="https://olake.io/docs/writers/iceberg/catalog/rest/">catalog service over a web API</a>, or <a class="" href="https://olake.io/docs/writers/parquet/config/">Parquet files</a>. The <a class="" href="https://olake.io/docs/getting-started/quickstart/">quickstart</a> covers installing it.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-olake-home.webp" alt="OLake home page headline reading Open Source Ingestion and Maintenance Tool for Apache Iceberg, with Try OLake and Github buttons" width="1600" height="477" class="img_ev3q"></p>
<p><em>OLake's home page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Change capture for PostgreSQL, MySQL and MariaDB, MongoDB and SQL Server, after a full load.</li>
<li class="">Output is Iceberg or Parquet files in storage you control, in open formats, with <a class="" href="https://olake.io/docs/understanding/compatibility-catalogs/">11 Iceberg catalogs</a> to choose from: AWS Glue, Hive Metastore, JDBC, S3 Tables and REST catalogs including Nessie, Polaris, Unity, Lakekeeper, BigLake and Snowflake Horizon.</li>
<li class="">Other engines can query the Iceberg tables it writes: Athena, Spark, Flink, Trino, Dremio, DuckDB, Snowflake, BigQuery (through BigLake), Redshift and Databricks, each with the catalogs it works with. The <a class="" href="https://olake.io/docs/understanding/compatibility-engines/">compatibility page</a> has the full table.</li>
<li class="">Row-level deletes can be written as equality deletes, positional deletes or, since <a class="" href="https://olake.io/docs/release/ingestion/v0.11.0/">v0.11.0</a>, Iceberg v3 deletion vectors. Deletion vectors are a delete mode, not general Iceberg v3 table writes, so check your query engine's column on the compatibility page.</li>
<li class="">Iceberg <a class="" href="https://olake.io/docs/writers/iceberg/partitioning/">partitioning</a> is set per stream with transforms such as year, month, day, hour, bucket and truncate, and it installs with Docker, Helm or the UI (<a class="" href="https://olake.io/docs/getting-started/quickstart/">quickstart</a>).</li>
</ul>
<p><strong>Good to know</strong></p>
<ul>
<li class="">Scope: change capture covers PostgreSQL, MySQL/MariaDB, MongoDB and SQL Server, and each source page lists its setup prerequisites, for example the <a class="" href="https://olake.io/docs/connectors/mssql/">SQL Server docs</a>. Oracle, Db2 and S3 load by full refresh or incremental copy.</li>
<li class="">Snowflake, BigQuery and Redshift can query the Iceberg tables OLake Go writes in place (Snowflake reads tables from an external catalog as read-only).</li>
</ul>
<p><strong>Bottom line:</strong> pick OLake Go when PostgreSQL, MySQL, MongoDB or SQL Server data is heading into Iceberg or Parquet on a lake you run. Pick GoldenGate or Qlik Replicate for Oracle change capture, Datastream for BigQuery on Google Cloud, or Fivetran, Airbyte or Hevo to load a warehouse directly.</p>
<p><strong>Recent fix:</strong> <a class="" href="https://olake.io/docs/release/ingestion/v0.11.0/">v0.11.0</a> fixed timestamps that the legacy Iceberg writer had cut to millisecond precision.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-google-cloud-datastream-best-for-bigquery-on-google-cloud">8. Google Cloud Datastream: best for BigQuery on Google Cloud<a href="https://olake.io/compare/data-migration-tools/#8-google-cloud-datastream-best-for-bigquery-on-google-cloud" class="hash-link" aria-label="Direct link to 8. Google Cloud Datastream: best for BigQuery on Google Cloud" title="Direct link to 8. Google Cloud Datastream: best for BigQuery on Google Cloud" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Backfill then change capture into BigQuery, Cloud Storage or Iceberg tables in BigQuery</li>
<li class="">Price: Per GiB processed; rates are on <a href="https://cloud.google.com/datastream/pricing" target="_blank" rel="noopener noreferrer" class="">Google's Datastream pricing page</a> (October 2026)</li>
</ul>
<p>Datastream is Google's serverless CDC and replication service. Its <a href="https://docs.cloud.google.com/datastream/docs/sources" target="_blank" rel="noopener noreferrer" class="">sources page</a> lists MySQL, Oracle, SQL Server, PostgreSQL, MongoDB and Spanner.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-datastream-home.webp" alt="Google Cloud Datastream product page section on its approach: relational database streaming, lakehouse sync, recovery and schema drift" width="1600" height="1187" class="img_ev3q"></p>
<p><em>Google Cloud Datastream product page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">Idle streams cost nothing, per Google's pricing page, and it supports a first backfill plus change capture.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Google says a "processed byte" can be 2 to 5 times larger than the actual data, so test before you budget.</li>
<li class="">Google's <a href="https://docs.cloud.google.com/datastream/docs/destination-blmt" target="_blank" rel="noopener noreferrer" class="">Iceberg destination docs</a> cover Apache Iceberg tables in BigQuery and say "Streaming to Apache Iceberg tables is supported only in the append-only write mode."</li>
<li class="">Google documents it only as a Google-run service, with no self-hosted option.</li>
<li class="">Google's Datastream page carried a banner on 8 October 2026 saying the SQL Server source is in preview, but the sources page shows no label. Check its status.</li>
</ul>
<p>Append-only means rows are only added to the table. Google's page does not say how an updated or deleted source row shows up there, so check that before you treat the table as the current state of the source.</p>
<p><strong>Ask Google:</strong> its page calls Datastream "Serverless and easy-to-use", which is a claim, not a test result.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="into-a-warehouse-or-business-apps">Into a warehouse or business apps<a href="https://olake.io/compare/data-migration-tools/#into-a-warehouse-or-business-apps" class="hash-link" aria-label="Direct link to Into a warehouse or business apps" title="Direct link to Into a warehouse or business apps" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="9-fivetran-best-for-a-vendor-run-copy-into-a-warehouse">9. Fivetran: best for a vendor-run copy into a warehouse<a href="https://olake.io/compare/data-migration-tools/#9-fivetran-best-for-a-vendor-run-copy-into-a-warehouse" class="hash-link" aria-label="Direct link to 9. Fivetran: best for a vendor-run copy into a warehouse" title="Direct link to 9. Fivetran: best for a vendor-run copy into a warehouse" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Managed pipelines from databases, apps and files into warehouses and lakes</li>
<li class="">Price: Monthly Active Rows (MAR, rows added or changed in a month) per connection; a Free plan up to 500,000 MAR; paid rates are in its <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Service Consumption Table</a>, not on the pricing page (Standard from $495 per million MAR for the first million, list price per connection; <a href="https://www.fivetran.com/pricing" target="_blank" rel="noopener noreferrer" class="">Fivetran pricing page</a>, October 2026)</li>
</ul>
<p>Per its <a href="https://fivetran.com/docs/core-concepts/syncoverview" target="_blank" rel="noopener noreferrer" class="">sync overview</a>, Fivetran runs a first historical sync, then switches to incremental syncs. Its database connectors use the source's native change capture or its own methods.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-fivetran-home.webp" alt="Fivetran home page headline Automated data for autonomous agents, with a data lake destination card listing Iceberg" width="1600" height="826" class="img_ev3q"></p>
<p><em>Fivetran's home page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">A vendor runs it, and its docs connector page is titled "700+ Data Integration Connectors" (Fivetran's count, not ours).</li>
<li class="">Its Managed Data Lake Service writes Apache Iceberg to S3, Azure Data Lake Storage and Google Cloud Storage, per its docs.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Fivetran's <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Managed Data Lake Service docs</a> say it does not support position deletes for Iceberg tables and advise avoiding queries that generate them.</li>
<li class="">A MAR bill follows how much your data changes, so estimate it on a trial before you commit.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="10-airbyte-best-for-a-long-connector-list-you-can-self-run">10. Airbyte: best for a long connector list you can self-run<a href="https://olake.io/compare/data-migration-tools/#10-airbyte-best-for-a-long-connector-list-you-can-self-run" class="hash-link" aria-label="Direct link to 10. Airbyte: best for a long connector list you can self-run" title="Direct link to 10. Airbyte: best for a long connector list you can self-run" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Syncs from many sources into warehouses, databases and lakes</li>
<li class="">Price: Core is free to run yourself; Cloud Standard is $20 a month with 5 credits and $5 per extra credit, per Airbyte's <a href="https://docs.airbyte.com/release_notes/cloud" target="_blank" rel="noopener noreferrer" class="">15 September 2026 release note</a> (Airbyte pricing page, October 2026)</li>
</ul>
<p>Airbyte's own pages say 600 or 700 plus connectors, depending on which page you read. Core is self-managed, and its repository licence is the Elastic License 2.0, which forbids offering it to others as a hosted service.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-airbyte-home.webp" alt="Airbyte home page headline Close the loop between systems and AI, with try it free and talk to sales buttons" width="1600" height="935" class="img_ev3q"></p>
<p><em>Airbyte's home page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">A self-run edition, and Iceberg destinations for S3 (per its S3 Data Lake docs) and GCS.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Its <a href="https://docs.airbyte.com/platform/understanding-airbyte/cdc" target="_blank" rel="noopener noreferrer" class="">CDC docs</a> say views are not supported and that TRUNCATE and table-structure changes do not appear in the logs it reads. Syncs run on a schedule.</li>
<li class="">Airbyte's Cloud limits page says Standard syncs at most hourly, and Plus every 15 minutes.</li>
<li class="">"Free" for Core covers the licence only. You still pay for the servers and the people who run it.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="11-hevo-best-for-no-code-loads-into-a-warehouse">11. Hevo: best for no-code loads into a warehouse<a href="https://olake.io/compare/data-migration-tools/#11-hevo-best-for-no-code-loads-into-a-warehouse" class="hash-link" aria-label="Direct link to 11. Hevo: best for no-code loads into a warehouse" title="Direct link to 11. Hevo: best for no-code loads into a warehouse" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Managed pipelines from SaaS apps, databases and files into warehouses</li>
<li class="">Price: Events (each record inserted, updated or deleted); Free to 1M events a month; Starter from $299 a month for 5M events, or $265 billed annually (<a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">Hevo pricing</a>, October 2026)</li>
</ul>
<p>Hevo's home page claims 150 or more connectors. Its docs list log-based reading for MySQL, PostgreSQL, MongoDB, SQL Server and Oracle.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-hevo-home.webp" alt="Hevo home page headline End-to-end ELT with built-in transformations, with a start for free sign-up box" width="1600" height="904" class="img_ev3q"></p>
<p><em>Hevo's home page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">A free plan and a 14-day trial.</li>
<li class="">Warehouse destinations include Redshift, BigQuery, Snowflake and Databricks.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Its destinations docs say databases are not recommended as destinations, though it supports some, so it looks like a poor fit for database-to-database moves.</li>
<li class="">Its docs say you must contact Hevo Sales to enable streaming pipelines. The only Iceberg destination we found is a <a href="https://docs.hevodata.com/edge/destinations/snowflake-iceberg/" target="_blank" rel="noopener noreferrer" class="">Snowflake-managed one in early access</a>.</li>
</ul>
<p><strong>Check before you rely on it:</strong> Hevo's home page shows customer claims such as "85% Reduction in platform costs". Those are Hevo's marketing figures, so ask for the method.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="12-skyvia-best-for-saas-apps-and-small-scheduled-moves">12. Skyvia: best for SaaS apps and small, scheduled moves<a href="https://olake.io/compare/data-migration-tools/#12-skyvia-best-for-saas-apps-and-small-scheduled-moves" class="hash-link" aria-label="Direct link to 12. Skyvia: best for SaaS apps and small, scheduled moves" title="Direct link to 12. Skyvia: best for SaaS apps and small, scheduled moves" translate="no">​</a></h4>
<p><strong>At a glance</strong></p>
<ul>
<li class="">Job: Import, export, replication and sync for cloud apps and databases</li>
<li class="">Price: Records per month (a record counts even if no field changed); Free to 10k records a month; Basic $99, shown reduced to $79 (the page does not say which is the annual price) (<a href="https://skyvia.com/pricing" target="_blank" rel="noopener noreferrer" class="">Skyvia pricing</a>, October 2026)</li>
</ul>
<p>Skyvia is a cloud service from Devart, and its home page says "200+ Ready-to-Use Connectors" across cloud apps, file storage, databases and data warehouses. For SQL Server, its SQL Server replication page says it supports true CDC. For other sources it finds changes with timestamp or auto-increment columns.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-skyvia-home.webp" alt="Skyvia home page section 200+ Ready-to-Use Connectors, grouped as cloud apps, databases, storages and data warehouses" width="1600" height="1462" class="img_ev3q"></p>
<p><em>Skyvia's home page, October 2026.</em></p>
<p><strong>What's good</strong></p>
<ul>
<li class="">A free plan, no-code setup, and an Agent mode for databases behind a firewall.</li>
<li class="">It lists apps such as CRMs that the cloud providers' database tools do not.</li>
</ul>
<p><strong>Where it falls short</strong></p>
<ul>
<li class="">Log-based CDC is documented for SQL Server only. Its <a href="https://docs.skyvia.com/data-integration/replication/" target="_blank" rel="noopener noreferrer" class="">replication docs</a> say a new source field is not replicated until the task is updated.</li>
<li class="">It is cloud only on the pages we read, and the free plan allows daily runs at most.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="others-youll-see-in-other-lists">Others you'll see in other lists<a href="https://olake.io/compare/data-migration-tools/#others-youll-see-in-other-lists" class="hash-link" aria-label="Direct link to Others you'll see in other lists" title="Direct link to Others you'll see in other lists" translate="no">​</a></h3>
<ul>
<li class=""><strong>Informatica</strong> was acquired by Salesforce, which announced completion on 18 November 2025.</li>
<li class=""><strong>Debezium</strong> is the open-source engine that reads database logs, and you run it yourself.</li>
<li class=""><strong>Talend Open Studio</strong> was retired on 31 January 2024, according to Qlik's page.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="which-data-migration-tool-should-you-pick">Which data migration tool should you pick?<a href="https://olake.io/compare/data-migration-tools/#which-data-migration-tool-should-you-pick" class="hash-link" aria-label="Direct link to Which data migration tool should you pick?" title="Direct link to Which data migration tool should you pick?" translate="no">​</a></h2>
<table><thead><tr><th>Your job</th><th>Look at first</th><th>Rule out when</th></tr></thead><tbody><tr><td>Database into AWS</td><td>AWS DMS</td><td>You need Iceberg directly, or a guaranteed CDC delay (AWS DMS offers none)</td></tr><tr><td>SQL Server into Azure SQL</td><td>Azure DMS (portal service)</td><td>The source is not SQL Server, or the target is outside Azure SQL</td></tr><tr><td>Database into Cloud SQL or AlloyDB</td><td>Google DMS</td><td>The destination is a lake or warehouse</td></tr><tr><td>Oracle, mainframe or two-way copies</td><td>GoldenGate or Qlik Replicate</td><td>You need a public price (Qlik) or cannot license both ends (GoldenGate)</td></tr><tr><td>Files and objects into AWS</td><td>AWS DataSync</td><td>The data is a live database</td></tr><tr><td>S3 files into Iceberg tables</td><td>OLake Go</td><td>You need files copied between storage systems (DataSync), or loaded into warehouse tables</td></tr><tr><td>Iceberg or Parquet lake</td><td>OLake Go (you run it) or Datastream (Google runs it)</td><td>You need data loaded into warehouse tables (Fivetran, Airbyte, Hevo) or Oracle change capture (GoldenGate, Qlik Replicate), or, with Datastream, updates and deletes in Iceberg</td></tr><tr><td>Database into BigQuery</td><td>Datastream</td><td>You are not on Google Cloud, or you need updates and deletes in its Iceberg tables</td></tr><tr><td>SaaS and database data into a warehouse</td><td>Fivetran, Airbyte, Hevo or Skyvia</td><td>You need a one-time database cutover</td></tr></tbody></table>
<section class="root_PuUS" aria-labelledby="_R_1alqfdbih_-h"><header><h3 id="_R_1alqfdbih_-h" class="title_QNC9" tabindex="-1">Which data migration tool fits you?</h3></header><div class="progress_EyIk" role="progressbar" aria-valuemin="1" aria-valuemax="5" aria-valuenow="1" aria-label="Quiz progress"><span style="width:0%"></span></div><p class="count_OugS">Question <!-- -->1<!-- --> of <!-- -->5</p><p id="_R_1alqfdbih_-q" class="question_IKMS">What are you moving?</p><p class="hint_x3sW">The post says migration is really four different jobs, so start here.</p><div role="radiogroup" aria-labelledby="_R_1alqfdbih_-q" class="options_xbjx"><button type="button" role="radio" aria-checked="false" tabindex="0" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">A</span><span class="optLabel_qDTb">A database</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">B</span><span class="optLabel_qDTb">Files or object storage</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">C</span><span class="optLabel_qDTb">Business apps and databases for reports</span></button></div><div class="actions_XZHX"><button type="button" class="primary_KVNI" disabled="">Next</button></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-an-online-database-cutover-runs">How an online database cutover runs<a href="https://olake.io/compare/data-migration-tools/#how-an-online-database-cutover-runs" class="hash-link" aria-label="Direct link to How an online database cutover runs" title="Direct link to How an online database cutover runs" translate="no">​</a></h2>
<p>Google's architecture guide splits an online database migration into six phases and uses the term "near-zero downtime" for the goal.</p>
<p>Phase 6, fallback, is a contingency for a switchover that goes wrong. Google says clients of the old source databases "need to be kept available and operational so that they can be turned on in a fallback".</p>
<table><thead><tr><th>Phase</th><th>What happens</th><th>What Google's guide says to check</th></tr></thead><tbody><tr><td>1. Initial load</td><td>The existing data is copied</td><td>Note the source system time right before the migration starts</td></tr><tr><td>2. Continuing migration</td><td>Changes keep flowing to the target</td><td>Avoid changing schema, data values or migration processes</td></tr><tr><td>3. Draining</td><td>You quiesce the source and apply the last changes</td><td>No data changes at the source; wait for all changes to reach the target</td></tr><tr><td>4. Switchover</td><td>Clients are pointed at the target</td><td>Test basic client functions before opening production access</td></tr><tr><td>5. Source deletion</td><td>The old database is removed after a successful switchover</td><td>Take a final backup of each source database first</td></tr><tr><td>6. Fallback (contingency)</td><td>Changes on the target are applied back to the source</td><td>Treated as a full migration, with testing</td></tr></tbody></table>
<p>Quiesce means pause writes. Google says a fallback might be required days or weeks after the switchover, so keep the source until you are sure you will not need to go back.</p>
<p>AWS's best practices page, linked above, adds two tool-level points. AWS DMS does not automatically create secondary indexes, foreign keys or user accounts on the target, so those are on you. AWS also recommends running a small test migration first.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="prove-the-copy-matches">Prove the copy matches<a href="https://olake.io/compare/data-migration-tools/#prove-the-copy-matches" class="hash-link" aria-label="Direct link to Prove the copy matches" title="Direct link to Prove the copy matches" translate="no">​</a></h3>
<p>AWS DMS has a data validation feature that compares each source row with its target row and reports mismatches. Ask every vendor for something like it.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/data-migration-tools-aws-dms-validation.webp" alt="AWS DMS data validation limits: a primary key or unique index is required, and extra queries run on both databases" width="1600" height="685" class="img_ev3q"></p>
<p><em>AWS DMS documentation, data validation limitations, October 2026.</em></p>
<ul>
<li class="">Tables need a primary key or unique index, so a table without one cannot be checked.</li>
<li class="">Validation adds queries on both databases and takes extra time beyond the migration itself.</li>
<li class="">Rows that change constantly cannot be compared, and views are not supported.</li>
<li class="">AWS says validation stops if it finds more than 10,000 failed or suspended records.</li>
<li class="">A validation-only task checks rows without migrating data, for a check just before a cutover.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-small-check-you-can-try-an-illustration-not-a-result">A small check you can try (an illustration, not a result)<a href="https://olake.io/compare/data-migration-tools/#a-small-check-you-can-try-an-illustration-not-a-result" class="hash-link" aria-label="Direct link to A small check you can try (an illustration, not a result)" title="Direct link to A small check you can try (an illustration, not a result)" translate="no">​</a></h3>
<p>This is a made-up example. We have not run it on any of these tools.</p>
<ul>
<li class="">Make a test table with three rows: (1, "a"), (2, "b") and (3, "c"). Start the migration.</li>
<li class="">While it runs, insert (4, "d"), update row 2 to "b2" and delete row 3.</li>
<li class="">Switch over, then count rows and compare a checksum on both sides. Expect (1, "a"), (2, "b2") and (4, "d"), with no row 3 and no duplicates.</li>
<li class="">For a lake target, check whether deletes arrive as removed rows or as extra change records.</li>
</ul>
<div class="olake-faq"><details class="alert olake-faq__item"><summary><span class="olake-faq__question">What are data migration tools?</span></summary><div class="olake-faq__answer">Tools that move data from one system or storage location to another.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">What is the difference between data migration and data replication?</span></summary><div class="olake-faq__answer">Migration is a one-time move. Replication keeps copies in step for as long as you need them.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">What is the difference between online and offline migration?</span></summary><div class="olake-faq__answer">Offline copies a point-in-time snapshot and you normally stop writes during the copy. Online follows a first full copy with a flow of changes, so your app keeps running until a short switch.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Are there free data migration tools?</span></summary><div class="olake-faq__answer">Some moves list no charge. Google says native same-engine moves to Cloud SQL or AlloyDB for PostgreSQL carry no additional charge. Fivetran, Hevo and Skyvia have capped free plans, and Airbyte Core is free to run yourself, though you pay for your own servers.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">What is the best tool to migrate a database to the cloud?</span></summary><div class="olake-faq__answer">Start with the service from the cloud you're moving to: AWS DMS, Azure Database Migration Service or Google Database Migration Service. For Oracle-heavy or mixed estates, look at Oracle GoldenGate or Qlik Replicate.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Can data migration tools write Apache Iceberg?</span></summary><div class="olake-faq__answer">A few can, with limits. AWS DMS, Azure DMS and Google DMS do not list it. Datastream writes Iceberg in BigQuery in append-only mode, Fivetran's Managed Data Lake Service does not support position deletes, Airbyte has Iceberg destinations for S3 and GCS, and OLake Go (ours) writes Iceberg and Parquet.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">How do I check that migrated data is correct?</span></summary><div class="olake-faq__answer">Check both sides before you switch. AWS DMS can compare source and target rows, but it needs a primary key or unique index. For other tools, count rows and compare a checksum, as in the small check above.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">What is a cutover in a database migration?</span></summary><div class="olake-faq__answer">The moment clients stop using the old database and start using the new one, after the source is drained of its last changes.</div></details></div>
<aside class="not-prose my-10 rounded-[16px] border border-solid border-olake-line bg-olake-surface p-[24px] lg:p-[32px]"><p class="m-0 text-[22px] leading-[1.2] tracking-[-0.01em] text-olake-ink lg:text-[26px]">OLake Go</p><p class="m-0 mt-[10px] max-w-[620px] text-[15px] leading-[1.6] text-olake-text-2">Replicate databases, Kafka, and S3 into Apache Iceberg with OLake Go, an open source EL engine built for Iceberg from the ground up.</p><div class="mt-[20px] flex flex-wrap gap-[10px]"><a href="https://olake.io/contact/" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-blue-ring bg-olake-blue text-olake-on-blue! hover:border-olake-blue-hover hover:bg-olake-blue-hover hover:text-white!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Signup</a><a href="https://olake.io/slack/" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M221.13,128A32,32,0,0,0,184,76.31V56a32,32,0,0,0-56-21.13A32,32,0,0,0,76.31,72H56a32,32,0,0,0-21.13,56A32,32,0,0,0,72,179.69V200a32,32,0,0,0,56,21.13A32,32,0,0,0,179.69,184H200a32,32,0,0,0,21.13-56ZM72,152a16,16,0,1,1-16-16H72Zm48,48a16,16,0,0,1-32,0V152a16,16,0,0,1,16-16h16Zm0-80H56a16,16,0,0,1,0-32h48a16,16,0,0,1,16,16Zm0-48H104a16,16,0,1,1,16-16Zm16-16a16,16,0,0,1,32,0v48a16,16,0,0,1-16,16H136Zm16,160a16,16,0,0,1-16-16V184h16a16,16,0,0,1,0,32Zm48-48H152a16,16,0,0,1-16-16V136h64a16,16,0,0,1,0,32Zm0-48H184V104a16,16,0,1,1,16,16Z"></path></svg>Join Slack</a><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>Explore OLake GitHub</a></div><p class="m-0 mt-[16px] text-[13px] text-olake-muted">Contact us at <strong class="font-medium text-olake-text-2">hello@olake.io</strong></p></aside>]]></content>
        <author>
            <name>Priyansh Khodiyar</name>
            <email>hello@olake.io</email>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="ETL" term="ETL"/>
        <category label="Data Pipeline Tools" term="Data Pipeline Tools"/>
        <category label="Data Ingestion" term="Data Ingestion"/>
        <category label="Best-of" term="Best-of"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[What Is Fivetran? How It Works, Cost and Fit (2026)]]></title>
        <id>https://olake.io/compare/what-is-fivetran/</id>
        <link href="https://olake.io/compare/what-is-fivetran/"/>
        <updated>2026-10-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[What is Fivetran? A plain guide to how its syncs work, its connectors, dbt merger, Iceberg lake output, pricing model, limits and who should skip it.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="eager" src="https://olake.io/img/blog/cover/what-is-fivetran-cover.webp" alt="Sources flow through a managed sync service into a warehouse or data lake, shown as a three step pipeline" width="1920" height="1080" fetchpriority="high" class="img_ev3q"></p>
<section class="olake-tldr" aria-label="Key takeaways"><p class="olake-tldr__label"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"></path></svg><span>Key takeaways</span></p><div class="olake-tldr__body"><p>Fivetran is a paid, managed service that copies data from apps, databases, files and event streams into a data warehouse or data lake, then keeps that copy fresh. You pick a source, a destination and a schedule, and Fivetran runs the rest. Billing is by monthly active rows (MAR), meaning the distinct rows synced in a calendar month.</p><p>Teams that want hands-off pipelines (Fivetran's own pitch) are the likeliest fit. The bill follows usage, so you cannot know it until you estimate your changed rows. A fixed bill, self-hosting or open source code points elsewhere, and its lake output comes with rules to check first.</p><ul>
<li class="">Fivetran is an ELT service. ELT means extract, load, then transform: it drops raw data into your destination, and you reshape it there.</li>
<li class="">A new connection copies everything once (the initial sync). After that, it moves only the changes, on a schedule.</li>
<li class="">Pricing is per connection, by monthly active rows (MAR). The pricing page prints no per-row rate, but the Service Consumption Table does.</li>
<li class="">The bill is usage-based, so it is hard to predict: it depends on how many distinct rows change in each connection each month. Estimate that before you sign.</li>
<li class="">For a lake, Fivetran writes and maintains the Iceberg tables. Its docs say not to change them from other tools, and they list gaps worth testing: position deletes, upkeep and transformations.</li>
</ul></div></section>
<p>Every Fivetran fact below comes from Fivetran's own pages, read between October 1 and October 7, 2026, with the page linked beside the claim. User quotes and the rows for other tools carry their own sources.</p>
<p>Where a number isn't published, we say "not published". We did not run Fivetran, so this is a read of its documents, not a hands-on test. Claims about ease, speed or reliability are Fivetran's claims, and we did not test them.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-fivetran">What is Fivetran?<a href="https://olake.io/compare/what-is-fivetran/#what-is-fivetran" class="hash-link" aria-label="Direct link to What is Fivetran?" title="Direct link to What is Fivetran?" translate="no">​</a></h2>
<p>Fivetran describes its <a href="https://fivetran.com/docs/connectors" target="_blank" rel="noopener noreferrer" class="">connectors</a> as pre-built, and says they sync data from applications, databases, event streams and files to a data warehouse or data lake. A connector is a ready-made piece of software for one kind of source, such as a customer relationship management (CRM) tool like Salesforce, or a database like PostgreSQL. The pricing page calls them "fully managed". Taken at its word, that means Fivetran runs them, not you.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/what-is-fivetran-home.webp" alt="Fivetran home page with the headline Automated data for autonomous agents and a data lake destination card showing Iceberg and Delta Lake" width="1600" height="826" class="img_ev3q"></p>
<p><em>Fivetran home page, October 2026.</em></p>
<p>Two words will come up again and again. A <strong>source</strong> is where your data starts, such as a database or a business app. The <strong>destination</strong> is where Fivetran puts the copy, such as a data warehouse or a lake on cloud storage.</p>
<p>Per its <a href="https://fivetran.com/docs/transformations" target="_blank" rel="noopener noreferrer" class="">transformations docs</a>, Fivetran uses the extract, load, transform (ELT) model, so raw data stays available alongside transformed data. Fivetran loads the raw tables into a destination schema (a named folder inside the destination), and the transformations run in your destination.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/what-is-fivetran-who-does-what.webp" alt="Who does what with Fivetran: Fivetran runs connectors and loading, you own SQL models, source setup and cost checks" width="1600" height="720" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-a-fivetran-sync-works">How a Fivetran sync works<a href="https://olake.io/compare/what-is-fivetran/#how-a-fivetran-sync-works" class="hash-link" aria-label="Direct link to How a Fivetran sync works" title="Direct link to How a Fivetran sync works" translate="no">​</a></h2>
<p>A sync is one run that moves data from a source to a destination. Fivetran's <a href="https://fivetran.com/docs/core-concepts/syncoverview" target="_blank" rel="noopener noreferrer" class="">sync overview</a> gives the order of events, and it's short.</p>
<ol>
<li class=""><strong>Initial sync.</strong> You have to run a historical sync before a connection is usable. The first one is the initial sync, and it copies all the data from the tables you selected.</li>
<li class=""><strong>Incremental sync.</strong> Once the first run succeeds, the connection switches to incremental mode. Only data that was modified or added gets extracted, processed and loaded on schedule.</li>
<li class=""><strong>Re-sync.</strong> Found a data integrity error? You can run a historical sync again. That's called a re-sync.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/fivetran-sync-overview.webp" alt="Fivetran sync overview documentation explaining the initial sync, incremental sync mode, re-sync and daily rollback sync" width="1600" height="904" class="img_ev3q"></p>
<p><em>Fivetran's sync overview page, October 2026.</em></p>
<p>Fivetran uses cursors, markers of what it has already processed, so the next run can resume from that point. Its database docs say it also records the time of each row's last sync in a column called <code>_fivetran_synced</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-often-does-it-sync">How often does it sync?<a href="https://olake.io/compare/what-is-fivetran/#how-often-does-it-sync" class="hash-link" aria-label="Direct link to How often does it sync?" title="Direct link to How often does it sync?" translate="no">​</a></h3>
<p>Per the sync overview page, you can pick a fixed interval, a cron schedule (a standard way to write timed schedules, on Enterprise and Business Critical plans only), or manual runs through its API. Every six hours is the default, and you can't schedule syncs less often than once every 24 hours.</p>
<p>Database connectors skip that default. Per the <a href="https://fivetran.com/docs/connectors/databases" target="_blank" rel="noopener noreferrer" class="">database connector docs</a>, they sync new and changed data every 15 minutes. The pricing page, covered below, lists 15-minute syncs on Standard and 1-minute syncs on Enterprise.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-does-it-catch-database-changes">How does it catch database changes?<a href="https://olake.io/compare/what-is-fivetran/#how-does-it-catch-database-changes" class="hash-link" aria-label="Direct link to How does it catch database changes?" title="Direct link to How does it catch database changes?" translate="no">​</a></h3>
<p>So how does it spot changes in a database?</p>
<p>Fivetran uses the database's own change data capture (CDC) feature or a method of its own, depending on the database. CDC means reading the log where a database writes down every change, so you copy only what changed.</p>
<p>The database docs go database by database. The native routes are the binary log (MySQL's record of changes) for MySQL and MariaDB, logical replication (PostgreSQL's built-in way to stream changes) for PostgreSQL, and change streams (MongoDB's feed of changes) for MongoDB. For SQL Server, they are its Change Data Capture or Change Tracking features.</p>
<p>Teleport Sync is a separate, Fivetran-made method that doesn't read the change log. The <a href="https://fivetran.com/docs/connectors/databases" target="_blank" rel="noopener noreferrer" class="">database docs</a> recommend it when you can't or don't want to give Fivetran access to your change logs. Their stated limit: if you update large parts of a table between syncs, Teleport Sync may be unable to find the changes, and the connection re-syncs the entire table.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-documented-failure-when-the-change-log-runs-out">A documented failure: when the change log runs out<a href="https://olake.io/compare/what-is-fivetran/#a-documented-failure-when-the-change-log-runs-out" class="hash-link" aria-label="Direct link to A documented failure: when the change log runs out" title="Direct link to A documented failure: when the change log runs out" translate="no">​</a></h3>
<p>Here's where things can go sideways, and the database docs say so plainly. Change logs expire, either by time or when the storage set aside for them fills up. If Fivetran falls behind for longer than the log is kept, the progress point is gone.</p>
<p>Fivetran's docs say: "Expired change logs require a full source re-sync." For SQL databases, that page names schema changes in the source as the most common trigger for a full table re-sync. On a big table, plan for the extra load and the extra wait.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-worked-example-one-orders-table">A worked example: one orders table<a href="https://olake.io/compare/what-is-fivetran/#a-worked-example-one-orders-table" class="hash-link" aria-label="Direct link to A worked example: one orders table" title="Direct link to A worked example: one orders table" translate="no">​</a></h3>
<p>Sometimes a tiny example beats a page of docs. The tables below are an illustration, not a test run: we built them from the columns Fivetran documents, and we did not run Fivetran.</p>
<p>Per Fivetran's <a href="https://fivetran.com/docs/connectors/databases/postgresql" target="_blank" rel="noopener noreferrer" class="">PostgreSQL connector docs</a>, with logical replication a <code>DELETE</code> in the source table updates the destination row with <code>_fivetran_deleted = TRUE</code>. The database docs say <code>_fivetran_synced</code> records when each row last synced.</p>
<p>Source <code>orders</code> table at the first sync (T0), then at the next sync (T1):</p>
<table><thead><tr><th>Time</th><th>id</th><th>status</th></tr></thead><tbody><tr><td>T0</td><td>1</td><td>new</td></tr><tr><td>T0</td><td>2</td><td>new</td></tr><tr><td>T0</td><td>3</td><td>new</td></tr><tr><td>T1</td><td>1</td><td>new</td></tr><tr><td>T1</td><td>2</td><td>shipped</td></tr><tr><td>T1</td><td>3</td><td>(deleted in the source)</td></tr><tr><td>T1</td><td>4</td><td>new (inserted after T0)</td></tr></tbody></table>
<p>Destination <code>orders</code> table after the T1 sync:</p>
<table><thead><tr><th>id</th><th>status</th><th>_fivetran_deleted</th><th>_fivetran_synced</th></tr></thead><tbody><tr><td>1</td><td>new</td><td>false</td><td>T0</td></tr><tr><td>2</td><td>shipped</td><td>false</td><td>T1</td></tr><tr><td>3</td><td>new</td><td>true</td><td>T1</td></tr><tr><td>4</td><td>new</td><td>false</td><td>T1</td></tr></tbody></table>
<p>Order 3 is still in the destination. It's just flagged.</p>
<p>So your queries have to filter it out. <code>SELECT count(*) FROM orders</code> returns 4 here, and adding <code>WHERE _fivetran_deleted = false</code> returns 3, which matches the source. Skip the filter and deleted orders show up in your reports.</p>
<p>Now the billing angle. Fivetran's <a href="https://fivetran.com/docs/usage-based-pricing" target="_blank" rel="noopener noreferrer" class="">usage-based pricing docs</a> say a row is counted once per month, even if it syncs many times. And since January 1, 2026, <a href="https://fivetran.com/docs/core-concepts/usage-based-pricing/pricing-updates/2026-pricing-updates" target="_blank" rel="noopener noreferrer" class="">deletes count toward paid MAR</a> like any changed row.</p>
<p>If the T1 changes all land in the same month after the initial sync, rows 2, 3 and 4 count as active that month, so that is 3 MAR. Row 1 doesn't count, because it never changed.</p>
<p>Now picture the log window running out between T0 and T1. The changes could not be read, and per the database docs a full source re-sync is then needed. So plan for a full re-copy.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fivetran-connectors-by-type">Fivetran connectors, by type<a href="https://olake.io/compare/what-is-fivetran/#fivetran-connectors-by-type" class="hash-link" aria-label="Direct link to Fivetran connectors, by type" title="Direct link to Fivetran connectors, by type" translate="no">​</a></h2>
<p>How big is the catalog? Fivetran's <a href="https://www.fivetran.com/connectors" target="_blank" rel="noopener noreferrer" class="">connector directory</a> says it moves data from 750+ sources and activates back into 200+ destinations. That 200+ figure counts activation targets, such as CRMs and marketing tools (see Activations below), not warehouses or lakes.</p>
<p>The connectors docs title and the pricing page both say 700+, so quote the page you used.</p>
<p>The docs sort connectors into six groups: Applications, Databases, Events, Files, Functions and Logs. Database connectors read changes from the source database, so they need setup on your side, such as log retention and permissions.</p>
<p>Source missing from the list? The docs describe a Connector SDK, which lets you write a custom connector in Python and run it on Fivetran's infrastructure. They also list a By Request Program for connectors not yet in the catalog.</p>
<p>High-Volume Agent (HVA) connectors are a database group of their own. Fivetran's <a href="https://fivetran.com/docs/connectors/databases/hva-connectors" target="_blank" rel="noopener noreferrer" class="">HVA docs</a> list Db2 for i, Oracle, SQL Server and SAP (business software). The pricing page lists "enterprise database connectors" from the Enterprise plan up.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="transformations-and-the-dbt-merger">Transformations and the dbt merger<a href="https://olake.io/compare/what-is-fivetran/#transformations-and-the-dbt-merger" class="hash-link" aria-label="Direct link to Transformations and the dbt merger" title="Direct link to Transformations and the dbt merger" translate="no">​</a></h2>
<p>Raw tables are rarely what your analysts want to query. Fivetran's transformations page lists two options. One is pre-built data models that turn raw tables into analytics-ready ones, and the other is a Fivetran-hosted dbt integration, plus dbt Cloud and Coalesce connections.</p>
<p>(dbt, in case you're new to it, is a popular tool for writing SQL transformations.)</p>
<p>All these jobs run in your destination. Up to 5,000 model runs a month are free. One limit to flag: the same page says "Fivetran-hosted Transformations for dbt do not support Managed Data Lake Service destinations", a point we return to below.</p>
<p>On June 1, 2026, Fivetran <a href="https://www.fivetran.com/press/fivetran-dbt-labs-complete-merger-to-create-the-data-infrastructure-for-trusted-ai-agents" target="_blank" rel="noopener noreferrer" class="">announced the completion of its merger with dbt Labs</a>. It was an all-stock deal first announced on October 13, 2025, and the combined company initially operates as Fivetran + dbt Labs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="activations-sending-data-back-out">Activations: sending data back out<a href="https://olake.io/compare/what-is-fivetran/#activations-sending-data-back-out" class="hash-link" aria-label="Direct link to Activations: sending data back out" title="Direct link to Activations: sending data back out" translate="no">​</a></h2>
<p>Most of this post is about data flowing in. Activations flips it: it sends data from the warehouse back out into business tools, such as a CRM. This is often called reverse ETL (ETL means extract, transform, load).</p>
<p>Fivetran's pricing page lists 200+ managed activation destinations. Activations bill on monthly active rows too, with their own Free-plan allowance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="managed-data-lake-service-and-apache-iceberg">Managed Data Lake Service and Apache Iceberg<a href="https://olake.io/compare/what-is-fivetran/#managed-data-lake-service-and-apache-iceberg" class="hash-link" aria-label="Direct link to Managed Data Lake Service and Apache Iceberg" title="Direct link to Managed Data Lake Service and Apache Iceberg" translate="no">​</a></h2>
<p>Not everyone wants a warehouse. With <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">Managed Data Lake Service</a>, Fivetran writes your data to cloud storage you own: Amazon S3, Azure Data Lake Storage or Google Cloud Storage. It writes Parquet files there and manages the table metadata and upkeep.</p>
<p>Apache Iceberg is an open table format. The short version: it lets several query engines read the same files as ordinary tables.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/fivetran-managed-data-lake-service.webp" alt="Fivetran Managed Data Lake Service documentation describing Apache Iceberg tables on cloud storage" width="1600" height="1550" class="img_ev3q"></p>
<p><em>Fivetran's Managed Data Lake Service page, October 2026.</em></p>
<p>On the format, the docs say Fivetran always creates Iceberg metadata for these tables, and can optionally add Delta Lake metadata. The default catalog (the service that tracks your tables) is the Fivetran Catalog, built on Apache Polaris. Per the <a href="https://fivetran.com/docs/destinations/managed-data-lake-service/metadata-catalogs" target="_blank" rel="noopener noreferrer" class="">catalog docs</a>, you can also connect AWS Glue and BigLake metastore for Iceberg tables, and Databricks Unity Catalog and OneLake for Delta Lake metadata.</p>
<p>The <a href="https://fivetran.com/docs/destinations/managed-data-lake-service" target="_blank" rel="noopener noreferrer" class="">lake docs</a> list 12 compatible query engines, including Amazon Athena, BigQuery, Snowflake, Databricks and DuckDB. So, per its docs, reading the tables from other tools is the intended use.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-to-check-before-you-pick-the-lake-destination">What to check before you pick the lake destination<a href="https://olake.io/compare/what-is-fivetran/#what-to-check-before-you-pick-the-lake-destination" class="hash-link" aria-label="Direct link to What to check before you pick the lake destination" title="Direct link to What to check before you pick the lake destination" translate="no">​</a></h3>
<p>Fivetran says it writes the files, keeps the catalog and runs table upkeep, so you don't build that yourself. We did not test how well it does this. The trade is control: you own the storage bucket, but Fivetran manages the tables in it.</p>
<p>Fivetran's catalog docs are direct: "Do not modify these tables manually or by using any external catalog, as doing so may lead to data integrity issues." Read-only credentials are the default. So ask what your other tools can still do with these tables, using the documented limits below.</p>
<table><thead><tr><th>Topic</th><th>What the docs state</th><th>What to ask Fivetran</th></tr></thead><tbody><tr><td>Deletes</td><td>"Fivetran does not support position deletes for Iceberg tables." The docs recommend avoiding any query that generates them. Position deletes are a way to record removed rows without rewriting files</td><td>Which queries in my engine create position deletes, and what happens to a source delete in the lake table?</td></tr><tr><td>Other tools</td><td>Tables should not be changed from external catalogs, and the docs recommend against deleting metadata files</td><td>Can my tools write to these tables, or only read?</td></tr><tr><td>Table upkeep</td><td>Table snapshots past the retention period are deleted, and at least the last 2 are kept (a snapshot is a saved table version). Orphan files, which no table points to, are moved on the second and fourth Saturdays of each month. The page does not mention compaction</td><td>Is compaction, which merges many small files into fewer large ones, done at all, and how often?</td></tr><tr><td>Transformations</td><td>Fivetran-hosted dbt transformations do not support these destinations. The lake docs list Quickstart data models (Beta) and dbt projects on Lake Compute, a DuckDB-based engine</td><td>Which of these will run on my tables, and is Quickstart out of beta?</td></tr></tbody></table>
<p>A missing upkeep task in the docs isn't proof the service lacks it. So treat the right-hand column as questions to put to Fivetran in a trial, using your own sync interval.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deployment-security-and-compliance">Deployment, security and compliance<a href="https://olake.io/compare/what-is-fivetran/#deployment-security-and-compliance" class="hash-link" aria-label="Direct link to Deployment, security and compliance" title="Direct link to Deployment, security and compliance" translate="no">​</a></h2>
<p>Where does your data actually get processed?</p>
<p>The <a href="https://fivetran.com/docs/deployment-models" target="_blank" rel="noopener noreferrer" class="">deployment models page</a> describes two options. With SaaS, "data processing is handled entirely within the Fivetran cloud". Hybrid is for teams that "need to keep their data local for security or compliance reasons but still want to benefit from Fivetran managed service".</p>
<p>The pricing page lists hybrid deployment as an Enterprise plan feature. We found no published source licence for the core service, so there is no open source version to download and run.</p>
<p>For a security questionnaire, Fivetran's <a href="https://www.fivetran.com/security" target="_blank" rel="noopener noreferrer" class="">security page</a> lists System and Organization Controls (SOC) 1 and 2, plus International Organization for Standardization (ISO) 27001. It also lists a commitment to GDPR (EU privacy law) and CCPA (California privacy law). A business associate agreement signed by Fivetran covers HIPAA (US health privacy law).</p>
<p>The page says Health Information Trust Alliance (HITRUST) certification, a healthcare security framework, comes with the Business Critical plan.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-does-fivetran-cost">What does Fivetran cost?<a href="https://olake.io/compare/what-is-fivetran/#what-does-fivetran-cost" class="hash-link" aria-label="Direct link to What does Fivetran cost?" title="Direct link to What does Fivetran cost?" translate="no">​</a></h2>
<p>Fivetran counts MAR per connection. That one detail drives the examples below.</p>
<p>A row counts once in a month however many times it changes. Some re-syncs are free, but re-synced rows that changed count toward paid MAR, per the <a href="https://fivetran.com/docs/usage-based-pricing" target="_blank" rel="noopener noreferrer" class="">usage-based pricing docs</a>.</p>
<p>The <a href="https://www.fivetran.com/pricing" target="_blank" rel="noopener noreferrer" class="">pricing page</a> lists four plans: Free, Standard, Enterprise and Business Critical.</p>
<table><thead><tr><th>Plan</th><th>What the pricing page lists</th><th>List rate for the first million MAR</th></tr></thead><tbody><tr><td>Free</td><td>Up to 500,000 MAR for connections, 3,500 MAR for activations, 5,000 model runs</td><td>$0</td></tr><tr><td>Standard</td><td>15-minute syncs, 700+ connectors, unlimited users, dbt Core integration</td><td>$495 per million, plus a $5 base</td></tr><tr><td>Enterprise</td><td>Adds 1-minute syncs, enterprise database connectors, hybrid deployment</td><td>$661.67 per million, plus a $5 base</td></tr><tr><td>Business Critical</td><td>Adds customer-managed keys, PCI DSS Level 1, private networking</td><td>$1,061.67 per million, plus a $5 base</td></tr></tbody></table>
<p>One thing to flag: Fivetran publishes no single monthly price, and your bill follows usage. The pricing page prints no per-row rate for the paid plans, but Fivetran's <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Service Consumption Table</a> does, in version 10, effective February 1, 2026.</p>
<p>Those are list prices, before any annual-contract discount.</p>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/fivetran-pricing-plans.webp" alt="Fivetran pricing page with the Free, Standard, Enterprise and Business Critical plan cards and their included features" width="1600" height="755" class="img_ev3q"></p>
<p><em>Fivetran's pricing page, October 2026.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-a-bill-is-worked-out">How a bill is worked out<a href="https://olake.io/compare/what-is-fivetran/#how-a-bill-is-worked-out" class="hash-link" aria-label="Direct link to How a bill is worked out" title="Direct link to How a bill is worked out" translate="no">​</a></h3>
<p>The table prints one formula, and it's simple enough. Monthly spend for a connection is the base spend, plus your MAR above the threshold, times the incremental spend per million MAR. Partial millions are prorated, and each connection is priced on its own curve.</p>
<p>For one Standard connection, the table's tiers are:</p>
<ul>
<li class="">Up to 1 million MAR: $5 base, plus $495 per million.</li>
<li class="">From 1 million MAR: $500 base, plus $170 per extra million.</li>
<li class="">From 4 million MAR: $1,010 base, plus $58 per extra million.</li>
<li class="">From 16 million MAR: $19.70 per extra million.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://olake.io/img/blog/2026/10/fivetran-service-consumption-table-connections.webp" alt="Fivetran Service Consumption Table with incremental spend per million MAR and base spend for Standard, Enterprise and Business Critical connections" width="1600" height="1103" class="img_ev3q"></p>
<p><em>Fivetran's Service Consumption Table, October 2026.</em></p>
<p>Let's put numbers on it. Here are three Standard-plan examples, with the arithmetic ours, from the rates in the screenshot. They are illustrations at list price, not quotes.</p>
<table><thead><tr><th>One connection, one month</th><th>Calculation</th><th>List price</th></tr></thead><tbody><tr><td>100,000 MAR</td><td>$5 + 0.1 x $495</td><td>$54.50</td></tr><tr><td>1 million MAR</td><td>$5 + 1 x $495</td><td>$500</td></tr><tr><td>5 million MAR</td><td>$1,010 + 1 x $58</td><td>$1,068</td></tr></tbody></table>
<p>Sources: <a href="https://www.fivetran.com/legal/service-consumption-table" target="_blank" rel="noopener noreferrer" class="">Fivetran Service Consumption Table</a>, version 10, with the arithmetic ours. Checked October 2026.</p>
<p>The orders table above is far too small to bill like this, so take a separate, made-up workload. One connection has 109,000 distinct rows inserted, updated or deleted in a month, with no discount and no free re-syncs involved.</p>
<p>On Standard that is $5 + 0.109 x $495, or about $59 (the exact figure is $58.955). On Enterprise, at $661.67 per million, it is $5 + 0.109 x $661.67, or about $77.</p>
<p>Rates fall as volume grows, so cost per row drops with size. But each connection has its own curve, and you can't pool MAR across connections for a better rate.</p>
<p>Now two more made-up setups with the same 4 million changed rows in total. One connection costs $1,010. Four connections with 1 million MAR each cost 4 x $500, or $2,000.</p>
<p>There's more fine print: annual contracts, pay-as-you-go and the 2025 and 2026 billing changes each have dated rules.</p>
<p>Your warehouse also sends its own invoice. Fivetran's destination docs say your provider may charge for the compute used when Fivetran loads data, and that sync frequency and data volume drive that cost.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="limits-to-know-before-you-buy">Limits to know before you buy<a href="https://olake.io/compare/what-is-fivetran/#limits-to-know-before-you-buy" class="hash-link" aria-label="Direct link to Limits to know before you buy" title="Direct link to Limits to know before you buy" translate="no">​</a></h2>
<ul>
<li class=""><strong>The bill depends on your change rates.</strong> The rates are published, but the meter counts distinct rows changed, per connection, so you need to know those rates first. The pricing page offers a pricing estimator, which we did not use, and your order form is what binds you.</li>
<li class=""><strong>Re-copies cost time.</strong> For SQL databases, the docs name schema changes as the most common trigger for an automatic full table re-sync. An expired change log means a full source re-sync.</li>
<li class=""><strong>No open source or self-run version.</strong> We found no published source licence. Even the Hybrid model is described as a Fivetran managed service.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-practitioners-say">What practitioners say<a href="https://olake.io/compare/what-is-fivetran/#what-practitioners-say" class="hash-link" aria-label="Direct link to What practitioners say" title="Direct link to What practitioners say" translate="no">​</a></h2>
<p>These are short quotes from public pages, opened on October 1 and 7, 2026. Each is one person's view, and a few quotes can't tell you how common any of these experiences are. We cite none from Fivetran's own customer pages.</p>
<ul>
<li class=""><strong>Cost.</strong> A commenter on Hacker News, in the thread <a href="https://news.ycombinator.com/item?id=45573187" target="_blank" rel="noopener noreferrer" class="">"A16Z-backed data firms Fivetran, dbt Labs to merge in all-stock deal"</a> (October 2025), wrote "Fivetran is convenient but absurdly expensive."</li>
<li class=""><strong>Sync problems.</strong> A former user wrote in the Hacker News thread <a href="https://news.ycombinator.com/item?id=43863587" target="_blank" rel="noopener noreferrer" class="">"Fivetran to acquire Census"</a> (May 2025) of "regular (probably once every couple of months) issues with our ETL getting out of sync". The same comment says Fivetran ran the full re-syncs for no charge.</li>
<li class=""><strong>Support.</strong> A <a href="https://www.peerspot.com/products/fivetran-reviews" target="_blank" rel="noopener noreferrer" class="">PeerSpot</a> reviewer in November 2024 wrote "Vendor support is also slow to respond".</li>
</ul>
<p>One gap: we found no public user threads on its Iceberg lake destination, so we have no peer view on it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="who-fivetran-suits-and-who-should-look-elsewhere">Who Fivetran suits, and who should look elsewhere<a href="https://olake.io/compare/what-is-fivetran/#who-fivetran-suits-and-who-should-look-elsewhere" class="hash-link" aria-label="Direct link to Who Fivetran suits, and who should look elsewhere" title="Direct link to Who Fivetran suits, and who should look elsewhere" translate="no">​</a></h2>
<p>So, should you pick it?</p>
<p>Fivetran is a reasonable choice when you have many SaaS and database sources and want someone else to run the connectors, and you have a budget for usage-based billing. That bill can swing with your change rates. Its pages also list things some other tools do not: the compliance items on its security page, the Oracle and SAP connectors, or one vendor for loading, dbt and reverse ETL. We did not audit those claims.</p>
<p>Look elsewhere if you need a fixed monthly bill, want open source code, or need a destination Fivetran doesn't list. For a lake, look elsewhere if your other tools need to write to the tables Fivetran manages. <a class="" href="https://olake.io/docs/">OLake Go</a> writes Iceberg or Parquet to storage you choose, and several query engines read its tables (see the <a class="" href="https://olake.io/docs/understanding/compatibility-engines/">engine compatibility page</a>).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="test-it-against-your-own-needs">Test it against your own needs<a href="https://olake.io/compare/what-is-fivetran/#test-it-against-your-own-needs" class="hash-link" aria-label="Direct link to Test it against your own needs" title="Direct link to Test it against your own needs" translate="no">​</a></h3>
<p>A trial or a quote call is the best check. Put these questions to Fivetran, and write down the answers.</p>
<ul>
<li class=""><strong>Capture method.</strong> Which method does it use for each of your databases, and what must you switch on at the source?</li>
<li class=""><strong>Recovery time.</strong> How long would a full re-sync of your largest table take, and what does it do to your source database?</li>
<li class=""><strong>Freshness.</strong> A sync interval isn't a delivery promise, so ask how Fivetran measures the gap between a source change and a row you can query. The pricing page ties 1-minute syncs to Enterprise.</li>
<li class=""><strong>Usage quote.</strong> Work out monthly active rows per connection from your own change rates, price them with the Service Consumption Table, and ask Fivetran to check the result.</li>
<li class=""><strong>Lake rules.</strong> Run the lake table above past your query engine and transformation tool.</li>
<li class=""><strong>Support.</strong> Which response times apply to your plan? One reviewer above found it slow, and we did not test support.</li>
<li class=""><strong>Where it runs.</strong> Do rules force your data to stay in your network? Then Hybrid deployment is the one to look at.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fivetran-against-five-other-options">Fivetran against five other options<a href="https://olake.io/compare/what-is-fivetran/#fivetran-against-five-other-options" class="hash-link" aria-label="Direct link to Fivetran against five other options" title="Direct link to Fivetran against five other options" translate="no">​</a></h3>
<p>Maybe Fivetran isn't your tool. The table sets it beside five common options on one axis, how each bills, using each vendor's own pricing page as of September 30, 2026. For a fuller comparison, see the head-to-head posts below.</p>
<table><thead><tr><th>Option</th><th>How it bills</th><th>Source</th></tr></thead><tbody><tr><td>Airbyte</td><td>Core is open source and self-managed, "always free" (you pay for servers and staff). Cloud bills in credits</td><td><a href="https://airbyte.com/pricing" target="_blank" rel="noopener noreferrer" class="">airbyte.com/pricing</a></td></tr><tr><td>Hevo</td><td>Events: each record inserted, updated or deleted in the destination is 1 event. Free plan up to 1 million events a month</td><td><a href="https://hevodata.com/pricing/" target="_blank" rel="noopener noreferrer" class="">hevodata.com/pricing</a></td></tr><tr><td><img src="https://olake.io/img/logo/olake-blue.svg" alt="" height="20" style="vertical-align:middle;margin-right:6px">OLake Go</td><td>No licence fee: open source under Apache 2.0. You pay for your own servers and storage</td><td><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="">github.com/datazip-inc/olake</a></td></tr><tr><td>Matillion</td><td>Credits by task hour, not rows. Dollar prices not published</td><td><a href="https://www.matillion.com/pricing" target="_blank" rel="noopener noreferrer" class="">matillion.com/pricing</a></td></tr><tr><td>Estuary Flow</td><td>$0.50 per GB moved, plus connector instances</td><td><a href="https://estuary.dev/pricing/" target="_blank" rel="noopener noreferrer" class="">estuary.dev/pricing</a></td></tr></tbody></table>
<p>Debezium, an open source change data capture project under the Apache License 2.0, has no vendor price, and the real cost is the servers and staff you run it with, per its <a href="https://debezium.io/license/" target="_blank" rel="noopener noreferrer" class="">license page</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://olake.io/compare/what-is-fivetran/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>By its own description, Fivetran is a managed copy service, with dbt, reverse ETL and an Iceberg lake destination around it. Before you sign, run the checklist above against your largest database table and your lake tools. Then get one quote from another option, so you have a price to compare.</p>
<p>Want to check what you picked up? Try this quick quiz.</p>
<section class="root_PuUS" aria-labelledby="_R_t5qfdbih_-h"><header><h3 id="_R_t5qfdbih_-h" class="title_QNC9" tabindex="-1">Test your Fivetran basics</h3></header><div class="progress_EyIk" role="progressbar" aria-valuemin="1" aria-valuemax="5" aria-valuenow="1" aria-label="Quiz progress"><span style="width:0%"></span></div><p class="count_OugS">Question <!-- -->1<!-- --> of <!-- -->5</p><p id="_R_t5qfdbih_-q" class="question_IKMS">In plain words, what does Fivetran do for you?</p><div role="radiogroup" aria-labelledby="_R_t5qfdbih_-q" class="options_xbjx"><button type="button" role="radio" aria-checked="false" tabindex="0" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">A</span><span class="optLabel_qDTb">It builds your dashboards and reports</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">B</span><span class="optLabel_qDTb">It stores your only copy of the data for safekeeping</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">C</span><span class="optLabel_qDTb">It copies data from your apps and databases into a warehouse or lake and keeps it fresh</span></button><button type="button" role="radio" aria-checked="false" tabindex="-1" class="option_bPD6"><span class="chip_dE9N" aria-hidden="true">D</span><span class="optLabel_qDTb">It cleans and models the data so your team never has to write SQL</span></button></div><div class="actions_XZHX"><button type="button" class="primary_KVNI" disabled="">Next</button></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faqs">FAQs<a href="https://olake.io/compare/what-is-fivetran/#faqs" class="hash-link" aria-label="Direct link to FAQs" title="Direct link to FAQs" translate="no">​</a></h2>
<div class="olake-faq"><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q1. What is Fivetran in simple words?</span></summary><div class="olake-faq__answer">Per Fivetran, it is a managed service that copies data from apps, databases, files and event streams into a data warehouse or lake, and keeps it current. You choose a source and a destination, and Fivetran runs the connector. The transformations then run in your destination, using pre-built data models or dbt.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q2. Is Fivetran an ETL or an ELT tool?</span></summary><div class="olake-faq__answer">ELT. Fivetran's transformations docs say it uses the ELT model, so your raw data is always available alongside your transformed data.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q3. Is Fivetran free?</span></summary><div class="olake-faq__answer">Partly. There's a Free plan, and per Fivetran's pricing page it covers up to 500,000 monthly active rows for connections, 3,500 for activations and 5,000 model runs a month. Paid plans bill on usage, with rates in the Service Consumption Table, for example $495 per million MAR on Standard for the first million. Because the bill follows monthly active rows, estimate yours before you sign.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q4. How many connectors does Fivetran have?</span></summary><div class="olake-faq__answer">The connector directory says 750+ sources, and the connectors docs and pricing page say 700+. Quote the page you used. The 200+ destinations in the directory are activation targets, not warehouses or lakes.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q5. Does Fivetran support change data capture?</span></summary><div class="olake-faq__answer">Per its docs, yes, for many databases. They list native routes such as the MySQL binary log, PostgreSQL logical replication, MongoDB change streams and SQL Server Change Data Capture, plus its own Teleport Sync. Its High-Volume Agent connectors cover Db2 for i, Oracle, SQL Server and SAP.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q6. Did Fivetran merge with dbt Labs?</span></summary><div class="olake-faq__answer">Yes. Fivetran announced the completion of the merger on June 1, 2026, and the combined company initially operates as Fivetran + dbt Labs. The all-stock deal was first announced on October 13, 2025.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q7. Is Fivetran open source?</span></summary><div class="olake-faq__answer">We found no published source licence for the core platform, so we treat it as closed source. Hybrid deployment lets data processing stay in your own network, but the docs describe it as a Fivetran managed service.</div></details><details class="alert olake-faq__item"><summary><span class="olake-faq__question">Q8. Can Fivetran write Apache Iceberg tables?</span></summary><div class="olake-faq__answer">Yes, through Managed Data Lake Service on Amazon S3, Azure Data Lake Storage or Google Cloud Storage. Fivetran always creates Iceberg metadata for these tables. The docs say it does not support Iceberg position deletes and that you should not modify the tables from external catalogs, and its lake page does not mention compaction, so ask Fivetran about it.</div></details></div>
<aside class="not-prose my-10 rounded-[16px] border border-solid border-olake-line bg-olake-surface p-[24px] lg:p-[32px]"><p class="m-0 text-[22px] leading-[1.2] tracking-[-0.01em] text-olake-ink lg:text-[26px]">OLake Go</p><p class="m-0 mt-[10px] max-w-[620px] text-[15px] leading-[1.6] text-olake-text-2">Replicate databases, Kafka, and S3 into Apache Iceberg with OLake Go, an open source EL engine built for Iceberg from the ground up.</p><div class="mt-[20px] flex flex-wrap gap-[10px]"><a href="https://olake.io/contact/" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-blue-ring bg-olake-blue text-olake-on-blue! hover:border-olake-blue-hover hover:bg-olake-blue-hover hover:text-white!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg>Signup</a><a href="https://olake.io/slack/" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M221.13,128A32,32,0,0,0,184,76.31V56a32,32,0,0,0-56-21.13A32,32,0,0,0,76.31,72H56a32,32,0,0,0-21.13,56A32,32,0,0,0,72,179.69V200a32,32,0,0,0,56,21.13A32,32,0,0,0,179.69,184H200a32,32,0,0,0,21.13-56ZM72,152a16,16,0,1,1-16-16H72Zm48,48a16,16,0,0,1-32,0V152a16,16,0,0,1,16-16h16Zm0-80H56a16,16,0,0,1,0-32h48a16,16,0,0,1,16,16Zm0-48H104a16,16,0,1,1,16-16Zm16-16a16,16,0,0,1,32,0v48a16,16,0,0,1-16,16H136Zm16,160a16,16,0,0,1-16-16V184h16a16,16,0,0,1,0,32Zm48-48H152a16,16,0,0,1-16-16V136h64a16,16,0,0,1,0,32Zm0-48H184V104a16,16,0,1,1,16,16Z"></path></svg>Join Slack</a><a href="https://github.com/datazip-inc/olake" target="_blank" rel="noopener noreferrer" class="lk-press inline-flex h-[38px] items-center justify-center gap-[8px] rounded-[8px] border border-solid px-[16px] text-[14px] no-underline transition-colors border-olake-btn-border bg-olake-surface text-olake-btn-secondary! hover:bg-olake-surface-alt hover:text-olake-ink!"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 256 256" aria-hidden="true" height="15" width="15" xmlns="http://www.w3.org/2000/svg"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>Explore OLake GitHub</a></div><p class="m-0 mt-[16px] text-[13px] text-olake-muted">Contact us at <strong class="font-medium text-olake-text-2">hello@olake.io</strong></p></aside>]]></content>
        <author>
            <name>Priyansh Khodiyar</name>
            <email>hello@olake.io</email>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="ETL" term="ETL"/>
        <category label="Data Pipeline Tools" term="Data Pipeline Tools"/>
        <category label="Data Ingestion" term="Data Ingestion"/>
        <category label="Alternatives" term="Alternatives"/>
    </entry>
</feed>