diff --git a/blog/2025-02-21-data-partitioning-in-s3.mdx b/blog/2025-02-21-data-partitioning-in-s3.mdx index 6c963992..07799a2a 100644 --- a/blog/2025-02-21-data-partitioning-in-s3.mdx +++ b/blog/2025-02-21-data-partitioning-in-s3.mdx @@ -174,7 +174,7 @@ Although if you look closely, you can implement both of the above partitioning s ## Explaining Our Current Approach with Examples -Let me walk you through our setup. In our [`streams.json`](/docs/core/configs/catalog/), we define partitioning on a per-stream basis. Here’s a simplified example: +Let me walk you through our setup. In our [`streams.json`](/docs/install/docker-cli#streams-config), we define partitioning on a per-stream basis. Here’s a simplified example: ```json diff --git a/blog/2025-03-18-json-vs-bson-vs-jsonb.mdx b/blog/2025-03-18-json-vs-bson-vs-jsonb.mdx index f307b4f9..692db2e7 100644 --- a/blog/2025-03-18-json-vs-bson-vs-jsonb.mdx +++ b/blog/2025-03-18-json-vs-bson-vs-jsonb.mdx @@ -37,7 +37,7 @@ While JSON is perfect for many use cases, it has limitations: **BSON** (Binary JSON) is a binary-encoded serialization of JSON-like documents, originally created for MongoDB. BSON extends JSON's capabilities by adding support for more complex data types and structures. #### Why BSON Exists -As [MongoDB](/docs/connectors/mongodb/setup/local/) began to rise in popularity as a NoSQL document store, the need for a more efficient, flexible format than plain JSON became apparent. BSON was developed to: +As [MongoDB](/docs/connectors/mongodb/) began to rise in popularity as a NoSQL document store, the need for a more efficient, flexible format than plain JSON became apparent. BSON was developed to: - **Handle Complex Data Types**: BSON supports more than just strings and numbers. It can store native types like dates, binary data, and embedded arrays or objects efficiently. - **Optimize for Database Operations**: BSON is designed to be lightweight but still allow for fast queries and indexing inside a database like MongoDB. - **Better for Large-Scale Data**: BSON was created to offer faster data reads/writes and a more compact size when dealing with large documents. diff --git a/blog/2025-04-23-how-to-set-up-postgresql-cdc-on-aws-rds.mdx b/blog/2025-04-23-how-to-set-up-postgresql-cdc-on-aws-rds.mdx index aec76f51..f0b3a2f8 100644 --- a/blog/2025-04-23-how-to-set-up-postgresql-cdc-on-aws-rds.mdx +++ b/blog/2025-04-23-how-to-set-up-postgresql-cdc-on-aws-rds.mdx @@ -325,7 +325,7 @@ This setup can be used for other downstream processing as well, example PG --> D answer:

Yes. Aurora PostgreSQL supports CDC through PostgreSQL logical decoding using the native pgoutput plugin, and OLake Go has a dedicated Aurora PostgreSQL setup guide.

Logical replication on Aurora is enabled through the cluster parameter group (by setting rds.logical_replication = 1) rather than an instance parameter group, and changes are streamed via pgoutput with a PostgreSQL publication.

-

Note: The configuration differs from RDS PostgreSQL in a few areas. Aurora uses a cluster parameter group, requires a writer-node reboot to apply the change, and replication slot behavior can differ in a multi-AZ cluster. Follow OLake's Aurora PostgreSQL setup guide rather than the standard RDS PostgreSQL guide to avoid misconfiguration.

+

Note: The configuration differs from RDS PostgreSQL in a few areas. Aurora uses a cluster parameter group, requires a writer-node reboot to apply the change, and replication slot behavior can differ in a multi-AZ cluster. Follow OLake's Aurora PostgreSQL setup guide rather than the standard RDS PostgreSQL guide to avoid misconfiguration.

}, ]} /> diff --git a/blog/2025-05-08-olake-airflow-on-ec2.mdx b/blog/2025-05-08-olake-airflow-on-ec2.mdx index 3aaad053..5901f37f 100644 --- a/blog/2025-05-08-olake-airflow-on-ec2.mdx +++ b/blog/2025-05-08-olake-airflow-on-ec2.mdx @@ -176,7 +176,7 @@ Before deploying the DAG, ensure the following are in place: * **S3 Bucket (`S3_BUCKET_NAME` in the DAG):** Create an S3 bucket where Olake Go's configuration files and persistent state file will be stored. * **S3 Prefix for Configurations (`S3_PREFIX` in the DAG):** Decide on a "folder" (S3 prefix) within your bucket where your Olake Go configuration files will reside (e.g., `olake/projectA/configs/`). -* **Upload Olake Go Configuration Files:** Before running the DAG, you must upload your Olake Go `source.json`, `streams.json`, and `destination.json` files to the S3 bucket under the prefix you defined. The DAG's SSH script will sync these files to the EC2 instance. Please visit[ OLake Docs](/docs) website to learn how the[ source](/docs/connectors/overview) and[ destinations](/docs/writers/iceberg/catalog/rest) can be set up. +* **Upload Olake Go Configuration Files:** Before running the DAG, you must upload your Olake Go `source.json`, `streams.json`, and `destination.json` files to the S3 bucket under the prefix you defined. The DAG's SSH script will sync these files to the EC2 instance. Please visit[ OLake Docs](/docs) website to learn how the[ source] and[ destinations](/docs/writers/iceberg/catalog/rest) can be set up. We need to generate `streams.json` beforehand using the OLake Go `discover` command against your source database. * Streams Generation Guides: diff --git a/blog/2025-05-08-olake-iceberg-athena.mdx b/blog/2025-05-08-olake-iceberg-athena.mdx index f155be2e..252fbb74 100644 --- a/blog/2025-05-08-olake-iceberg-athena.mdx +++ b/blog/2025-05-08-olake-iceberg-athena.mdx @@ -132,7 +132,7 @@ You’ll need two configuration files - [`destination.json`](/docs/writers/iceberg/catalog/glue) file with your Writer ([Apache Iceberg](/docs/writers/iceberg/catalog/rest)) connection details. -You can read [here](/docs/connectors/postgres/setup/local) for detailed version OLake Configuration for Postgres +You can read [here](/docs/connectors/postgres/) for detailed version OLake Configuration for Postgres ### 2.4 Discover Run the [Discover](/docs/connectors/postgres) command to generate a streams.json file, which contains the list of available data streams from your source database. You can refer to the official OLake documentation for complete documentation diff --git a/blog/2025-05-08-olake-iceberg-trino.mdx b/blog/2025-05-08-olake-iceberg-trino.mdx index 7d7118a1..61da6320 100644 --- a/blog/2025-05-08-olake-iceberg-trino.mdx +++ b/blog/2025-05-08-olake-iceberg-trino.mdx @@ -147,7 +147,7 @@ You’ll need two configuration files - [destination.json](/docs/writers/iceberg/catalog/glue) file with your writer ([Apache Iceberg](/docs/writers/iceberg/catalog/rest)) connection details -You can read here for detailed version [OLake Configuration](/docs/connectors/postgres/setup/local) +You can read here for detailed version [OLake Configuration](/docs/connectors/postgres/) ### 4 Discover Run the [Discover](/docs/connectors/postgres) command to generate a streams.json file, which contains the list of available data streams from your source database. You can refer to the official OLake documentation for complete documentation diff --git a/blog/2025-05-28-olake-glue-snowflake.mdx b/blog/2025-05-28-olake-glue-snowflake.mdx index 1633e991..e9d10c47 100644 --- a/blog/2025-05-28-olake-glue-snowflake.mdx +++ b/blog/2025-05-28-olake-glue-snowflake.mdx @@ -141,7 +141,7 @@ You’ll need two configuration files * [source.json](/docs/connectors/postgres#configuration) file with your database connection details * [destination.json](/docs/writers/iceberg/catalog/glue) file with your Writer ([Apache Iceberg](/docs/writers/iceberg/catalog/rest)) connection details -You can read here for detailed version[ Olake Configuration](/docs/connectors/postgres/setup/local) +You can read here for detailed version[ Olake Configuration](/docs/connectors/postgres/) **2.4 Run the[ Discover](/docs/connectors/postgres) command** to generate a `streams.json` file, which contains the list of available data streams from your source database. You can refer to the official[ OLake documentation](/docs) for complete documentation diff --git a/blog/2025-09-04-creating-job-olake-docker-cli.mdx b/blog/2025-09-04-creating-job-olake-docker-cli.mdx index 72f8684a..579c60db 100644 --- a/blog/2025-09-04-creating-job-olake-docker-cli.mdx +++ b/blog/2025-09-04-creating-job-olake-docker-cli.mdx @@ -52,7 +52,7 @@ Name it clearly, fill the Postgres endpoint config, and hit **Test Connection**. > 📝 **Planning for CDC?** > Make sure a **replication slot** exists in Postgres. -> See: [Replication Slot Guide](/docs/connectors/postgres/setup/generic). +> See: [Replication Slot Guide](/docs/connectors/postgres/). ### 3) Configure the Destination (Iceberg + Glue) @@ -206,7 +206,7 @@ We'll put everything under `/path/to/config/`. ``` > 📝 If you plan to run CDC, ensure a Postgres **replication slot** exists. -> See: [Replication Slot Guide](/docs/connectors/postgres/setup/generic). +> See: [Replication Slot Guide](/docs/connectors/postgres/). **Destination — `destination.json`** diff --git a/blog/2025-09-07-how-to-set-up-postgres-apache-iceberg.mdx b/blog/2025-09-07-how-to-set-up-postgres-apache-iceberg.mdx index da749c34..09429ce2 100644 --- a/blog/2025-09-07-how-to-set-up-postgres-apache-iceberg.mdx +++ b/blog/2025-09-07-how-to-set-up-postgres-apache-iceberg.mdx @@ -145,7 +145,7 @@ curl -sSL https://raw.githubusercontent.com/datazip-inc/olake-ui/master/docker-c - Access OLake UI at: http://localhost:8000 - Default login credentials: admin / password -- Complete setup documentation: [OLake UI Getting Started Guide](/docs/getting-started/olake-ui) +- Complete setup documentation: [OLake UI Getting Started Guide](/docs/install/olake-ui/) **Alternative**: OLake Go also provides a configurable CLI for advanced users who prefer command-line operations. CLI documentation is available at: [OLake CLI Guide](/docs/install/docker-cli). diff --git a/blog/2025-11-03-olake-bauplan.mdx b/blog/2025-11-03-olake-bauplan.mdx index 26aca6bb..c150d5f3 100644 --- a/blog/2025-11-03-olake-bauplan.mdx +++ b/blog/2025-11-03-olake-bauplan.mdx @@ -70,7 +70,7 @@ Ready to build this yourself? Here's how to set up the complete stack. **Optional: Need a Test Postgres Database?** -If you don't have your own Postgres database available, you can easily spin up a local Postgres instance with sample data using Docker. Follow the [Setup Postgres via Docker Compose guide](/docs/connectors/postgres/setup/local/) to get started with a pre-configured database for testing. +If you don't have your own Postgres database available, you can easily spin up a local Postgres instance with sample data using Docker. Follow the Setup Postgres via Docker Compose guide to get started with a pre-configured database for testing. **Step 1: Set up Lakekeeper** diff --git a/blog/2026-01-25-ingesting-files-from-s3-with-olake-turn-buckets-into-reliable-streams.mdx b/blog/2026-01-25-ingesting-files-from-s3-with-olake-turn-buckets-into-reliable-streams.mdx index f5c65a9f..0f6df3c2 100644 --- a/blog/2026-01-25-ingesting-files-from-s3-with-olake-turn-buckets-into-reliable-streams.mdx +++ b/blog/2026-01-25-ingesting-files-from-s3-with-olake-turn-buckets-into-reliable-streams.mdx @@ -511,7 +511,7 @@ If the issue isn't listed, post to the OLake Slack with connector config (omit s - Keep one logical dataset per top-level folder and avoid mixed formats in the same stream folder. - Add monitoring and alerting for failure spikes and long-running syncs. -And once you're happy with your S3 setup and you're ready to expand your pipeline to other sources, check out our [other connector guides here](/docs/connectors/overview/). +And once you're happy with your S3 setup and you're ready to expand your pipeline to other sources, check out our other connector guides here. ## FAQs @@ -68,7 +69,7 @@ Prices use different bases, so read the last column as a way in, not as a like-f | Tool | Job | Ongoing changes? | Where data lands | Entry price or free route (October 2026) | | --- | --- | --- | --- | --- | -| AWS DMS | Database to database | Yes, log-based; AWS gives no latency guarantee | Many AWS targets, S3 files; not Iceberg | dms.t3.medium [$0.0745 an hour](https://aws.amazon.com/dms/pricing/) | +| AWS DMS | Database to database | Yes, log-based; AWS gives no latency guarantee | Many AWS targets and S3; the [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) does not name Iceberg | dms.t3.medium [$0.0745 an hour](https://aws.amazon.com/dms/pricing/) | | Azure Database Migration Service | SQL Server to Azure | Online mode on some targets | Azure SQL targets | Current price not established ([classic page](https://azure.microsoft.com/en-us/pricing/details/database-migration/): Standard free) | | Google Database Migration Service | Database to Google Cloud | Yes, continuous mode | Cloud SQL, AlloyDB | Same-engine native moves: [no additional charge](https://cloud.google.com/database-migration/pricing) | | Oracle GoldenGate | Database to database, many targets | Yes, one-way or two-way | Many; Iceberg in a separate product | [GoldenGate Free](https://docs.oracle.com/en/middleware/goldengate/free/21/uggfe/what-is-goldengate-free.html) for Oracle databases of 20 GB or smaller | @@ -105,7 +106,7 @@ AWS says a DMS task can run a full load first and then capture changes. The docs **Where it falls short** - AWS's [best practices page](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html) 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. -- Apache Iceberg is not a target, though an AWS blog has DMS write S3 files and Glue jobs load them into Iceberg. +- The [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) names S3, Kinesis, Kafka and others, and not Apache Iceberg. An [AWS blog](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/) has DMS write S3 files and Glue jobs load them into Iceberg. **Ask AWS:** 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. @@ -254,7 +255,7 @@ AWS describes DataSync as a service to move data from on-premises storage, other - Job: Copies databases, S3 files and Kafka topics into Apache Iceberg or Parquet files, with change capture for four database families - Price: Open source under the Apache 2.0 licence ([GitHub repository](https://github.com/datazip-inc/olake)). There is no licence fee. You run it on your own infrastructure, so your cost is your own servers, storage and engineering time. -OLake Go reads [PostgreSQL](/docs/connectors/postgres/), [MySQL and MariaDB](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/) and [SQL Server](/docs/connectors/mssql/) with change capture after a full load, and reads Oracle and Db2 by full refresh or incremental copy. See the [connector overview](/docs/connectors/overview/) for every source. +OLake Go reads [PostgreSQL](/docs/connectors/postgres/), [MySQL and MariaDB](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/) and [SQL Server](/docs/connectors/mssql/) with change capture after a full load, and reads Oracle and Db2 by full refresh or incremental copy. It also reads S3 files and Kafka topics, with a single sync mode for Kafka (see the [Kafka docs](/docs/connectors/kafka/)). @@ -415,7 +416,7 @@ Skyvia is a cloud service from Devart, and its home page says "200+ Ready-to-Use | Your job | Look at first | Rule out when | | --- | --- | --- | -| Database into AWS | AWS DMS | You need Iceberg directly, or a guaranteed CDC delay (AWS DMS offers none) | +| Database into AWS | AWS DMS | You need Iceberg directly ([target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) does not name it), or a guaranteed CDC delay ([AWS says](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html) there is no SLA for CDC latency) | | SQL Server into Azure SQL | Azure DMS (portal service) | The source is not SQL Server, or the target is outside Azure SQL | | Database into Cloud SQL or AlloyDB | Google DMS | The destination is a lake or warehouse | | Oracle, mainframe or two-way copies | GoldenGate or Qlik Replicate | You need a public price (Qlik) or cannot license both ends (GoldenGate) | @@ -492,7 +493,7 @@ This is a made-up example. We have not run it on any of these tools. }, { question: "Can data migration tools write Apache Iceberg?", - 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." + answer: <>A few can, with limits. The AWS DMS target list, the Azure DMS overview and the Google DMS overview do not name 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. }, { question: "How do I check that migrated data is correct?", diff --git a/compare/2026-10-05-database-to-iceberg-without-kafka.mdx b/compare/2026-10-05-database-to-iceberg-without-kafka.mdx index 5e138052..5bdb8d44 100644 --- a/compare/2026-10-05-database-to-iceberg-without-kafka.mdx +++ b/compare/2026-10-05-database-to-iceberg-without-kafka.mdx @@ -5,6 +5,7 @@ description: "Database to Iceberg without Kafka: seven options compared from eac tags: [comparison, cdc, iceberg, data-ingestion, alternatives] authors: [priyansh] image: /img/blog/cover/database-to-iceberg-without-kafka-cover.webp +date: 2026-09-30 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/database-to-iceberg-without-kafka.json'; diff --git a/compare/2026-10-07-best-data-pipeline-tools.mdx b/compare/2026-10-07-best-data-pipeline-tools.mdx new file mode 100644 index 00000000..09c4b916 --- /dev/null +++ b/compare/2026-10-07-best-data-pipeline-tools.mdx @@ -0,0 +1,552 @@ +--- +slug: best-data-pipeline-tools +title: "Best Data Pipeline Tools in 2026, by Job" +description: "14 data pipeline tools sorted by job: ingest, stream, transform, schedule. Dated prices, honest limits and a table for building a pipeline from parts." +tags: [comparison, etl, data-pipeline-tools, data-ingestion, best-of] +authors: [priyansh] +image: /img/blog/cover/best-data-pipeline-tools-cover.webp +--- +import BlogCTA from '@site/src/components/BlogCTA'; +import quiz from '@site/src/data/quizzes/best-data-pipeline-tools.json' + +![Cover for best data pipeline tools showing sources flowing through pipeline tools into a warehouse or lake](/img/blog/cover/best-data-pipeline-tools-cover.webp) + + + +Short version: there's no single best data pipeline tool, because a pipeline has four jobs and most tools only do one. Fivetran, Airbyte, Hevo, OLake Go and Debezium load your data. Kafka and Flink handle streams, dbt reshapes data once it has landed, and Airflow, Dagster and Prefect run the steps in order. + +Matillion, AWS Glue and Azure Data Factory bundle several jobs inside one vendor's cloud, so pick one tool per job (or one bundle) and check how each one bills. + +- **Don't compare unlike tools.** Airflow won't copy your database, dbt doesn't load anything, and Kafka itself doesn't reshape warehouse tables. They sit side by side in a stack, not against each other. +- **Billing meters differ a lot.** Fivetran counts changed rows, Hevo counts events, Airbyte and Dagster count credits, dbt counts models built, and AWS Glue counts compute time. +- **Free isn't zero.** Most of the 14 tools have free software or a free plan, each with a ceiling, and open-source tools still cost servers and people. + + + +We checked prices on October 8, 2026 against each vendor's own pages. + +## So what is a "data pipeline tool", anyway? + +A data pipeline is a series of processing steps that prepare enterprise data for analysis, which is broad enough to cover almost anything. A pipeline has four jobs, and a tool built for one usually isn't built for the others. + +- **Ingest:** copy data from where it lives, such as a database or an app, to a new place. +- **Store:** keep it in a warehouse (a database built for reports) or a data lake (cheap file storage many tools can read). +- **Transform:** clean, join and reshape the data so people can use it. +- **Orchestrate:** run the other steps on a schedule, in the right order, and retry or alert when one fails. + +Reshape data before it lands and that's called extract, transform, load (ETL). Reshape it after and it's extract, load, transform (ELT). Streaming is a way of doing the first and third jobs: instead of moving data in batches every hour, a streaming tool handles each change as it happens. + +![One pipeline has four jobs: ingest, store, transform, and orchestrate, and most tools here do only one of them](/img/blog/2026/10/best-data-pipeline-tools-four-jobs.webp) + +A scheduler doesn't move or reshape a single row. It starts the other tools in the right order and alerts you when one fails. + +## How we picked + +We picked 14 tools that are actively maintained, publish documentation we could open, and between them cover all four jobs. We read each vendor's pricing and docs pages on October 8, 2026, and we did not run the other tools. This is a reading of vendor pages, not a lab test. + +Estuary, Stitch, Skyvia, Informatica, Talend and others are not on this list, and the order inside each group is not a ranking. + +## The 14 best data pipeline tools, at a glance + +| Tool | Main job | Open source? | What it bills, checked October 2026 | +| --- | --- | --- | --- | +| Fivetran | Ingest (managed) | No | Monthly active rows; free to 500,000; paid rates in its Service Consumption Table | +| Airbyte | Ingest | Core uses the Elastic License 2.0 | Credits; Cloud Standard $20 a month with 5 credits | +| Hevo | Ingest (managed) | No | Events; free to 1M a month; Starter $265 a month on annual billing | +| [OLake Go](/docs/) | Ingest (database changes into Iceberg or Parquet) | Yes, [Apache 2.0](https://github.com/datazip-inc/olake) | Open source; you run it on your own infrastructure ([install docs](/docs/install/olake-ui/)) | +| Debezium | Ingest (database changes) | Open source, per its docs | Free; you pay for servers and staff | +| Apache Kafka | Stream storage and transport | Open-source project | Free; managed Kafka is priced by each vendor | +| Apache Flink | Stream processing | Open-source project | Free; you pay for servers and staff | +| Matillion | Bundle: load, transform, schedule | No | Credits by task hour; dollar price not shown | +| AWS Glue | Bundle on AWS | No | Compute time, in data processing unit (DPU) hours; $0.44 or $0.308 per DPU-hour in US East (Ohio) | +| Azure Data Factory | Bundle on Azure | No | Activity runs plus integration runtime hours | +| dbt | Transform | Core is Apache 2.0 | Free seat; Starter $100 per user a month | +| Apache Airflow | Orchestrate | Open-source project | Free; you pay for servers and staff | +| Dagster | Orchestrate | Open-source project; Dagster+ is paid | Solo $10 a month, Starter $100 a month, plus credits | +| Prefect | Orchestrate | Open-source project; Prefect Cloud is paid | Free Hobby plan; Starter $100 a month | + +Sources: Airbyte release notes, Hevo pricing, AWS Glue price list, dbt pricing, Dagster pricing, Prefect pricing. Checked October 2026. + +"Not published" means the vendor's page doesn't show the number. + +## Ingestion tools: get your data into one place + +### 1. Fivetran: best for hands-off loading from many sources + +![Fivetran home page showing its headline and main navigation](/img/blog/2026/10/landing-fivetran.webp) + +*Fivetran home page, October 2026.* + +**At a glance** +- Price: Free up to 500,000 monthly active rows (MAR, the rows that change in a month); paid rates in its [Service Consumption Table](https://www.fivetran.com/legal/service-consumption-table), not on the pricing page. Standard starts at $495 per million MAR plus a $5 base per connection, list price before discounts (October 2026) + +Fivetran's pricing page lists 700+ connectors, 15-minute syncs on Standard and 1-minute syncs on Enterprise. Fivetran says it runs the pipeline for you, a claim we did not test. + +One 2026 change matters. Fivetran announced that its merger with dbt Labs closed on June 1, 2026, so a managed loader and a transform tool now share an owner. If you use both, ask whether pricing or packaging will change. + +**What's good** + +- The Free plan includes Standard plan features, with up to 500,000 monthly active rows free for connections, 3,500 for activations and 5,000 monthly model runs for transformations (pricing page, October 2026). Its claims that loading is fully managed and runs hands-off are the vendor's own, and we did not test them. +- Standard lists unlimited users, 15-minute syncs, 700+ fully managed connectors and a dbt Core integration. Enterprise adds 1-minute syncs, custom roles, SCIM and a Hybrid deployment option, and Business Critical adds customer-managed encryption keys and PCI DSS Level 1 certification (pricing page). +- For database sources, its docs say it captures changes with the source's native change data capture mechanism or a Fivetran proprietary method, depending on the database. They also say database connectors sync new and modified data every 15 minutes by default (Fivetran's database connector docs). +- Each connection is billed on its own volume curve, so the per-row rate falls as one connection grows. On Standard it goes from $495 per million rows at the start to $170 per million past 1M rows and $58 per million past 4M (Service Consumption Table, version V.10, effective February 1, 2026). +- Transformations get 5,000 model runs a month free, then $0.01 per run up to 30,000, $0.007 up to 100,000 and $0.002 beyond that (Service Consumption Table). + +**Where it falls short** + +- Paid list rates live in a separate table, and each connection has its own curve, so you need rows per connection to predict a bill. The table also says you cannot combine rows across connections to get a better rate. +- Our read: the $5 base per connection is the easiest line to miss (pricing page). By the consumption table formula, 20 connections of 2,000 rows each come to $119.80 a month (our arithmetic). +- Deleted rows also count as paid rows: the pricing page counts updates as modifications to existing rows in your destination, including deletes. +- Teleport Sync is its option when you cannot or do not want to give Fivetran access to your database's change logs. The docs say that if you update large portions of a table between syncs it may be unable to find the changes, and the connection then re-syncs the entire table (database connector docs). +- The pricing page calls Oracle and High-Volume Agent connectors "enterprise database connectors", and the Enterprise plan card lists them where Standard lists plain database connectors (pricing page). + +![Fivetran pricing page with Free, Standard, Enterprise and Business Critical plan cards, showing 500,000 free monthly active rows and 15-minute syncs on Standard](/img/blog/2026/10/fivetran-pricing-plans.webp) + +*Fivetran's pricing page, October 2026.* + +### 2. Airbyte: best for a long connector list with a free self-hosted core + +![Airbyte home page showing its headline and main navigation](/img/blog/2026/10/landing-airbyte.webp) + +*Airbyte home page, October 2026.* + +**At a glance** +- Price: Core is free; Cloud Standard $20 a month with 5 credits and $5 per extra credit; Plus from $189 for 40 credits ([Airbyte release notes](https://docs.airbyte.com/release_notes/cloud), September 15, 2026) + +Airbyte's docs say it has over 600 pre-built connectors, so check the current status of the connector you actually need. + +Its CDC (change data capture) docs describe log-based replication, but they also say syncs are scheduled and CDC sources aren't treated as infinite streams. + +**What's good** + +- Per its docs, you can self-host the free core or pay for the cloud, and build connectors with a no-code builder or a Python kit. We did not test how well any of these work. +- Plus runs from 40 credits for $189 ($4.75 a credit) up to 2,000 credits for $4,999, and overage credits fall from $5 to $2.50 on the top tier. All Plus plans include 15-minute syncs, two workspaces, single sign-on and premium support (release notes, September 15, 2026). +- Unused Cloud credits now roll over for 3 months, up from 2, and Cloud free trials last 14 days (release notes, September and October 2026). +- Its CDC docs list Postgres, MySQL, Microsoft SQL Server, MongoDB, Oracle, SAP HANA and IBM Db2 under current support. They name no plan or connector support level for Oracle, SAP HANA or Db2 (Airbyte's CDC docs). + +**Where it falls short** + +- It isn't a continuous streaming tool: CDC syncs are launched on a sync interval, and the CDC docs say "We do not treat CDC sources as infinite streaming sources." +- For most sources, CDC incremental sync works only for tables with primary keys, and a refresh is required after any new table or collection is added to a CDC connection (CDC docs). +- Changes made by TRUNCATE or ALTER won't appear in the logs, so they don't reach the destination (CDC docs). +- On Cloud Standard, scheduled or cron syncs can run at most every 60 minutes and an organization gets 1 workspace; Plus allows every 15 minutes (Airbyte's Cloud limits docs). SSO is no longer available on Standard, except for existing users who keep their plan (Airbyte's Cloud release notes). +- Standard got dearer in September 2026: the base price rose from $10 to $20 a month, free credits from 4 to 5 and extra credits from $2.50 to $5.00 (release notes). +- The core uses the Elastic License 2.0, and Airbyte's license FAQ says it stops you providing the products to others as a managed service. + +### 3. Hevo: best for small teams that want no-code pipelines into a warehouse + +![Hevo Data home page showing its headline and main navigation](/img/blog/2026/10/landing-hevo.webp) + +*Hevo Data home page, October 2026.* + +**At a glance** +- Price: Free up to 1M events a month (each insert, update or delete in the destination is one event); Starter $265 a month on annual billing, or $299 monthly, from 5M events (Hevo pricing page, October 2026) + +Hevo's [pricing page](https://hevodata.com/pricing/) lists 150+ connectors. Streaming pipelines show up on the custom Business Critical card, and its comparison table also lists them for Professional. + +**What's good** + +- Its free plan lets you try it with real data before you pay (pricing page). +- The Free plan is $0 forever with up to 1M events a month and up to 5 users. Starter adds up to 10 users, 150+ connectors, a dbt integration and SSH/SSL (pricing page, October 2026). +- Professional is $849 a month, or $750 on annual billing, from 20M events (pricing page). +- Its docs list the log read for each log-based source: BinLog for MySQL, logical replication for PostgreSQL, Streams for DynamoDB, Change Streams or OpLog for MongoDB, Change Tracking for SQL Server and Redo Logs for Oracle (Hevo's log-based pipelines docs). + +**Where it falls short** + +- Every update is an event, so busy tables eat a quota fast. The pricing page counts each insert, update or delete in the destination as one event. +- Usage above your plan's quota is on-demand and charged on top of the plan, and the page shows no rate for it (pricing page). +- Its docs say streaming pipelines cover those log-based sources except SQL Server and DynamoDB, and you must contact Hevo Sales to enable them (Hevo's log-based pipelines docs). +- The comparison table gives a 1-hour sync frequency on Free and Starter (pricing page). +- Its connector list is also smaller than Fivetran's or Airbyte's: Hevo lists 150+, Fivetran 700+ and Airbyte's docs over 600. +- The Free card says "Free forever for limited connectors", while all available connectors start at Starter (pricing page). + +![Hevo pricing page with four plan cards: Free at up to 1M events a month, Starter at $265, Professional at $750, and custom Business Critical](/img/blog/2026/10/best-data-pipeline-tools--hevo-pricing-plans.webp) + +*Hevo's pricing page, October 2026.* + +### 4. OLake Go: best for copying Postgres, MySQL, MongoDB or SQL Server into Iceberg + +OLake + +![OLake home page showing its headline and main navigation](/img/blog/2026/10/landing-olake.webp) + +*OLake home page, October 2026.* + +**At a glance** +- Price: Open source under [Apache 2.0](https://github.com/datazip-inc/olake); you run it on your own infrastructure with [Docker](/docs/install/docker-cli/), [Helm on Kubernetes](/docs/install/kubernetes/) or the [OLake UI](/docs/install/olake-ui/) + +OLake Go copies [PostgreSQL](/docs/connectors/postgres/), [MySQL and MariaDB](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/) and [SQL Server](/docs/connectors/mssql/) with a full load plus change data capture, and writes Apache Iceberg tables or Parquet files on storage you control. [Oracle](/docs/connectors/oracle/), [Db2](/docs/connectors/db2/), [S3](/docs/connectors/s3/) and [Kafka](/docs/connectors/kafka/) also work as sources, without database change capture. + +**What's good** + +- One tool does the first load and then the change capture, with Full Refresh, Full Refresh + Incremental, Full Refresh + CDC and CDC Only sync modes ([docs](/docs/)). +- It writes Iceberg tables to catalogs such as [AWS Glue](/docs/writers/iceberg/catalog/glue/), with eleven catalog types listed on the [catalog compatibility page](/docs/understanding/compatibility-catalogs/). +- Engines such as Athena, Spark, Flink and Trino can read the Iceberg tables it writes ([query engine compatibility](/docs/understanding/compatibility-engines/)). +- Syncs are stateful and resumable: after a crash, a network failure or a pause they resume from the last checkpoint instead of starting over ([docs](/docs/)). +- Parallel chunking splits large tables into chunks that are read in parallel, in the Full Refresh, Full Refresh + CDC and Full Refresh + Incremental modes ([docs](/docs/)). +- Schema discovery runs at the start of every sync, and a new source column is added to the Iceberg schema automatically ([schema evolution docs](/docs/features/schema/)). + +### 5. Debezium: best for engineers who need every database change as an event + +![Debezium home page showing its headline and main navigation](/img/blog/2026/10/landing-debezium.webp) + +*Debezium home page, October 2026.* + +**At a glance** +- Price: Free; you run it yourself; you pay for servers and staff + +Its FAQ says Debezium records all row-level changes committed to each database table, so applications can react to insert, update and delete events, though after a failure they can see an event more than once. The docs list eight main source connectors, including PostgreSQL, MySQL, MongoDB, SQL Server and Oracle. + +**What's good** + +- It's free, and its docs describe delay in the millisecond range for MySQL and PostgreSQL. That is the project's claim, not our measurement, so test it on your own load (Debezium's features page). +- The connector index lists eight main source connectors: MongoDB, MariaDB, MySQL, PostgreSQL, SQL Server, Oracle, Db2 and Cassandra. Seven more are marked incubating: Vitess, Spanner, Informix, CockroachDB, YashanDB, Ingres and Milvus (Debezium's connector index). +- Beyond Kafka Connect, the same docs list Debezium Server, a Debezium Operator, a Debezium Management Platform and guides for running on Kubernetes and OpenShift (connector index). +- The FAQ says all events within a topic are totally ordered, and that even if events are duplicated during failures the end result after applying them all stays the same (FAQ). +- The FAQ also says Debezium connectors do not store any information inside the upstream databases (FAQ). + +**Where it falls short** + +- It captures changes and nothing more. You still need a place to send them, a way to run it and someone to keep it healthy. +- The FAQ says consumers see every event exactly once only when systems run nominally or shut down gracefully; when things go wrong they can see events at least once, so the destination has to cope with repeats (FAQ). +- Running a connector may place additional load on the source database (FAQ). +- On MySQL, the FAQ says delete events can be missing when CASCADE DELETE statements are used, because those deletions are not part of the binlog (FAQ). +- On Amazon RDS for MySQL, log_bin is managed by AWS and off by default, and the FAQ's fix is to turn on read replicas or automated backups (FAQ). +- Incubating connectors are released for preview and are subject to changes that may not always be backward compatible (connector index). + +## Streaming tools: react to each change as it happens + +### 6. Apache Kafka: best for moving event streams between many systems + +![Apache Kafka home page showing its headline and main navigation](/img/blog/2026/10/landing-kafka.webp) + +*Apache Kafka home page, October 2026.* + +**At a glance** +- Price: Free; managed Kafka is priced by each vendor + +Kafka's own introduction calls it an event streaming platform that publishes, stores and processes streams of events. Its Kafka Connect part continuously imports and exports data from systems such as relational databases. + +**What's good** + +- It's free, and its docs say it stores streams of events durably, which we did not test. +- Events are not deleted after consumption, so a topic can be read as often as needed. How long they are kept is a per-topic setting (Kafka intro). +- Any consumer of a topic-partition reads that partition's events in the order they were written, and a common production setting is a replication factor of 3, meaning three copies of the data (Kafka intro). +- It can run on bare-metal hardware, virtual machines and containers, on-premises or in the cloud, and you can self-manage it or use fully managed services from a variety of vendors (Kafka intro). +- Its 4.2 design docs say it supports exactly-once delivery in Kafka Streams, and in the transactional producer paired with a read-committed consumer. The producer also has an idempotent delivery option, so resending does not create duplicate log entries (Kafka's design docs). + +**Where it falls short** + +- It's a platform you run, not a ready-made pipeline. Kafka itself doesn't reshape warehouse tables, and it needs connectors at both ends. +- The intro describes capture as something a connector does, for example a PostgreSQL connector capturing every change to a set of tables, not something the brokers do. It describes no Iceberg writer. +- The intro says the Kafka community provides hundreds of ready-to-use connectors, and the Apache project publishes no exact count (Kafka intro). +- Exactly-once is not the default: the 4.2 design docs say Kafka guarantees at-least-once delivery by default. + +### 7. Apache Flink: best for reshaping streams as they flow + +![Apache Flink home page showing its headline and main navigation](/img/blog/2026/10/landing-apache-flink.webp) + +*Apache Flink home page, October 2026.* + +**At a glance** +- Price: Free; you pay for servers and staff + +Flink's site describes it as "stateful computations over data streams", and it shows 2.3 as the current stable release. The Apache Iceberg docs say the Flink sink for Iceberg guarantees exactly-once semantics. + +**What's good** + +- Its site describes stateful computations on streams and, per the Iceberg docs, it can write batch and streaming data to Iceberg tables. We did not test either. +- The Flink home page lists low latency, high throughput and in-memory computing as features. +- The Iceberg docs say it supports UPSERT based on the primary key when writing to a v2 table (Iceberg Flink writes). +- The same docs say IcebergSink can run table maintenance after each commit: compacting small data files, expiring old snapshots and removing orphan files, so a separate maintenance job is not required (Iceberg Flink writes). + +**Where it falls short** + +- It's a framework you program and operate, and it's overkill for hourly batch jobs. +- Streaming jobs do not support INSERT OVERWRITE; overwrite works in batch jobs (Iceberg Flink writes). +- UPSERT needs the v2 table format and a primary key or identifier fields, and OVERWRITE and UPSERT cannot be enabled at the same time (Iceberg Flink writes). +- The Iceberg docs call the newer SinkV2-based IcebergSink "currently an experimental feature so use it with caution" (Iceberg Flink writes). +- Iceberg commits happen after a successful Flink checkpoint, in the notifyCheckpointComplete callback, so the job needs checkpointing set up (Iceberg Flink writes). + +## All-in-one cloud services: several jobs, one vendor + +### 8. Matillion: best for teams that load and transform inside a cloud warehouse + +![Matillion home page showing its headline and main navigation](/img/blog/2026/10/landing-matillion.webp) + +*Matillion home page, October 2026.* + +**At a glance** +- Price: Credits used by task hours; the pricing page shows no dollar price (Matillion pricing page, October 2026) + +Matillion's pricing page lists Developer, Teams and Scale editions. Its credit terms charge 1 credit per task hour for scheduling work and transformation 3 credits per task hour. + +Matillion's own comparison blog says Maia generates native SQL that runs inside Snowflake, Databricks or AWS Redshift. + +**What's good** + +- Matillion's pages describe one product for loading, transforming and scheduling, so there are fewer parts to join. We did not test it. +- Developer lists 1 developer user, unlimited projects, pre-built connectors, a low-code canvas with SQL/Python and a built-in Git repository. Teams adds 5 developer users, an audit log and a Service Level Agreement, and Scale adds custom SSO, hybrid cloud deployment, data lineage tracking and streaming change data capture (pricing page). +- Credits cover task hours and extra developer users, and the pricing FAQ says you can contract directly with Matillion or pay through your AWS, Azure or Snowflake account (pricing page). +- Task hours are charged only while a pipeline runs, in 2-second increments, and validation or sampling does not count towards them (credit terms). +- Log retention is 90 days on Developer and Teams and 180 days on Scale, with 365 days available (pricing page). +- Its streaming docs say streaming pipelines can adapt to source schema changes and propagate them to the destination, which they call "self-healing" pipelines (Maia's streaming docs). + +**Where it falls short** + +- No dollar price is shown, so ask for a quote before you plan around it. The credit terms state no price per credit, say the overage rate "will be listed on the Order Form", and call consumption rates "fixed across the customer base and non-negotiable" (credit terms). +- Streaming CDC is limited to five relational databases (Db2 for IBM i, SQL Server, MySQL, Oracle and PostgreSQL), sits on the Scale edition, and the docs say it is only available to customers on specific Maia plans (Maia's streaming docs). +- The streaming docs list Amazon S3, Azure Blob Storage, Google Cloud Storage and Snowflake as destinations and say change records are batched into Avro files. We found no Apache Iceberg destination in its docs. +- Extra developer users cost credits: the credit terms list 70 credits per Developer User a month. Customer support on the Developer edition is community support, with Standard on Teams (credit terms, pricing page). +- If a contracted term ends, the Pay-Go period cannot exceed 60 days, after which you lose access to all products unless a new term is signed, and Pay-Go includes no support (credit terms). +- Streaming schema changes are driven by data rather than DDL, so a change to a source table is not reflected in the target until the data changes. A column dropped at the source stays in the destination, with later values inserted as NULL (Maia's streaming docs). + +### 9. AWS Glue: best for teams that already write Spark jobs on AWS + +![AWS Glue home page showing its headline and main navigation](/img/blog/2026/10/landing-aws-glue.webp) + +*AWS Glue home page, October 2026.* + +**At a glance** +- Price: $0.44 per data processing unit (DPU) hour, a unit of compute, for ETL jobs, and $0.308 for Glue 6.0 and above, both in US East (Ohio) (AWS Glue [price list](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSGlue/current/us-east-2/index.json), October 2026) + +AWS lists Glue pricing per Region and bills by the second. Glue 6.0 charges $0.308 an hour per unit against $0.44 for Glue 5.1, per the price list above. + +Here's the catch: the Glue docs say jobs created without a version default to 5.1, the higher rate. + +**What's good** + +- AWS describes Glue as serverless, with a built-in data catalog and support for reading and writing Apache Iceberg tables. We did not test these. +- The docs call it a serverless data integration service with no infrastructure to manage, and say you can connect to more than 70 data sources (AWS Glue docs). +- Flex jobs for non-urgent work are $0.29 per DPU-hour in US East (Ohio) against $0.44 for standard ETL jobs, and $0.203 on Glue 6.0 and above (AWS price list). +- On the Data Catalog, the first million objects stored and the first million requests a month are free, and above that storage is $1.00 per 100,000 objects (pricing page). +- Glue 3.0 and later supports Iceberg: its docs say you can read and write Iceberg tables in Amazon S3 or work with them through the Data Catalog, and Glue 5.1 bundles Iceberg 1.10.0 (AWS Glue Iceberg docs). Catalog optimization of Iceberg tables is billed at $0.44 per DPU-hour (pricing page). + +**Where it falls short** + +- You write Spark code or compose jobs in Glue's visual editor, and it runs only on AWS (AWS Glue docs). +- Glue's own zero-ETL feature (copying without a separate load step) lists Oracle, SQL Server, MySQL and PostgreSQL as self-managed sources, and the docs say those can replicate only to an Amazon Redshift data warehouse ([zero-ETL docs](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html)). +- Zero-ETL has no extra integration fee, but you pay for the resources behind it. The price list shows $1.50 per GB for application data ingestion and $0.44 per DPU-hour of compute for data written to S3 (price list). +- The Iceberg page says "Update is not supported for Iceberg tables" and does not mention MERGE INTO, so test the exact operation on your Glue version (AWS Glue Iceberg docs). + +### 10. Azure Data Factory: best for Microsoft-centred batch pipelines + +![Azure Data Factory home page showing its headline and main navigation](/img/blog/2026/10/landing-azure-data-factory.webp) + +*Azure Data Factory home page, October 2026.* + +**At a glance** +- Price: Per activity run plus integration runtime hours; Microsoft's retail price feed shows $1.00 per 1,000 activity runs and $0.25 per data integration unit (DIU) hour of data movement in US East ([Azure Retail Prices feed](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20'Azure%20Data%20Factory%20v2'%20and%20armRegionName%20eq%20'eastus'), October 2026) + +Microsoft's pricing page says you pay for running pipelines by activity run and for execution by integration runtime hours. The page loads rates dynamically, so the run and data movement figures above come from the Azure Retail Prices feed, and the data flow rates below come from the page's own tab table. + +One more thing: Microsoft's docs say that if you're new to data integration you should start with Fabric Data Factory, which it calls the next generation. + +**What's good** + +- Microsoft's docs call it a managed service for ETL, ELT and data integration projects, so loading and running pipelines sit in one place. +- The pricing page describes the integration runtime as "serverless in Azure and self-hosted in hybrid scenarios", and charges are prorated by the minute and rounded up, so 2 minutes 20 seconds bills as 3 minutes (pricing page). +- Data flows on General Purpose compute list $0.274 per vCore-hour pay as you go, $0.205 with a 1-year reservation (about 25% savings) and $0.178 with a 3-year reservation (about 35%) (pricing page tab table). +- It has a change data capture resource that can run continuously. Native CDC in mapping data flows needs no timestamp or ID columns and lists SAP CDC, Azure SQL Database, SQL Server, Azure SQL Managed Instance, Azure Cosmos DB and Snowflake as connectors (Azure Data Factory's CDC docs). +- The Copy activity can write Iceberg format through an IcebergSink (Azure Data Factory's Iceberg format docs). + +**Where it falls short** + +- Pipelines are batch only. The CDC docs say "Pipelines in ADF are batch only, but the CDC resource can run continuously." +- The Iceberg sink supports only Azure Data Lake Storage Gen2, and the page names no Iceberg catalog such as Glue, REST, Polaris or Unity (Azure Data Factory's Iceberg format docs). +- The self-hosted runtime runs only on Windows (Azure Data Factory's integration runtime docs). +- Native log-based CDC for PostgreSQL, MySQL, MongoDB or Oracle is not on the CDC page's connector list, and auto incremental extraction from databases needs an incremental column to find changes (CDC docs). +- Data flows start at a minimum cluster of 8 vCores and also bill for the managed disk and blob storage they need (pricing page). +- Copying data out of an Azure datacenter adds a separate outbound data transfer line item (pricing page). + +## Transformation: reshape data once it has landed + +### 11. dbt: best for SQL-first teams that model data in a warehouse + +![dbt home page showing its headline and main navigation](/img/blog/2026/10/landing-dbt.webp) + +*dbt home page, October 2026.* + +**At a glance** +- Price: Developer plan free (1 seat, 3,000 models built a month); Starter $100 per user a month (5 developer seats, 15,000 models); Enterprise custom (dbt pricing page, October 2026) + +dbt's docs say it transforms data that is already in your warehouse using SQL select statements, and that it works alongside your ingestion tools. It doesn't extract or load data. The free dbt Core code is under the Apache 2.0 licence. + +![dbt pricing page with four plan cards: free Developer, Starter at $100 per user a month, Enterprise and Enterprise+ on custom pricing](/img/blog/2026/10/best-data-pipeline-tools--dbt-pricing-plans.webp) + +*dbt's pricing page, October 2026.* + +**What's good** + +- dbt's docs say SQL select statements are enough to define models, and the free plan or open-source core lets you try it before paying. +- The docs say dbt is free to use, with some capabilities unlocked when you sign in with any dbt platform account, and that dbt OSS is the free, fully open-source (Apache 2.0) distribution of its Rust-based engine (dbt docs). +- Starter at $100 per user a month includes five developer seats, 15,000 successful models built a month and 5,000 queried metrics. Enterprise raises that to 100,000 models, 20,000 queried metrics and 30 projects ([pricing page](https://www.getdbt.com/pricing)). +- The June 1, 2026 merger press release lists dbt State (preview), a caching layer that only builds what has changed, and dbt Wizard (beta) for model authoring and debugging. The 30% infrastructure saving it claims for dbt State is the vendor's own figure (the Fivetran and dbt Labs merger press release). + +**Where it falls short** + +- Nothing happens until data is already in the warehouse, so you have to add a loader. The docs say dbt works alongside your ingestion tools. +- The free Developer plan allows only one seat, one project and 3,000 successful models built a month (pricing page). +- Billing counts models that build successfully even if the overall run later fails: a job of 100 models that fails after 51 are built counts as 51 (dbt's billing docs). +- The dbt State add-on is priced on its own, at $0.094 per daily active target table pay as you go (pricing page). +- Starter allows 1 project, against 30 on Enterprise (pricing page). + +## Scheduling tools: make the steps run in order + +### 12. Apache Airflow: best for teams that want a code-first scheduler + +![Apache Airflow home page showing its headline and main navigation](/img/blog/2026/10/landing-apache-airflow.webp) + +*Apache Airflow home page, October 2026.* + +**At a glance** +- Price: Free; you pay for servers and staff, or for a managed host + +The Airflow docs call it a platform for developing, scheduling and monitoring workflows, such as batch-oriented data pipelines. The docs showed version 3.3.2 on October 8, 2026. + +**What's good** + +- It's free, and workflows are defined as code, so you control every step. +- The docs say it runs from a single process on your laptop to a distributed system, you can backfill Dag runs to process historical data, and you can rerun only failed tasks to minimize cost and time (Airflow docs). +- Each Dag states when the workflow should run, its tasks and the order and conditions under which they execute (Airflow docs). +- On AWS, the managed host bills environments by the hour at one-second resolution with "no minimum fees or upfront commitments", plus any auto-scaling for extra worker or web server capacity ([MWAA pricing](https://aws.amazon.com/managed-workflows-for-apache-airflow/pricing/)). + +**Where it falls short** + +- The docs say "if you prefer clicking over coding, Airflow might not be the best fit". It's built for batch workflows with a clear start and end, not streaming, and it doesn't copy data itself. +- A minimal install needs a scheduler, a metadata database (usually PostgreSQL or MySQL) and an API server, and workers and a triggerer are optional extras (Airflow's core concepts docs). +- The docs index names no connector or provider count and does not mention change data capture or Apache Iceberg (Airflow docs). +- Managed Airflow keeps charging while the environment is on: the Small environment rate in the meter table below works out to $357.70 for a 730-hour month before extra workers (MWAA pricing). + +Don't fancy running Airflow yourself? Amazon's managed host, Managed Workflows for Apache Airflow (MWAA), is billed by the hour, and its pricing page lists $0.49 an hour for a Small environment and $0.99 for a Large one in US East (N. Virginia), the region its worked examples use. + +![Amazon MWAA pricing page screenshot showing hourly rates by environment size](/img/blog/2026/10/best-data-pipeline-tools--mwaa-pricing-rates.webp) + +*Amazon MWAA pricing page, October 2026. Rates change, so check the MWAA pricing page linked above.* + +### 13. Dagster: best for teams that think in tables and assets rather than tasks + +![Dagster home page showing its headline and main navigation](/img/blog/2026/10/landing-dagster.webp) + +*Dagster home page, October 2026.* + +**At a glance** +- Price: Solo $10 a month, Starter $100 a month, Pro by quote; pay-as-you-go $0.040 per credit on Solo and $0.035 on Starter; 30-day free trial (Dagster pricing page, October 2026) + +Dagster's docs call it "a data orchestrator built for data engineers". A credit on its pricing page is the sum of asset materializations and ops run. Dagster coordinates other tools and doesn't copy data itself. + +![Dagster pricing page with Solo at $10 a month, Starter at $100 a month, per-credit rates, and a Pro plan by quote](/img/blog/2026/10/best-data-pipeline-tools--dagster-pricing-plans.webp) + +*Dagster's pricing page, October 2026.* + +**What's good** + +- Its docs list built-in lineage (a record of where data came from) and observability. +- The docs also name a declarative programming model and testability, and describe Dagster+ as the managed offering with a hosted Dagster instance (Dagster docs). +- Solo includes 1 user, 1 code location and 1 deployment, and Starter includes up to 3 users, 5 code locations and 1 deployment. Pro is priced by contacting sales ([pricing page](https://dagster.io/pricing)). +- With the Hybrid option there is no compute charge from Dagster (pricing page). + +**Where it falls short** + +- Each asset materialization or op run is a credit, so lots of small runs add up quickly. The cheap plans also allow just 1 or 3 users. +- Dagster+ Serverless compute is billed at $0.010 per minute on top of the plan and credits (pricing page). +- Both cheap plans include a single deployment, and Solo has a single code location (pricing page). +- Dagster's pricing page says "Dagster is now part of Prefect", so confirm what that means for plans and support before you buy. + +### 14. Prefect: best for Python teams that want to start with ordinary functions + +![Prefect home page showing its headline and main navigation](/img/blog/2026/10/landing-prefect.webp) + +*Prefect home page, October 2026.* + +**At a glance** +- Price: Hobby free forever; Starter $100 a month; Team $100 per user a month; Enterprise custom (Prefect pricing page, October 2026) + +Prefect's docs call it an open-source engine that turns Python functions into pipelines, and say you build workflows in pure Python with no DSLs or complex config files. The free Hobby plan allows 2 users, up to 5 deployments and 7 days of run history. + +![Prefect pricing page with four plan cards: free Hobby, Starter at $100 a month, Team at $100 per user, and custom Enterprise](/img/blog/2026/10/best-data-pipeline-tools--prefect-pricing-plans.webp) + +*Prefect's pricing page, October 2026.* + +**What's good** + +- Workflows are ordinary Python functions, per its docs, and the free plan covers 2 users, which is enough for a first try. +- Its docs say you can resume interrupted runs from the last successful point, trigger flows on schedules, external events or the API, pause a flow for human approval, and create tasks at runtime based on actual data or conditions (Prefect docs). +- Hobby also includes 500 minutes of Prefect Serverless, and Starter at $100 a month adds 3 users, up to 20 deployments and 75 hours of Serverless on your own compute ([pricing page](https://www.prefect.io/pricing)). +- Team at $100 per user a month covers 4 to 8 users, up to 100 deployments and 225 hours of Serverless (pricing page). +- Enterprise adds SSO (SAML/OIDC), RBAC and ACLs, multiple workspaces, directory sync (SCIM), IP allowlisting and PrivateLink, and unlimited deployments (pricing page). + +**Where it falls short** + +- It's code only, and the free plan's caps (5 deployments, 7 days of history) start to bite as you grow. +- Run history is kept for 7 days on Hobby and Starter and 14 days on Team (pricing page). +- The comparison table shows no uptime SLA on Hobby, Starter or Team; 99.9% appears only on Enterprise (pricing page). +- Support is community on Hobby and Starter and email on Team, and audit log retention is none on Hobby and Starter and 24 hours on Team (pricing page). +- Team is billed per user, so a full 8-person team comes to $800 a month at list price (our arithmetic). +- The get-started docs do not mention change data capture, so a loader is a separate tool. + +## How to choose, in five questions + +Answer these in order. The first answer usually knocks out half the list. + +1. **Which job is missing?** If data isn't landing anywhere yet, start with the ingestion group. If it lands but it's messy, look at dbt. If someone runs steps by hand, look at the schedulers. +2. **How fast must changes show up?** Hourly or slower points to a loader or a batch tool. Seconds points to Debezium, Kafka and Flink, which you run yourself. +3. **Who runs it?** If nobody wants to touch servers, choose a managed tool or a cloud bundle. If you have engineers, free software drops the licence bill and adds the work. +4. **Which cloud are you on?** Inside AWS or Azure, the bundles save you from joining parts. +5. **How does the tool count?** Rows, events, credits, models and compute hours grow in different ways. Work out your own number before you sign anything. + +### Worked examples of the meters + +Plain arithmetic on the published rates above, not quotes. + +| Meter | Published rate | Example | Result | +| --- | --- | --- | --- | +| Hevo events | Free to 1M events a month; an insert, update or delete is one event | 100,000 existing rows each updated 10 times in a month | 1,000,000 update events, exactly the free ceiling, before any new inserts | +| AWS Glue | $0.44 per DPU-hour for Glue 5.1, $0.308 for Glue 6.0 (US East, Ohio) | A 10-DPU job running 1 hour | $4.40 on Glue 5.1, $3.08 on Glue 6.0 | +| Amazon MWAA | $0.49 an hour, Small environment (US East, N. Virginia) | One Small environment left on for 730 hours | $357.70 a month before extra workers | +| dbt Starter | $100 per user a month, 5 developer seats | 3 developers | $300 a month; 5 seats is $500 | + +Sources: AWS Glue price list, Amazon MWAA pricing, dbt pricing. Checked October 2026. + +An hourly meter keeps charging while you sit idle, and an event or row meter charges you for churn. + +### Check before you rely on a claim + +Speed, uptime, ease and savings claims on vendor pages are the vendor's own. Before you sign, ask for the status of the exact connector you need, a bill estimate from your own volumes in writing, and what the next price step is past the free limit. + +## Building a pipeline from parts: a decision table + +Most real pipelines combine one tool per job. This table shows common combinations, built only from what each vendor's page says the tool does. + +| Your situation | Ingest | Transform | Orchestrate | Watch out for | +| --- | --- | --- | --- | --- | +| Small team, no engineer, apps and databases into a warehouse | Fivetran or Hevo | dbt | The ingestion tool's own schedule, plus dbt's job scheduling | Row and event meters rise with change | +| Python team that wants open source | Airbyte Core | dbt Core | Airflow, Dagster or Prefect | You run servers and upgrades | +| Everything on AWS | Glue jobs | Glue or dbt | Managed Airflow on MWAA | Spark skills; no self-hosting | +| Everything on Microsoft | Data Factory | Data Factory mapping data flows | Data Factory triggers | Batch only; look at Fabric | +| Changes needed in seconds | Debezium | Flink | A scheduler for any batch jobs | You run Kafka and Flink | +| Postgres, MySQL, MongoDB or SQL Server changes into Iceberg you run | [OLake Go](/docs/) | A query engine that reads Iceberg, such as Spark or Trino ([compatibility](/docs/understanding/compatibility-engines/)) | Your own scheduler | You run the servers and upgrades | +| One vendor for load and transform on a warehouse | Matillion | Matillion | Matillion | No public dollar price | + +![Two ways to build a pipeline: buy one all-in-one cloud service, or pick one tool per job and connect them](/img/blog/2026/10/best-data-pipeline-tools-build-from-parts.webp) + + + +## FAQs + + + +## Conclusion + +Start from the job, not the brand name, then check the billing meter, because that's the part that changes your invoice. + + diff --git a/compare/2026-10-07-mysql-to-iceberg-tools.mdx b/compare/2026-10-07-mysql-to-iceberg-tools.mdx index a3d08a48..720a8120 100644 --- a/compare/2026-10-07-mysql-to-iceberg-tools.mdx +++ b/compare/2026-10-07-mysql-to-iceberg-tools.mdx @@ -5,6 +5,7 @@ description: "MySQL to Iceberg tools compared: eight options on binlog setup, ca tags: [comparison, iceberg, mysql, cdc, data-pipeline-tools, best-of] authors: [priyansh] image: /img/blog/cover/mysql-to-iceberg-tools-cover.webp +date: 2026-10-01 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/mysql-to-iceberg-tools.json'; diff --git a/compare/2026-10-08-aws-etl-tools.mdx b/compare/2026-10-08-aws-etl-tools.mdx index 6bea46a7..58e5e349 100644 --- a/compare/2026-10-08-aws-etl-tools.mdx +++ b/compare/2026-10-08-aws-etl-tools.mdx @@ -5,6 +5,7 @@ description: "The 11 best AWS ETL tools compared: Glue, DMS, AppFlow, Firehose a tags: [comparison, etl, data-pipeline-tools, aws, best-of] authors: [priyansh] image: /img/blog/cover/aws-etl-tools-cover.webp +date: 2026-10-02 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/aws-etl-tools.json'; @@ -14,7 +15,7 @@ import quiz from '@site/src/data/quizzes/aws-etl-tools.json'; - **Pick AWS ETL (extract, transform, load) tools by where your data starts.** 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. -- **AWS DMS cannot write Apache Iceberg directly.** 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. +- **AWS DMS does not list Apache Iceberg as a target.** AWS's [DMS target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) names Amazon S3, Kinesis, Kafka and others, and not Iceberg. DMS can write full-load and change data capture (CDC) files to S3 ([S3 docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html)), and AWS's own [data lake blog](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/) then uses Glue jobs to build Iceberg tables from them. - **The billing unit drives the price.** Glue bills compute time, DMS bills instance or capacity hours, AppFlow bills runs and gigabytes, and Fivetran bills monthly active rows. - **Two names are off the table.** AWS Data Pipeline is closed to new customers, and the Firehose database-to-Iceberg preview ended on 30 September 2025. @@ -123,7 +124,7 @@ AWS announced Glue 6.0 on 21 August 2026 with "30% lower pricing than previous A **Where it falls short** -- [AWS's DMS target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) has no Apache Iceberg entry. +- [AWS's DMS target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) names Amazon RDS databases, Redshift, DynamoDB, S3, OpenSearch Service, ElastiCache, Kinesis, DocumentDB, Neptune and Kafka, and not Apache Iceberg. - AWS's [data lake blog](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/) 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. - The [CDC docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html) say "There are no SLAs for CDC latency." Latency can increase to several minutes or longer depending on source workload, network and other factors. - S3 targets record "no ALTER statement" when a source column changes, and DMS does not alter earlier records to match ([S3 docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html)). @@ -132,7 +133,7 @@ AWS announced Glue 6.0 on 21 August 2026 with "30% lower pricing than previous A **What users say:** In the Hacker News thread "We migrated our PostgreSQL database with 11 seconds downtime" (January 2024), one commenter [wrote](https://news.ycombinator.com/item?id=39049790) that "schema changes totally messed it up". -![AWS DMS documentation listing target endpoints for data migration, including Amazon S3, Kinesis and Kafka, with no Apache Iceberg entry](/img/blog/2026/10/aws-etl-tools--aws-dms-target-endpoints.webp) +![AWS DMS documentation listing target endpoints for data migration, including Amazon S3, Kinesis and Kafka; Apache Iceberg is not listed](/img/blog/2026/10/aws-etl-tools--aws-dms-target-endpoints.webp) *AWS DMS documentation, target endpoints, October 2026.* @@ -245,7 +246,7 @@ Think of Firehose as a delivery truck for streaming records. AWS's pricing page **At a glance** - Kind: open-source database replication, licensed Apache 2.0 -- Change capture: Postgres, MySQL/MariaDB, MongoDB and SQL Server ([connector docs](/docs/connectors/overview/)) +- Change capture: Postgres ([docs](/docs/connectors/postgres/)), MySQL/MariaDB ([docs](/docs/connectors/mysql/)), MongoDB ([docs](/docs/connectors/mongodb/)) and SQL Server ([docs](/docs/connectors/mssql/)) - Output: Apache Iceberg and Parquet - Price: free licence, you pay for your own servers - Support: [contact the OLake team](/contact/) @@ -442,13 +443,13 @@ Glue rates are US East (Ohio) and the DMS rate is US East (N. Virginia). The App | --- | --- | --- | | A few SaaS apps into S3 or Redshift | AppFlow | Not named on AppFlow's overview | | SaaS apps or DynamoDB with no pipeline to build | Glue zero-ETL | S3 Tables is a listed target, not for self-managed databases | -| A live database moving into AWS | DMS | No Iceberg target, so a second step is needed | +| A live database moving into AWS | DMS | The [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) does not name Iceberg | | Database changes into Iceberg tables on S3 | DMS plus Glue, or a tool that writes Iceberg itself | AWS's blog uses Glue jobs after DMS | | Spark code and big batch transforms | Glue | AWS's DMS data lake blog uses Glue jobs to write Iceberg | | Events already in Kafka or Kinesis | Firehose | Delivers streams into Iceberg tables | | Many SaaS connectors, no servers | Fivetran or Airbyte Cloud | Both document an Iceberg route, with the limits above | | A tool you host yourself | Airbyte Core | The S3 Data Lake connector writes Iceberg | -| Postgres, MySQL, MongoDB or SQL Server changes into Iceberg you run | OLake Go | Writes Iceberg and Parquet itself, per its docs | +| Postgres, MySQL, MongoDB or SQL Server changes into Iceberg you run | OLake Go | Writes Iceberg and Parquet itself ([our docs](/docs/)) | | Redshift loads, a small team, posted prices | Hevo | Only Snowflake-managed Iceberg, in Early Access | | Visual pipelines run inside Redshift | Matillion | Not covered here | | A big governed estate | Informatica | A SageMaker Lakehouse connector reads and writes Iceberg | @@ -463,7 +464,7 @@ Want a quicker answer? Try this short quiz. ## A note on Iceberg and open table formats -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. +Many teams now want Apache Iceberg tables on S3, so several engines can read the same data. AWS's [DMS target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) names S3, Kinesis, Kafka and others and not 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. If that is your goal, OLake Go (entry 6) writes Iceberg or Parquet on storage you own, and the [OLake Go docs](/docs/) cover the rest. @@ -483,7 +484,7 @@ Run one real table through two finalists and write down what you see. This check Not as a listed target. AWS's DMS target list names S3, Kinesis, Kafka and others, and not Iceberg. DMS can write full-load and change data capture (CDC) files to S3, and AWS's own blog then uses Glue jobs to apply them to Iceberg tables.}, {question:"Is AWS Data Pipeline still available?", 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."}, {question:"What does a small AppFlow workload cost?", 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."}, {question:"Can Glue or AppFlow read database changes (CDC)?", 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."}, diff --git a/compare/2026-10-08-best-data-management-platforms.mdx b/compare/2026-10-08-best-data-management-platforms.mdx new file mode 100644 index 00000000..75823d02 --- /dev/null +++ b/compare/2026-10-08-best-data-management-platforms.mdx @@ -0,0 +1,482 @@ +--- +slug: best-data-management-platforms +title: "Best Data Management Platforms and Tools (2026)" +description: "Thirteen data management tools sorted by job: move, store, catalog, check and master data. Dated prices, billing units and where each one falls short." +tags: [comparison, etl, data-pipeline-tools, best-of] +authors: [priyansh] +image: /img/blog/cover/best-data-management-platforms-cover.webp +--- +import BlogCTA from '@site/src/components/BlogCTA'; +import quiz from '@site/src/data/quizzes/best-data-management-platforms.json'; + +![Cover for best data management platforms showing scattered data flowing through tools into governed data](/img/blog/cover/best-data-management-platforms-cover.webp) + + + +Short version: the best data management platform depends on the job, because no single product does all of it. Fivetran, Airbyte and OLake Go move your data. Snowflake, BigQuery and Databricks store and query it, while Microsoft Purview, Collibra, OpenMetadata and DataHub catalog and govern it. + +Great Expectations checks quality, and Informatica and Semarchy manage master data, the single trusted record of a customer or product. So start with the pain you have today: data that's hard to reach, or data nobody trusts. + +- **"Data management platform" has two meanings.** In advertising it means a tool that builds audience groups for ad targeting. This guide is about the other one: tools that move, store, catalog, check and govern your company's own data. +- **No tool covers everything.** The Data Management Body of Knowledge (DMBOK), a widely used reference, lists 11 areas of data management. We found no vendor page claiming all 11. +- **Price information hides in different places.** Collibra and Semarchy publish no price, and Informatica shows no dollar rate on its pricing page. Fivetran, Airbyte, BigQuery and Databricks at least publish their billing units, and Fivetran prints its per-row list rates in a separate Service Consumption Table. +- **Open source covers the catalog and quality jobs.** OpenMetadata, DataHub and Great Expectations are all Apache-2.0 licensed. The catch: you run them yourself, unless you buy a managed route such as DataHub Cloud. + + + +We checked prices and plans in October 2026 against each vendor's own pages, and our saved copies of those pages are dated October 8, 2026. Plans change often, so confirm on the vendor's page before you buy. + +## What is a data management platform? + +Data management means looking after data from the day it's created until the day it's deleted. + +The Data Management Body of Knowledge (DMBOK), a reference framework from a professional body for data managers, lists 11 areas. They include governance, architecture, security, integration, master data, metadata and data quality. + +A data management platform is software that covers some of those areas in one product. A data management tool? That usually covers just one. + +### The advertising meaning you may have landed on by mistake + +Search this phrase and you'll get a pile of ad-tech results. In marketing, a DMP is a different product. One IT software vendor defines it as software that collects, organizes and deploys data from customers and audiences for use in online campaigns. + +If that's what you're after, this guide won't help. + +![Enterprise data management moves, stores and governs company data while an advertising platform builds ad audiences](/img/blog/2026/10/best-data-management-platforms-two-meanings.webp) + +## How we picked + +A tool had to be maintained, cover one of five jobs, and publish a product or pricing page we could open. We checked each vendor's own pages in October 2026 and name the page beside the claim, linking the pricing and limit pages that matter most. You get a table first, then one block per tool in the same shape. + +This is a reading of public pages, not a lab test, because we did not run the other tools. We quote no user reviews, and where a vendor shows no price we write "not published." + +We left out advertising DMPs, dashboard tools such as Tableau, and tools whose pages we couldn't open. And the order inside each group is *not* a ranking. + +## Data management platforms and tools compared at a glance + +| Tool | Job | Who runs it | Price shape, October 2026 | Free option | +| --- | --- | --- | --- | --- | +| Fivetran | Move data | Vendor | Monthly active rows per connection; paid rates in its Service Consumption Table, not on the pricing page | Free to 500,000 rows a month | +| Airbyte | Move data | Vendor or you | Credits on Cloud; Core is self-run | Core is free to run yourself | +| OLake Go | Move data | You | Free, Apache 2.0; you run the servers | Yes | +| Snowflake | Store and query | Vendor | Consumption-based; $2.00 to $4.00 per credit on AWS US East | Not checked | +| Google BigQuery | Store and query | Vendor | Per TiB scanned, or reserved capacity | First 1 TiB of queries a month | +| Databricks | Store and query | Vendor | Pay as you go, billed per second | Free Edition | +| Microsoft Purview | Catalog and govern | Vendor | Per governed data asset, plus processing units | None shown | +| Collibra | Catalog and govern | Vendor | Not published; request a demo | Not published | +| OpenMetadata | Catalog and govern | You, unless you buy a managed version | Free, Apache-2.0 | Yes | +| DataHub | Catalog and govern | You, or DataHub Cloud | Free core, Apache-2.0; no cloud price found | Yes | +| Great Expectations | Check quality | You | Free library, Apache-2.0 | Yes | +| Informatica | Master data and more | Vendor | Processing units; no dollar rate on its pricing page | Its pricing page menu lists Free Cloud Data Integration | +| Semarchy xDM | Master data | Vendor | Not published; contact for a quote | Free trial offered | + +Sources, pages read in October 2026: + +- Prices: Fivetran pricing page and Service Consumption Table, Airbyte pricing page, Snowflake credit consumption table, BigQuery pricing page, Databricks pricing page, Azure Purview pricing page, Informatica pricing page. +- No published price: Collibra governance page and Semarchy platform page. +- Licences on GitHub: OpenMetadata, DataHub and Great Expectations. + +"Free option" means a free plan or free software, not free to run. + +## Start from your problem + +Most teams don't need all five jobs on day one. So ask which pain is real, then pick from that lane. + +![Scattered data needs a pipeline and a store, while distrusted data needs a catalog, quality checks and master data](/img/blog/2026/10/best-data-management-platforms-start-from-problem.webp) + +If people can't get to the data, you need a pipeline and a place to store it. If they can reach it but argue about what it means, you need a catalog, rules and a master record. + +| What you hear in the team | The job | Tools in this guide | Skip it if | +| --- | --- | --- | --- | +| "I cannot get the data from our apps and databases." | Move | Fivetran, Airbyte, OLake Go | You already have a working pipeline | +| "Reports are slow or the data sits in too many places." | Store and query | Snowflake, BigQuery, Databricks | You only need a free tool to start | +| "Nobody knows which table is right or who owns it." | Catalog and govern | Microsoft Purview, Collibra, OpenMetadata, DataHub | Your data is small enough to document in one sheet | +| "The numbers broke and we found out from a customer." | Check quality | Great Expectations | You have no engineer to write rules | +| "Sales and finance each have a different customer list." | Master data | Informatica, Semarchy xDM | Duplicates are rare | + +Not sure where to start? Answer five quick questions and see which tools fit. + + + +## Tools that move data + +Moving data means copying it from apps and databases into that one place. + +### 1. Fivetran: for teams that want a vendor to run the pipelines + +![Fivetran home page showing its headline and main navigation](/img/blog/2026/10/landing-fivetran.webp) + +*Fivetran home page, October 2026.* + +**At a glance:** managed service, billed on monthly active rows (MAR), meaning rows that changed in a month. + +Fivetran's connector page says 750+ sources, while its [pricing page](https://www.fivetran.com/pricing) says 700+ fully managed connectors. Yes, they disagree, so cite the page you use. Fivetran announced the completion of its merger with dbt Labs in a press release on June 1, 2026. + +**What's good** + +- Its pricing page lists a free plan of up to 500,000 MAR a month. +- That page says Standard includes 15-minute syncs, unlimited users, REST API access, SSH tunnels and an integration for dbt Core. +- It says Enterprise adds 1-minute syncs, custom roles, SCIM user provisioning and a Hybrid deployment option. We did not test the sync times, so ask which plan your connector gets. +- Its [Managed Data Lake Service docs](https://fivetran.com/docs/destinations/managed-data-lake-service) say Fivetran writes Parquet files to your own cloud storage on Amazon S3, ADLS or GCS and always creates Iceberg metadata for the tables. The limits are below. + +**Where it falls short** + +- Paid per-row rates sit in a separate [Service Consumption Table](https://www.fivetran.com/legal/service-consumption-table), not on the pricing page, so your bill depends on your row counts and connections. +- Its destinations docs say your own warehouse provider charges separately for the compute Fivetran uses to load data. +- The pricing page applies a $5 base charge to standard connections with monthly usage between 1 MAR and 1 million MAR. +- That page says usage counts updates, which it defines as changes to existing rows in your destination, including deletes. +- The Managed Data Lake Service docs say Fivetran does not support position deletes for Iceberg tables. They also say it does not support the S3 Glacier Flexible Retrieval and S3 Glacier Deep Archive storage tiers, because retrieval takes too long. + +![Fivetran pricing page showing Free, Standard, Enterprise and Business Critical plan cards, with free up to 500,000 monthly active rows](/img/blog/2026/10/fivetran-pricing-plans.webp) + +*Fivetran pricing page, October 2026.* + +### 2. Airbyte: for teams that want open-source connectors + +![Airbyte home page showing its headline and main navigation](/img/blog/2026/10/landing-airbyte.webp) + +*Airbyte home page, October 2026.* + +**At a glance:** open source with a self-run Core edition, plus a paid Cloud service billed in credits. + +Airbyte's platform docs say it has over 600 pre-built connectors, while its why-open-source page says 700+ (another small mismatch). Its [pricing page](https://airbyte.com/pricing) shows Cloud Standard at $20 a month with 5 credits, then $5 per extra credit. + +**What's good** + +- Its platform docs say it is available as a self-managed, hybrid or fully managed cloud solution. +- They describe Core as the free and open-source version, which you can deploy locally or in your own infrastructure, and the why-open-source page says to self-host it with abctl or Kubernetes. +- The pricing page shows Plus starting at $189 a month for a 40-credit package, plus a 14-day free trial with 400 credits. +- The Plus card lists enterprise support with a 24-hour response SLA. + +**Where it falls short** + +- Change data capture (CDC) means copying only the rows that changed. Airbyte's [CDC docs](https://docs.airbyte.com/platform/understanding-airbyte/cdc) say syncs are scheduled, and "We do not treat CDC sources as infinite streaming sources." +- The same docs say CDC incremental is supported only for tables with primary keys for most sources. +- They also say changes made by TRUNCATE or ALTER do not appear in the logs, so they never reach the destination. +- A refresh is required after you add a new table or collection to a CDC connection, per the same page. +- The pricing page's comparison table lists the maximum sync frequency as 1 hour on Standard, 15 minutes on Plus and 5 minutes on Pro and Enterprise Flex. Pro and Enterprise Flex use capacity-based pricing, and the page shows no price for them. +- The why-open-source page lists the connectors and core platform under the Elastic License 2.0 (ELv2), which it describes as restricted only for resale as a hosted service. + +![Airbyte pricing page showing Standard at $20 a month with 5 credits and extra credits at $5 each, plus Plus, Pro and Enterprise Flex](/img/blog/2026/10/best-data-management-platforms--airbyte-pricing-plans.webp) + +*Airbyte pricing page, October 2026.* + +### 3. OLake Go: for teams that want to copy databases into Iceberg tables they own + +OLake + +![OLake home page showing its headline and main navigation](/img/blog/2026/10/landing-olake.webp) + +*OLake home page, October 2026.* + +**At a glance:** open-source database replication under [Apache 2.0](https://github.com/datazip-inc/olake). It copies Postgres, MySQL/MariaDB, MongoDB and SQL Server with a full load and then change capture ([Postgres](/docs/connectors/postgres/), [MySQL](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/), [SQL Server](/docs/connectors/mssql/)), and writes Apache Iceberg or Parquet. + +OLake Go moves data. It is not a catalog, quality or master data tool, so pair it with the tools in the later groups. For support, [contact the OLake team](/contact/). + +**What's good** + +- The [Postgres connector docs](/docs/connectors/postgres/) list full refresh, full refresh plus CDC, CDC only and full refresh plus incremental sync modes, so one tool does the first load and then the change capture. +- [Oracle](/docs/connectors/oracle/), [Db2](/docs/connectors/db2/), [S3](/docs/connectors/s3/) and [Kafka](/docs/connectors/kafka/) also work as sources, without database change capture. +- It writes Iceberg tables to catalogs such as [AWS Glue](/docs/writers/iceberg/catalog/glue/), with eleven catalog types on the [catalog compatibility page](/docs/understanding/compatibility-catalogs/), or Parquet files on object storage. +- Schema discovery runs at the start of every sync, and a new source column is added to the Iceberg schema automatically ([schema evolution docs](/docs/features/schema/)). +- You run it on your own infrastructure with [Docker](/docs/install/docker-cli/), [Helm on Kubernetes](/docs/install/kubernetes/) or the [OLake UI](/docs/install/olake-ui/). + +## Tools that store and query data + +A data warehouse is a database built for reports. Lakehouses keep data in cheap file storage but let you query it like a warehouse. All three tools below say they work with the open Apache Iceberg table format: see the Iceberg docs of Snowflake, BigQuery and Databricks. + +### 4. Snowflake: for teams that want a vendor-managed warehouse + +![Snowflake home page showing its headline and main navigation](/img/blog/2026/10/landing-snowflake.webp) + +*Snowflake home page, October 2026.* + +**At a glance:** a managed cloud data platform with a consumption-based price. + +Snowflake's pricing page calls its model consumption-based (its own wording: it says it keeps pricing simple), and describes Standard as an entry-level, introductory offering. Its Iceberg docs say Iceberg tables combine Snowflake's query features with external cloud storage that you manage. + +**What's good** + +- Snowflake sells four editions: Standard, Enterprise, Business Critical and Virtual Private Snowflake (VPS), which the pricing page says includes all Business Critical features in a completely separate environment. +- The pricing page says the monthly fee for stored data uses the average amount stored per month, after compression. +- The Iceberg docs say Snowflake supports Iceberg tables that use Parquet files and versions 1, 2 and 3 of the Iceberg specification, excluding row-level equality deletes. +- They list two catalog options: Snowflake as the Iceberg catalog, which gives full platform support with read and write access, or an external catalog such as a remote Iceberg REST catalog, including AWS Glue and Snowflake Open Catalog. +- They also say Snowflake supports externally managed writes for Iceberg tables that use specification version 2 or 3. + +**Where it falls short** + +- The pricing page showed $2.00 (Standard), $3.00 (Enterprise) and $4.00 (Business Critical) per credit for AWS, US East (Northern Virginia) when we read it in a browser in October 2026, and the [credit consumption table](https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf) (Table 2(a), effective October 2, 2026) lists the same rates. There is a platform and region picker, so your rate may differ, and a credit rate is not a monthly bill. +- Rates move with region: Table 2(a) lists AWS EU Frankfurt at $2.60, $3.90 and $5.20 for the same three editions, and Table 3(a) lists AWS US East storage at $23.00 per terabyte per month on demand. +- Pre-paid capacity is priced as the on-demand rate with a discount set in your order form, and the table does not publish the discount percentages. +- Per the Iceberg docs, an Iceberg table that uses an external catalog gets limited Snowflake platform support. Row-level deletes work only as position deletes on version 2 tables and as deletion vectors on version 3 tables. +- If your Snowflake account and external volume sit in different regions, your external cloud storage account incurs egress costs when you query the table. +- No self-hosted option is stated. + +![Snowflake pricing options page showing the Standard, Enterprise and Business Critical editions at 2, 3 and 4 dollars per credit](/img/blog/2026/10/best-data-management-platforms--snowflake-pricing-options.webp) + +*Snowflake pricing page, October 2026.* + +### 5. Google BigQuery: for teams already on Google Cloud + +![Google BigQuery home page showing its headline and main navigation](/img/blog/2026/10/landing-bigquery.webp) + +*Google BigQuery home page, October 2026.* + +**At a glance:** a serverless warehouse. A TiB, the unit it bills queries in by default, is about a trillion bytes. + +**What's good** + +- The [pricing page](https://cloud.google.com/bigquery/pricing) says queries are billed per TiB scanned by default and "The first 1 TiB of query data processed per month is free." +- The first 10 GiB of storage is also free each month. +- Long-term storage covers any table or partition not modified for 90 consecutive days, and its storage price drops automatically by about 50%. +- Capacity pricing is available in 3 editions, Standard, Enterprise and Enterprise Plus, and the Standard edition lists slots at $0.04 per hour with no commitment (default view, and the price varies by region and edition). +- Its Iceberg docs say Iceberg managed tables keep data in customer-owned storage buckets and support DML, schema evolution (add, drop and rename columns) and automatic storage optimization. +- They also list an export of an Iceberg V2 snapshot, refreshed on each table mutation, for engines such as Spark. + +**Where it falls short** + +- On-demand queries get "generally ... access to up to 2,000 concurrent slots, shared among all queries in a single project," so busy projects share capacity. +- On-demand charges round up to the nearest MB, with a minimum of 10 MB per table referenced and per query, and you pay for the data in the columns you select even when you set a LIMIT. +- The rendered on-demand rate after the free TiB is $6.25 per TiB, but the table text does not name its region, so check yours. +- Per the Iceberg docs, only one mutating DML statement (UPDATE, DELETE or MERGE) runs at a time for each Iceberg managed table, and others queue. +- Iceberg managed tables do not support renaming operations, table copies or table clones. +- It's a proprietary Google Cloud service, with no self-hosted option stated. + +![BigQuery pricing page table of monthly free usage limits showing the first 1 TiB of query data each month is free](/img/blog/2026/10/best-data-management-platforms--bigquery-on-demand-free-tib.webp) + +*Google BigQuery pricing page, October 2026.* + +### 6. Databricks: for teams that mix analytics with machine learning + +![Databricks home page showing its headline and main navigation](/img/blog/2026/10/landing-databricks.webp) + +*Databricks home page, October 2026.* + +**At a glance:** a data and AI platform on AWS, Azure and Google Cloud, billed pay as you go. + +**What's good** + +- The [pricing page](https://www.databricks.com/product/pricing) says "Only pay for the products you use at per second granularity," with no up-front costs. +- It offers committed-use contracts, where larger commitments earn greater discounts, and lists a Free Edition. +- Its Iceberg docs say it supports Iceberg tables that use Parquet files and versions 1, 2 and 3 of the Iceberg specification (the format's own version numbers). +- They say it supports Iceberg tables managed by Unity Catalog and by foreign catalogs, such as AWS Glue, Hive metastore or Snowflake Horizon Catalog. +- Iceberg tables you create in Unity Catalog are managed Iceberg tables, and you can create them with Databricks Runtime, Databricks SQL or external engines that support the Iceberg REST Catalog API, such as Apache Spark, Flink, Trino or Kafka. + +**Where it falls short** + +- Iceberg tables need Unity Catalog and Databricks Runtime 16.4 LTS (long-term support) or above, and managed tables also need serverless compute. +- Foreign Iceberg tables are read-only in Databricks and have limited platform support. +- Credential vending is not supported on workspaces that use default storage. +- Partition evolution on managed Iceberg tables works through external Iceberg engines using the Iceberg REST Catalog, but not through Databricks SQL. +- Serverless compute must have network connectivity to the cloud storage account that backs a managed Iceberg table. +- The pricing page text we read does not list editions beyond Free Edition and pay as you go. + +## Tools that catalog and govern data + +A data catalog is a searchable inventory of your data, with owners and descriptions. Data governance is the set of rules about who may use data and how. Lineage is a record of where a piece of data came from. + +### 7. Microsoft Purview: for teams that already run on Microsoft + +![Microsoft Purview product page showing its headline and main navigation](/img/blog/2026/10/landing-microsoft-purview.webp) + +*Microsoft Purview product page, October 2026.* + +**At a glance:** Microsoft's Learn page says Purview helps organizations govern, protect and manage data. It groups security, governance and compliance products, and its governance pieces are Data Map and Unified Catalog. + +**What's good** + +- The Learn page says the Purview portal provides access to data governance, data security and data compliance solutions in one place. +- It lists the data security solutions as Data Loss Prevention, Data Security Investigations, Information Barriers, Information Protection and Insider Risk Management. +- The [Azure pricing page](https://azure.microsoft.com/en-us/pricing/details/purview/) bills Unified Catalog per governed asset, and the monthly charge for a managed asset is prorated by the days it is governed in the billing cycle. +- Governed assets can be tables, views, AI models and semantic models that are linked to governance concepts. +- A Data Map starts at 1 Capacity Unit, which supports up to 25 operations per second and up to 10 GB of metadata. + +**Where it falls short** + +- Per-unit rates didn't show in the pricing page text we fetched. Its own example says 200 governed assets cost $100 for 30 days without discounts. +- Only assets linked to governance concepts count as governed assets, and the Data Map needs an additional Capacity Unit for every 10 GB of metadata storage. +- Governing data in other clouds such as AWS or GCP may incur data transfer and API call charges. +- Purview provisions a storage account and an Azure Event Hubs account as managed resources in your subscription, which may carry separate charges that in most cases will not exceed 2% of scanning charges. +- Microsoft's Learn page lists Data Security Posture Management as in preview. + +![Example showing 500 assets in Microsoft Purview Data Map, of which 200 governed assets are billed at about $100 for 30 days](/img/blog/2026/10/best-data-management-platforms-purview-governed-assets.webp) + +*Based on the worked example on the Azure Purview pricing page, October 2026.* + +### 8. Collibra: for large teams with formal governance programs + +![Collibra home page showing its headline and main navigation](/img/blog/2026/10/landing-collibra.webp) + +*Collibra home page, October 2026.* + +**At a glance:** a governance product that, on its product page, says it automates workflows and centralizes policies to create a single source of truth. + +**What's good** + +- Its page lists a shared language: a consistent understanding of business terminology, rules and metrics in one location. +- It lists assigning roles and responsibilities to protect data assets from unauthorized access. +- It lists automated compliance checks that flag violations. +- It says AI-driven automation and workflows can speed up curation, classification and governance tasks. +- It says workflows can be embedded into Slack and Microsoft Teams for approvals. +- It says data issues can be submitted, tracked and resolved with automated incident workflows. + +**Where it falls short** + +- No price is shown. The page points to a "Request a demo" button, and a pricing page we tried returned an error on October 1, 2026. +- We didn't find the deployment model stated on that page. +- We also found no connector count on that page. + +### 9. OpenMetadata: for teams that want an open-source catalog + +![OpenMetadata home page showing its headline and main navigation](/img/blog/2026/10/landing-openmetadata.webp) + +*OpenMetadata home page, October 2026.* + +**At a glance:** the OpenMetadata docs home says to document, discover and govern your data assets end to end. Its GitHub page lists the Apache-2.0 licence. + +**What's good** + +- The docs home lists setup guides for Discovery, Lineage, Observability, Insights, Data Contract and Governance. +- It describes managing data quality checks with version-controlled configurations. +- It lists an upgrade path with compatibility checks and safe rollback options. +- Its Quick Start uses a hosted sandbox or a local Docker setup, so you can try it before you deploy. +- The GitHub page says it comes with 130+ connectors, open metadata standards, semantic search, APIs, SDKs and an MCP server. + +**Where it falls short** + +- The docs home says to deploy for production using Kubernetes, cloud-managed services or bare metal, so you run and upgrade it yourself unless you buy a managed version. +- We didn't check any managed offering or Iceberg support, so we say nothing about either. + +### 10. DataHub: for teams that want an open-source catalog with a cloud option + +![DataHub home page showing its headline and main navigation](/img/blog/2026/10/landing-datahub.webp) + +*DataHub home page, October 2026.* + +**At a glance:** the DataHub docs call it a modern data catalog designed to streamline metadata management, data discovery and data governance, and list self-hosting on Kubernetes plus a managed DataHub Cloud. Its GitHub page lists the Apache-2.0 licence. + +**What's good** + +- The docs say discovery can search dashboards, datasets, ML models and raw files. +- They list governance (define ownership and track PII) and quality and observability (automated anomaly detection, assertions and data contracts). +- They say DataHub supports ingestion by UI and CLI. +- The GitHub page says the self-hosted option has 150+ integrations and column-level lineage. +- DataHub's Google Cloud trial page says a 21-day trial gives you a dedicated Cloud instance managed by the DataHub team, and it lists SLA-backed 99.5% availability for DataHub Cloud. + +**Where it falls short** + +- Self-hosting means running it yourself: the docs say to start with a CLI command or deploy to production with Docker or Helm charts, and the GitHub page calls self-hosting best for teams comfortable running their own stack. +- The trial page lists enterprise lineage views, governance workflows and AI capabilities as not available in open source. +- We found no DataHub Cloud price (its pricing path returned an error on October 1, 2026), so we state none. + +### 11. Great Expectations: for teams that write Python + +![Great Expectations home page showing its headline and main navigation](/img/blog/2026/10/landing-great-expectations.webp) + +*Great Expectations home page, October 2026.* + +**At a glance:** the Great Expectations docs say its Core library is a Python library for building and running data validation workflows, built around rules called expectations. The repository licence is Apache 2.0. + +**What's good** + +- The docs define an Expectation as a verifiable assertion about data. +- Every workflow follows the same four steps: set up an environment, connect to data, define Expectations and run Validations. +- Actions can send validation results as email, Slack or Microsoft Teams alerts. +- Data Docs are human-readable pages that hold your Expectation Suite definitions and Validation Results. +- You can apply the same Expectation Suite to different Batches of data. + +**Where it falls short** + +- It validates data, so you write the rules yourself and run them in code. +- The docs' scheduled-testing example needs an orchestrator to trigger the workflow. +- Its blog post of May 2026 announced that GX Cloud would no longer be publicly available beginning June 1. +- The same post says Fivetran will become the steward of the open-source community and GX Core, which it says will continue as an open-source, community-driven project. + +## Tools that manage master data + +Sales has one customer list and finance has another. Master data is the core list of things your business cares about, such as customers and products, and master data management (MDM) keeps one trusted record of each so nobody holds two versions. + +### 12. Informatica: for large companies that want many data jobs from one vendor + +**At a glance:** Informatica's MDM page describes MDM as the process of creating and maintaining a single, trusted record for customers, products and more. Salesforce completed its acquisition of Informatica on November 18, 2025, per Salesforce's press release. + +**What's good** + +- Its site lists catalog, integration, quality, MDM and governance products, so it spans several of the five jobs. +- Its [pricing page](https://www.informatica.com/pricing.html) says Informatica Processing Units (IPUs) give access to all eligible cloud services listed in its Cloud and Product Description Schedule. +- The page's menu lists Free Cloud Data Integration. +- The Cloud and Product Description Schedule (version 39.2, effective September 11, 2026) shows Database Ingestion and Replication CDC falling from 6.5 IPU per million rows for the first 15 million to 0.55 up to 750 million and 0.05 above that. + +**Where it falls short** + +- The pricing page explains IPUs, a usage meter, and ends with a "Get Quote" button. No dollar price per unit appears, and the rates by service live in the separate schedule, so get a quote before you budget. +- Under the IPU model, unused IPUs do not carry over to the next month, and under the Flex IPU model they are consumed over an annual period instead. +- Flex IPU use above your subscription is charged at the overage fee in your order, and the fee is not published. +- IPU and Flex IPU must be provisioned separately and may not be deployed in the same Org. +- The schedule does not say whether a volume tier applies to your whole quantity or only to the units inside each band. + +### 13. Semarchy xDM: for teams that want a focused MDM tool + +![Semarchy xDM home page showing its headline and main navigation](/img/blog/2026/10/landing-semarchy.webp) + +*Semarchy xDM home page, October 2026.* + +**At a glance:** Semarchy's platform page says it handles customer, product, supplier, location and reference data, plus any domain you model, in one model. + +**What's good** + +- Deployment choice: the page lists SaaS, on-premises, cloud and Snowflake. +- It says you can write custom match rules or use vector embeddings for entity resolution with SemQL, its SQL-like language. +- It says lineage is tracked down to the individual record. +- It says generated REST APIs connect ERP, BI, ML models or external targets. +- The page offers a free trial. + +**Where it falls short** + +- No price is published, so you'll have to contact the company for a quote. + +## Where all-in-one suites fit + +Fivetran's guide on its site argues that unified tools reduce the work of running many point tools. Keep in mind that's a vendor view. The same page calls its own list "specialized data management tools you can assemble alongside others." + +Choose a suite if you already have one vendor, a budget for a contract and few engineers to wire tools together. Choose separate tools if you want open source, a lower starting cost or the freedom to swap one part later. + +## Other names worth knowing + +Atlan's pricing page shows no price and a "Start the conversation" prompt. Alation and Ataccama appear in several rival lists, but we didn't check their pages, so we say no more. + +Qlik's own Talend page says the open-source version of Talend Studio was retired on January 31, 2024, so be wary of lists that still recommend it as a free option. + +## A zero-licence starting stack (and what it still costs) + +Here's one way to start with no licence fees, using only prices shown above. Run Airbyte Core yourself, query in BigQuery under its free 1 TiB of queries a month, catalog with OpenMetadata, and check rules with Great Expectations. The software price is $0 for each of those pieces on the free terms listed above. + +But "no licence" isn't "free." You still pay for servers, for BigQuery storage and any queries past the free tier, and for the engineers who keep four tools working. A paid starting point is Airbyte Cloud Standard at $20 a month with 5 credits, which swaps the server work for a bill. + +## How to choose a data management platform + +1. **Name the pain.** Data people can't reach needs a pipeline and a store. Data they don't trust needs a catalog, quality checks or master data. +2. **Check the meter.** Rows, credits, scanned bytes, governed assets and processing units all grow differently, and that's where bills surprise people. +3. **Count who will run it.** Open-source tools are free to license, but they still need servers and people. +4. **Ask for the missing price in writing.** Collibra, Semarchy and Informatica each want you to ask for a quote. +5. **Test one tool before adding a second.** Add jobs once the first one works. + +Snowflake, BigQuery and Databricks all document support for Apache Iceberg, an open table format for data kept in your own storage (see the Iceberg docs of Snowflake, BigQuery and Databricks). If you keep data there, the copy step matters a lot, and OLake Go, covered in the first group above, is built for it. + +## The short version, again + +A data management platform isn't one product you buy once. It's a set of jobs: move the data, store it, find it, check it and agree on one master record. Match each job to a tool, and add them in the order your problems show up. + +The cheapest way to start is usually a free tier or an open-source tool for the first job. And if a vendor doesn't publish a price, ask for a written quote before you commit. + + + + diff --git a/compare/2026-10-09-best-data-integration-tools.mdx b/compare/2026-10-09-best-data-integration-tools.mdx index 07884435..814c213f 100644 --- a/compare/2026-10-09-best-data-integration-tools.mdx +++ b/compare/2026-10-09-best-data-integration-tools.mdx @@ -5,6 +5,7 @@ description: "The best data integration tools in 2026: 16 compared by use case, tags: [comparison, etl, data-pipeline-tools, data-ingestion, best-of] authors: [priyansh] image: /img/blog/cover/best-data-integration-tools-cover.webp +date: 2026-10-03 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/best-data-integration-tools.json'; @@ -104,7 +105,7 @@ This second table covers the two limits that surprise buyers most. Apache Iceber | Integrate.io | Lists CDC among its products ([pricing page](https://www.integrate.io/pricing/)) | Not listed | | Rivery (Boomi) | Oracle CDC on the Enterprise edition, per its [pricing page](https://rivery.io/pricing/) | Not listed | | Meltano | Depends on the tap (connector) variant | No official loader | -| OLake Go | Postgres, MySQL/MariaDB, MongoDB and SQL Server ([connector docs](/docs/connectors/overview/)) | Yes, [Iceberg](/docs/writers/iceberg/catalog/rest/) tables or [Parquet](/docs/writers/parquet/config/) files | +| OLake Go | [Postgres](/docs/connectors/postgres/), [MySQL/MariaDB](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/) and [SQL Server](/docs/connectors/mssql/) | Yes, [Iceberg](/docs/writers/iceberg/catalog/rest/) tables or [Parquet](/docs/writers/parquet/config/) files | | dlt | Postgres replication source is the only log-based option we found in its open-source docs | Yes, through [PyIceberg](https://dlthub.com/docs/dlt-ecosystem/destinations/iceberg) | | Matillion | Streaming CDC listed on the Scale edition ([pricing page](https://www.matillion.com/pricing)) | Not listed | | Informatica | Yes for many database sources, per its [database ingestion docs](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) | Describes Snowflake-managed Iceberg tables for database ingestion; the formats behind its "Open Table" target are not stated | diff --git a/compare/2026-10-09-postgres-vs-mysql.mdx b/compare/2026-10-09-postgres-vs-mysql.mdx new file mode 100644 index 00000000..ede12962 --- /dev/null +++ b/compare/2026-10-09-postgres-vs-mysql.mdx @@ -0,0 +1,294 @@ +--- +slug: postgres-vs-mysql +title: "Postgres vs MySQL: Differences and How to Choose" +description: "Postgres vs MySQL compared from each project's own manuals: licence, transactions, SQL features, limits, versions and when each one is the better pick." +tags: [comparison, postgresql, mysql, versus] +authors: [priyansh] +image: /img/blog/cover/postgres-vs-mysql-cover.webp +--- +import BlogCTA from '@site/src/components/BlogCTA'; +import quiz from '@site/src/data/quizzes/postgres-vs-mysql.json'; + +![Postgres versus MySQL cover showing two relational databases compared side by side for a choice](/img/blog/cover/postgres-vs-mysql-cover.webp) + + + +Both are free, mature relational databases, and either one can run most web apps. Pick PostgreSQL if you want [schema changes you can roll back](https://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis), a [full outer join](https://www.postgresql.org/docs/current/sql-select.html), materialized views or the six index types its manual lists. Pick MySQL if your team, tools or hosting already run on it, because switching costs more than it looks. + +Which one is faster? We found no neutral, linked benchmark, so test your own queries. + +- Money first: PostgreSQL is free under a BSD or MIT style licence. MySQL Community Edition is free under the GPL version 2, and Oracle sells commercial editions. +- In MySQL 8.4, [the default storage engine is InnoDB](https://dev.mysql.com/doc/refman/8.4/en/innodb-introduction.html), which gives transactions that follow ACID (atomicity, consistency, isolation and durability, explained below). That old line that MySQL isn't fully ACID? It only applies if you pick another engine. +- PostgreSQL can undo a schema change inside a transaction. MySQL 8.4 makes each schema change [atomic, but it's not transactional](https://dev.mysql.com/doc/refman/8.4/en/atomic-ddl.html), and it ends any open transaction first. +- MySQL's [join syntax](https://dev.mysql.com/doc/refman/8.4/en/join.html) lists no full outer join. PostgreSQL's does. +- [MySQL's own manual](https://dev.mysql.com/doc/refman/8.4/en/faqs-views.html) says it has no materialized views. PostgreSQL has them. +- For JSON, PostgreSQL has a binary `jsonb` type that can be indexed directly. MySQL indexes JSON through a generated column. +- We found no neutral, linked benchmark that says one is faster. [Stack Overflow's 2025 survey](https://survey.stackoverflow.co/2025/technology) shows more respondents reporting extensive development work with PostgreSQL, but that's popularity, not speed. + + + +Every fact below comes from the PostgreSQL and MySQL manuals, project pages or a named survey, read on October 8, 2026, with the page linked beside the claim. We did not run either database; this is a read of their documents, not a lab test. + +Last reviewed October 2026. + +## Postgres vs MySQL at a glance + +Each cell links to its source. + +| | PostgreSQL | MySQL | +| --- | --- | --- | +| Who runs it | Community project, copyright held by the PostgreSQL Global Development Group | Developed by Oracle | +| Licence | PostgreSQL License, similar to BSD or MIT | Community: GPL version 2. Enterprise: commercial | +| Versions we found (Oct 2026) | [14 to 18 supported, 19 in beta](https://www.postgresql.org/support/versioning/) | Download page lists 26.7.0, 9.7.2 LTS, 8.4.11 LTS and 8.0.46; [8.0 is in Sustaining Support](https://www.mysql.com/support/eol-notice.html) | +| Default table engine | Not applicable | InnoDB, with other engines available | +| Concurrency model | MVCC: readers do not block writers | InnoDB: row-level locks, consistent reads and MVCC | +| Schema changes (DDL) | Can run inside a transaction | Atomic, but ends the open transaction | +| Full outer join | Supported | Join syntax lists none | +| Materialized views (saved query results) | Supported, refreshed with `REFRESH MATERIALIZED VIEW` | Manual FAQ answer: "No." | +| JSON | `json` and `jsonb` types, `jsonb` can be indexed | `JSON` type, indexed through a generated column | +| Index types | Six types, B-tree by default, plus the bloom extension | B-tree and hash described | +| Replication | Streaming, cascading and synchronous options documented | Asynchronous by default, with semisynchronous and Group Replication | +| Reported extensive development work with (Stack Overflow 2025) | 55.6% of all respondents | 40.5% of all respondents | + +On price, there's nothing to split here. Both Community editions are free, so what you pay for is hosting, staff time and, for MySQL, optional Enterprise features. + +On [Oracle's store page](https://shop.oracle.com/apex/product?p1=MySQL), a MySQL Enterprise Edition subscription is listed from US$5,350 for a 1 to 4 socket server (read October 8, 2026). It doesn't say what that price range covers, so ask Oracle for a quote. + +## So, what is each one? + +**PostgreSQL** is, in the project's own words, an open-source database that uses and extends SQL. Its history goes back to 1986, and the project calls its licence "liberal", similar to the BSD (Berkeley Software Distribution) or MIT (Massachusetts Institute of Technology) licenses. + +Both are short, permissive open-source licences. Read the real text before you rely on our summary. + +The project's versioning page lists versions 14 to 18 as supported, with 18 the current one, first released on September 25, 2025. PostgreSQL 14 gets its final release on November 12, 2026. PostgreSQL 19 Beta 4 came out on September 24, 2026, but it's not a final release yet. + +**MySQL** is developed by Oracle. The Community release comes under version 2 of the GNU (GNU's Not Unix) General Public License (GPL, a licence that requires derived software to stay open), with extra permissions. Oracle also sells commercial editions. + +Two release tracks exist, says MySQL's manual: LTS (long-term support) and Innovation. + +The download page lists versions 26.7.0, 9.7.2 LTS, 8.4.11 LTS and 8.0.46. + +Oracle's notice says that as of April 21, 2026, MySQL 8.0 is under Sustaining Support, and it encourages a move to 8.4 LTS or 9.7 LTS. So if an older comparison treats 8.0 as the version to pick, that page is out of date. + +## Transactions and ACID: does the old advice still hold? + +ACID stands for atomicity, consistency, isolation and durability. You've probably heard that MySQL isn't "really" ACID. In plain terms, ACID means a group of changes either all happen or none do, and a committed change survives a crash. + +Older comparison pages say MySQL is ACID only with some engines. + +That's still true for engines that aren't transactional. MySQL's manual lists InnoDB and NDB (the engine behind MySQL's clustered edition) as the transactional engines among its built-in ones, and MyISAM, MEMORY (a RAM-based engine) and Archive as not transactional. An engine is the part of MySQL that stores and reads table data. + +Here's what changed: the default. In MySQL 8.4, InnoDB is the default engine, so a `CREATE TABLE` without an `ENGINE` clause gives you an InnoDB table. Its manual says InnoDB operations follow the ACID model, with commit, rollback and crash recovery. + +You'd only lose that by choosing another engine on purpose. So the default engine is the transactional one. + +## Concurrency: how each handles many users + +What happens when a hundred people hit your app at once? Both databases use MVCC, short for multi-version concurrency control. It keeps more than one version of a row so that readers and writers can work at the same time. + +PostgreSQL's manual says each statement sees a snapshot of the data. So a reader doesn't wait for a writer, and a writer doesn't wait for a reader (the vacuum section below explains why old row versions are kept). MySQL's InnoDB manual says it uses row-level locking and consistent reads, and lists MVCC as supported. + +Some pages boil this down to a rule of thumb that MySQL is better for reads and Postgres for writes. Neither manual makes that claim as a measured result, so test your own workload. + +## Schema changes: the difference that bites in production + +Picture a migration that dies halfway through. DDL means data definition language, the commands that change structure, such as adding a column. + +The PostgreSQL project's wiki says PostgreSQL can perform transactional DDL. That means you can start a transaction, change a table, spot your mistake and roll everything back. One caveat: the wiki page was last edited in June 2012, so treat it as a description of a long-standing feature and test your own version. + +MySQL 8.4 supports atomic DDL, so a single statement either fully succeeds or fully rolls back, even if the server stops partway. Its manual says atomic DDL is not transactional DDL. A DDL statement implicitly commits any open transaction first, so it can't sit inside one. + +![PostgreSQL can roll back a schema change inside a transaction, while MySQL commits the open transaction before schema changes](/img/blog/2026/10/postgres-vs-mysql-ddl.webp) + +![MySQL 8.4 manual explaining atomic DDL is not transactional DDL and implicitly ends the active transaction](/img/blog/2026/10/mysql-atomic-ddl-not-transactional.webp) + +*MySQL 8.4 Reference Manual, atomic DDL page, October 2026.* + +If your team ships lots of database migrations (scripted schema changes), this matters. In PostgreSQL, a failed migration can be wrapped so nothing is half applied. In MySQL, you plan around it, with smaller steps and backups. + +## SQL features and standards + +PostgreSQL's SQL Conformance appendix says it supports most major features of SQL:2023 and conforms to at least 170 of the 177 mandatory Core features. It also notes that no current database claims full Core conformance. + +![PostgreSQL documentation page stating it conforms to at least 170 of 177 mandatory SQL Core features](/img/blog/2026/10/postgres-sql-conformance.webp) + +*PostgreSQL manual, SQL Conformance appendix, October 2026.* + +The clearest gap we could confirm? Joins. + +The join syntax in MySQL's manual lists `INNER`, `CROSS`, `LEFT`, `RIGHT`, `NATURAL` and `STRAIGHT_JOIN` joins, and no full outer join. PostgreSQL's select command reference lists a full outer join. + +We didn't compare every other SQL feature. + +## Data types, JSON and indexes + +Odds are your app stores some JSON (JavaScript Object Notation, a text format for nested data) next to normal columns. Both databases can handle it, but they index it differently. + +PostgreSQL offers two JSON types. Its manual says `json` keeps an exact copy of the input text, while `jsonb` is stored in a binary format that's faster to process. And `jsonb` also supports indexing. + +MySQL has one `JSON` type that validates documents and stores them in an internal binary format. Its 8.4 manual says JSON columns aren't indexed directly. Instead, you index a generated column that pulls out one value. + +InnoDB also supports multi-valued indexes on JSON arrays. + +![PostgreSQL manual JSON types page explaining json keeps exact text while jsonb is binary and can be indexed](/img/blog/2026/10/postgres-jsonb-preferred.webp) + +*PostgreSQL manual, JSON Types page, October 2026.* + +Indexes are the other place the manuals part ways. PostgreSQL lists six types, and B-tree is the default. + +The others are Hash, GiST (Generalized Search Tree) and Space-Partitioned GiST. Then come GIN (Generalized Inverted Index, for values with many parts such as arrays) and BRIN (Block Range INdex, which summarizes ranges of table blocks). + +A bloom extension is also named for PostgreSQL. MySQL's index page describes B-tree and hash indexes, and says hash indexes serve only equality tests. + +![PostgreSQL manual index types page listing B-tree, Hash, GiST, SP-GiST, GIN and BRIN with B-tree as the default](/img/blog/2026/10/postgres-index-types-list.webp) + +*PostgreSQL manual, Index Types page, October 2026.* + +A longer list doesn't make a database faster for you, and the pages we read don't compare the two on index choice. You only gain if your queries actually need one of these types, such as for arrays or very large tables. + +## Views, extensions and replication + +A materialized view stores the result of a query so that a report does not rerun it each time. PostgreSQL supports them and refreshes them with `REFRESH MATERIALIZED VIEW`. The MySQL 8.4 manual's views FAQ asks whether MySQL has materialized views and answers "No." + +![MySQL 8.4 manual views FAQ answering No to whether MySQL has materialized views](/img/blog/2026/10/mysql-faq-no-materialized-views.webp) + +*MySQL 8.4 Reference Manual, Views FAQ, October 2026.* + +PostgreSQL also packages add-on features as extensions. Its manual says a package of related SQL objects is called an extension, and one `CREATE EXTENSION` command loads it. We didn't check MySQL's plugin system line by line, so we make no claim about it. + +For copies of the database used for failover or reads, MySQL's manual says replication is asynchronous by default, and it also documents semisynchronous replication, delayed replication and Group Replication. + +PostgreSQL's high availability chapter describes synchronous and asynchronous options and lists streaming, cascading and synchronous replication. Both have built-in replication, so on its own it's not the deciding factor. + +## Housekeeping and limits of each + +Each database has chores. + +**PostgreSQL's chore is `VACUUM`.** An update or delete does not remove the old row version at once, because other transactions may still need it. `VACUUM` reclaims that space, updates planner statistics and guards against transaction ID wraparound. + +Autovacuum, a background helper that runs `VACUUM` for you, is on in the default configuration. For many installs, that's enough. + +**MySQL's trade-offs are different.** Its join syntax lists no full outer join, its views FAQ says no materialized views, and its schema changes commit the open transaction. + +The pages we read don't describe a matching routine chore, so check its manual for your engine. Oracle also sells paid editions with extra features, priced above. + +Neither list rules one out; use them as a checklist against your team's habits. + +## Where each fits + +- **Choose PostgreSQL** if you need schema changes that roll back, a full outer join, materialized views or its six documented index types, per the sources in the table below. +- **Choose MySQL** if your team, tools and hosting already run on it, you rely on Oracle support, or a vendor product you depend on is built for it. + +| Your situation | Lean toward | Why, with the source | +| --- | --- | --- | +| New project, no existing database | PostgreSQL, unless a tool you need targets MySQL | Rollback of schema changes and full outer join | +| Already run MySQL well | MySQL | Switching cost is real, and Oracle's download page lists 8.4 LTS | +| Heavy use of migration scripts | PostgreSQL | DDL can sit inside a transaction (first row) | +| Reports that reuse slow queries | PostgreSQL | Materialized views exist, and MySQL's manual says it has none | +| Lots of JSON you want to search | Test both | `jsonb` is indexable directly, and MySQL can index through generated columns | +| Need Oracle vendor support | MySQL | Oracle sells commercial MySQL editions | +| Worried about "not ACID" | Either | InnoDB is the default in 8.4 | +| Running version 8.0 or PostgreSQL 14 | Plan an upgrade | MySQL 8.0 is in Sustaining Support, PostgreSQL 14 ends November 12, 2026 | + +![PostgreSQL fits full outer joins and rollback safe schema changes; MySQL fits teams already running it, with InnoDB as the default engine and clustered indexes](/img/blog/2026/10/postgres-vs-mysql-which-fits.webp) + +Still unsure? Answer five quick questions. + + + +## Performance: what we can (and can't) say + +Pages that rank for this topic often say MySQL is faster for simple reads and PostgreSQL is faster for complex queries. The top-ranking pages we read in October 2026 had no linked benchmark behind those claims. + +We won't repeat a speed figure, and we won't offer our own number either, because we ran no tests. + +What to do instead is cheap, and it's more reliable. Take your ten slowest real queries and your busiest write path. Run them on both databases on the same hardware with your real data size, then compare. + +## Common myths, checked against the manuals + +Repeat claims we could check against the manuals. + +- **Myth: MySQL is not ACID.** Wrong for the default engine in 8.4, where InnoDB follows the ACID model. Right ONLY for non-transactional engines such as MyISAM. +- **Myth: PostgreSQL follows the SQL standard fully.** Close, but no. Its own manual says at least 170 of 177 mandatory Core features, and that no current database claims full Core conformance. +- **Myth: MySQL 8.0 is the version to pick.** Not anymore. As of April 21, 2026 it is in Sustaining Support. +- **Myth: one of them is clearly faster.** Nobody showed us a linked benchmark that says so. +- **Myth: PostgreSQL has no cost.** The software is free. Hosting, backups, upgrades and staff time are NOT. + +## What we couldn't source + +On the pages we could read, we didn't find what Oracle's store price range for MySQL Enterprise Edition covers, a neutral benchmark, or a side-by-side of every SQL feature. + +We also left out data types, extensions, full-text search and JSON handling. Both databases cover these in their manuals, and the details change from version to version. If one of them could decide your choice, read that chapter for the exact version you plan to run. + +## How to test both on your own data + +Most teams can do this in a day or two. + +1. Load a copy of your real data, at your real size, into both databases on the same hardware. +2. Pick your ten slowest queries and your busiest write path, and run them on each one. +3. Run your real schema changes, then try to roll back a failed one in each database. +4. Write down the version numbers you tested, and check them against the support dates above. +5. Ask who on your team can fix each one at 3 a.m. (count that as a result too). + +## Popularity and ecosystem + +What are other developers using? On adoption, the 2025 Stack Overflow Developer Survey shows 55.6% of all respondents reporting extensive development work with PostgreSQL and 40.5% with MySQL. + +It's a survey of developers who chose to answer it. So it tells you what people work with, not what's faster or safer. + +## Copying data out for analytics + +Sooner or later, someone asks you to copy the database into a data warehouse or lakehouse. Both databases can feed that, using the change log each one already keeps. + +For PostgreSQL, change capture uses logical decoding and replication slots. MySQL tools read its binary log. Either way, this is change data capture (CDC), which means copying only the changes. + +[OLake Go](/docs/) is an open-source tool that runs a full load and then change capture for [Postgres](/docs/connectors/postgres/) and [MySQL](/docs/connectors/mysql/), writing Apache Iceberg or [Parquet](/docs/writers/parquet/config/) files to object storage such as S3, MinIO or GCS. See the [OLake documentation](/docs/) for connector details and limits. + + + +## Conclusion + +Starting fresh? Choose PostgreSQL if you want rollback-safe schema changes and a full outer join. + +Already live on MySQL, with tooling built around it? Stay, unless the switch would save you more than it costs. + +Check your version first. MySQL 8.0 is in Sustaining Support and PostgreSQL 14 reaches its final release on November 12, 2026, so an upgrade plan matters more than the brand name. Then test your own queries, because no linked benchmark we found will decide it for you. + + diff --git a/compare/2026-10-10-best-data-quality-tools.mdx b/compare/2026-10-10-best-data-quality-tools.mdx new file mode 100644 index 00000000..0975e5d2 --- /dev/null +++ b/compare/2026-10-10-best-data-quality-tools.mdx @@ -0,0 +1,440 @@ +--- +slug: best-data-quality-tools +title: "9 Best Data Quality Tools in 2026, Compared" +description: "Nine data quality tools compared by job: pipeline tests, monitoring and enterprise cleansing, with licences, free tiers and prices." +tags: [comparison, tools, data-engineering, best-of] +authors: [priyansh] +image: /img/blog/cover/best-data-quality-tools-cover.webp +--- +import BlogCTA from '@site/src/components/BlogCTA'; +import quiz from '@site/src/data/quizzes/best-data-quality-tools.json'; + +![Cover for best data quality tools showing tables checked by a quality tool before reports are trusted](/img/blog/cover/best-data-quality-tools-cover.webp) + + + +"Data quality tool" means three different jobs. + +If you want rules you write and run in a pipeline, start free with Great Expectations, Soda Core, dbt tests or Deequ. If you want something to watch production tables for surprises, look at Elementary (free if you use dbt) or quote-based platforms such as Monte Carlo and Anomalo. For profiling, cleansing and governance in an enterprise suite, look at Informatica Data Quality and Ataccama ONE (a data quality platform). + +Most paid platforms don't publish a price. Ask for a written quote and a trial before you get attached. + +- **Free options exist.** Great Expectations Core, Deequ and Elementary's open-source tool use the Apache 2.0 licence, each per its own GitHub repository (we link the Great Expectations licence file). Soda Core uses the Elastic License 2.0, not Apache or MIT, so read it before you build on it. +- **Fit beats features.** dbt tests and Elementary's open-source tool only help if you already use dbt. Deequ needs Apache Spark (a big-data engine), so no Spark, no Deequ. + + + +IBM (International Business Machines) defines data quality as how well a dataset meets criteria for accuracy, completeness, validity, consistency, uniqueness, timeliness and fitness for purpose, according to IBM's data quality topic page. A data quality tool checks those things for you, so a wrong number gets caught before it reaches a report. Last reviewed October 2026. + +## What a data quality tool actually does + +The simplest check is a rule, such as every order having a unique ID. dbt's documentation on data tests uses that very example, where the `order_id` column in the `orders` model should be unique. + +Rules catch the problems you thought of. Observability tools go after the ones you didn't. They record facts about each table, such as how many rows arrived and how fresh the data is, and flag anything that breaks the usual pattern. + +![Testing tools run rules you write; observability tools learn what is normal and alert on drift](/img/blog/2026/10/best-data-quality-tools-two-jobs.webp) + +The tool turns each rule into a query that hunts for bad rows, and you get pass or fail. + +![A dbt test passes when its query returns zero rows and fails when any bad rows come back](/img/blog/2026/10/best-data-quality-tools-test-flow.webp) + +*Original diagram based on dbt's data test documentation, October 2026.* + +Cleansing is the third job: finding duplicate records, fixing formats and matching names, which the big enterprise suites handle. Data catalogs (a searchable list of your data) are now adding quality checks too. + +## How we picked + +Each tool had to check data quality as a main job, publish documentation or a pricing page we could read, and still be maintained. All figures come from each vendor's own pages, read in October 2026. We did not install or run the nine tools here. + +Tools whose pages we didn't read, and data quality features inside warehouses, are left out. + +Within each group the order is not a ranking. We use no vendor testimonials and no comments from people who sell a rival tool. + +## Data Quality Tools at a Glance + +| Tool | Main job | Licence | Free option | Price shown on its own page | +| --- | --- | --- | --- | --- | +| Great Expectations | Rules in a pipeline | Apache 2.0 (GX Core) | GX Core | GX Core is free; GX Cloud is no longer publicly available, per Great Expectations' May 2026 post | +| Soda | Rules and monitoring | Elastic License 2.0 (Soda Core) | Soda Core; Free plan at $0 | Team $750 a month; Enterprise custom | +| dbt tests | Rules in a dbt project | Apache 2.0 (dbt Core) | Yes, free Developer plan | Starter $100 per user a month | +| Elementary | Monitoring for dbt | Apache 2.0 (OSS tool) | Yes, one dbt project | Cloud: "Talk to us"; not published | +| Deequ | Rules on Spark | Apache 2.0 | Yes | Free; you pay for Spark compute | +| OpenMetadata | Catalog with quality tests | Apache 2.0 | Yes | Free; you run it | +| Monte Carlo | Production monitoring | Licence not stated | Not mentioned | Not published; credits by tier | +| Informatica Data Quality | Cleansing and governance | Proprietary | Trials of other products linked | Consumption based; no dollar price shown | +| Ataccama ONE | Cleansing and governance | Proprietary | Not mentioned | Not published | + +Sources: Great Expectations update (6 May 2026), dbt Core, Soda pricing, dbt pricing, Elementary pricing, Deequ, OpenMetadata, Monte Carlo pricing, Informatica pricing, Ataccama. Checked October 2026. + +## The three jobs, and which tool fits + +![A suggested order for adding data quality tools: free tests first, then monitoring, then paid platforms as needs grow](/img/blog/2026/10/best-data-quality-tools-adoption-path.webp) + +| Your job | Tools that do it | Where they fall short | +| --- | --- | --- | +| Rules you write and run in a pipeline | Great Expectations, Soda Core, dbt tests, Deequ | They only catch problems you thought of | +| Watching production tables for surprises | Elementary, Monte Carlo, Anomalo | Paid tiers rarely show a price; Elementary's open-source tool needs dbt | +| Profiling, cleansing and governance | Informatica Data Quality, Ataccama ONE | No dollar price shown; sold as enterprise suites | + +The order in the picture is our suggestion, not a vendor rule. Our read: small teams gain most from a few rules on key columns, then alerts. Large or regulated companies often begin on the catalog and governance side. + +## The 9 data quality tools, one by one + +### 1. Great Expectations: rules written in Python + +![Great Expectations home page showing its headline and main navigation](/img/blog/2026/10/landing-great-expectations.webp) + +*Great Expectations home page, October 2026.* + +**At a glance:** A Python library for data tests. Its paid cloud service is no longer publicly available. + +Great Expectations (GX) is built around the Expectation, which its docs describe as a verifiable assertion about data (the GX overview page). You connect to data, write Expectations, group them into suites and run them. Its docs mention SQL tables and Spark dataframes (tables held in Python memory) as data to validate. + +GX Core is free under the Apache 2.0 licence. On 6 May 2026 Great Expectations posted [an update](https://greatexpectations.io/blog/an-update-from-great-expectations/) saying "GX Cloud will no longer be publicly available beginning June 1." + +The same post says "Fivetran will become the new steward of the Great Expectations open source community and the GX Core project." Under the planned transition, it adds, GX Core will continue as an open source, community-driven project. + +**Where it fits** + +- Rules live in code, so you can review and version them like anything else you write. +- It can validate SQL tables and Spark dataframes, so one tool can check several kinds of data. +- In production, a Checkpoint runs your validations, and Actions can send the results to email, Slack or Microsoft Teams, per the GX Core overview. +- It writes Data Docs, human-readable pages that host your Expectation Suites and Validation Results (GX Core overview). +- One Expectation Suite can be applied to different Batches, so the same checks can cover several tables or time slices (GX Core overview). + +**Where it falls short** + +- GX Cloud is no longer publicly available from 1 June 2026, per GX's own May 2026 post, so GX Core is the way in. +- Stewardship of GX Core moves to Fivetran under the planned transition (same post). +- You write the rules yourself. It checks data against them, and that's all. It does not move, store or catalog data. +- GX Core is a Python library, so someone has to write Python to set up the connections, Expectations and runs (GX Core overview). +- The docs' scheduled-testing example has an orchestrator trigger the run, so plan to bring your own scheduler (GX Core overview). + +**Pick something else if** you want the tool to learn normal patterns for you. Elementary or Monte Carlo is the better place to look. + +### 2. Soda: data contracts and a free hosted tier + +![Soda home page showing its headline and main navigation](/img/blog/2026/10/landing-soda.webp) + +*Soda home page, October 2026.* + +**At a glance:** A data quality platform whose engine, Soda Core, runs checks written in YAML (a simple text format). + +On its GitHub page, Soda describes Soda Core as a data quality and data contract verification engine. + +A data contract is a written agreement about what a dataset must look like, including its columns, types and value ranges. Soda's docs split the work into testing during development and observability in production. + +Soda shows its prices openly. The [pricing page](https://www.soda.io/pricing) lists a Free plan at $0 a month, a Team plan at $750 a month, and Enterprise at custom pricing. + +Free includes some Soda Processing Units (SPUs). Team adds unlimited users, catalog integrations and pay-as-you-go extra units, as the screenshot shows. The catch: the price of one SPU is not shown. + +![Soda pricing page: Free at 0 dollars a month, Team at 750 dollars a month, Enterprise custom](/img/blog/2026/10/best-data-quality-tools--soda-pricing-plans.webp) + +*Soda pricing page, October 2026.* + +**Where it fits** + +- A published price for the paid Team plan. Several vendors in this category show none. +- Soda Core supports many sources, including PostgreSQL, Snowflake, BigQuery, Databricks and DuckDB, per its GitHub page. +- The Free plan at $0 includes pipeline testing, metrics observability and alerting integrations, with no credit card required (pricing page). +- You can run it three ways: Soda Core in your pipelines, a Soda-hosted Runner, or a Self-hosted Runner in your own Kubernetes environment, where the docs say data stays within your network (Soda docs). +- Its docs list Airflow, Dagster, Prefect and Azure Data Factory for orchestration, and Slack, Microsoft Teams, Jira, PagerDuty, ServiceNow and Opsgenie for alerts and tickets (Soda docs). + +**Where it falls short** + +- Soda's docs say Soda Core has no observability features. Those come from the hosted product. +- Its licence file is the [Elastic License 2.0](https://raw.githubusercontent.com/sodadata/soda-core/main/LICENSE), not Apache or MIT. The docs call Soda Core open source, but have a lawyer read the licence before you build a product on it. +- Features such as SSO (single sign-on), audit logs and private deployment appear under Enterprise on the live page. +- The hosted and self-hosted Runners cannot scan in-memory sources such as Spark or DataFrames. Soda Core is the option for those (Soda docs). +- The Self-hosted Runner needs Kubernetes expertise, per the same docs page. +- Soda Core v4 renamed its packages (for example `soda-postgres`), and legacy v3 packages are named `soda-core-{data source}`, so check which version a guide or install command targets (GitHub). + +**Pick something else if** you only need tests and already use dbt. dbt's free open-source distribution already includes its built-in tests. + +### 3. dbt tests: data already transformed with dbt + +![dbt home page showing its headline and main navigation](/img/blog/2026/10/landing-dbt.webp) + +*dbt home page, October 2026.* + +**At a glance:** Tests built into dbt, a tool that transforms warehouse data with SQL (Structured Query Language). + +dbt's docs describe data tests as assertions you make about your models and other resources. Each test is a query that returns the bad rows, and the test passes when zero rows come back. dbt ships four generic tests: `unique`, `not_null`, `accepted_values` and `relationships`. + +dbt Core is free under Apache 2.0. The [pricing page](https://www.getdbt.com/pricing) lists a free Developer plan (1 seat, 3,000 successful models built a month) and a Starter plan at $100 per user a month. + +Fivetran announced in a press release the completion of its merger with dbt Labs on June 1, 2026. + +dbt's docs show an `orders` example: a short block of YAML covers the order ID, the status values and the link to customers, and the `dbt test` command runs it all. The screenshot is the docs' plain-English translation of that YAML. + +![dbt docs translating four orders tests into plain English and saying a test passes on zero returned rows](/img/blog/2026/10/best-data-quality-tools--dbt-data-tests-plain-english.webp) + +*dbt data tests documentation, October 2026.* + +**Where it fits** + +- No new tool to learn if you already use dbt. +- Four common checks come built in, and you can write your own in SQL. +- Newer unit tests check your SQL logic on small made-up inputs before a model is built, from dbt version 1.8. +- Singular tests are plain SQL: you write the exact query that returns the failing records (dbt data tests docs). +- Open-source packages such as dbt-utils and dbt-expectations add more generic tests (dbt data tests docs). +- The `error_if` and `warn_if` configs set custom failure thresholds for a test (dbt data tests docs). + +**Where it falls short** + +- Ordinary data tests only run after a model is built, according to dbt's own unit test docs. +- It only tests what dbt manages. Data that never passes through dbt is invisible to it. +- Its tests return failing rows and pass on zero rows; the docs we read do not describe cleansing or learned alerts. +- Unit tests work on SQL models only, per the dbt unit test docs. +- On paid plans, models that build successfully are counted even if the run later fails: a job of 100 models that fails after 51 counts 51 ([dbt billing docs](https://docs.getdbt.com/docs/platform/billing/how-pricing-works)). + +**Pick something else if** you don't use dbt. Great Expectations or Soda Core work without it. + +Starter lists five developer seats and 15,000 successful models built a month, so the "per user" price looks aimed at a small team. Our read, not a vendor statement. + +![dbt pricing page: Developer free, Starter 100 dollars per user a month, Enterprise and Enterprise plus custom](/img/blog/2026/10/best-data-quality-tools--dbt-pricing-plans-quality.webp) + +*dbt pricing page, October 2026.* + +### 4. Elementary: adding alerts to a dbt project + +![Elementary home page showing its headline and main navigation](/img/blog/2026/10/landing-elementary.webp) + +*Elementary home page, October 2026.* + +**At a glance:** An open-source command line tool and dbt package that turn your dbt test results into a report and alerts. + +Elementary's GitHub page calls its tool the open-source CLI for dbt-native data observability. The Elementary dbt package collects results and feeds a report and alerts to Slack and Microsoft Teams. Anomaly detection tests are added as normal dbt tests. + +The open-source tool uses Apache 2.0. Elementary's open-source docs list 14 supported dbt adapters, including Snowflake, BigQuery, Redshift, Databricks and PostgreSQL. + +**Where it fits** + +- Free to start, and the setup lives right in your dbt code. +- A 30-day free trial of the paid Elementary Cloud is listed on its [pricing page](https://www.elementary-data.com/pricing). +- Elementary says Cloud "can't access your data". That is the vendor's claim, and we did not test it. +- Alerts can go to Slack and Microsoft Teams, with custom channels and tagging of owners (GitHub). +- The CLI can send alerts and self-host the observability report, a view of your dbt runs and all dbt test results (OSS docs). +- Cloud's Scale plan lists anomaly detection, column-level lineage, incident management and an MCP server (pricing page). + +**Where it falls short** + +- The docs say the open-source tool "covers a single dbt project". Teams with several projects are pointed to Cloud. +- Cloud plans (Scale, Enterprise and Unlimited) all say "Talk to us" instead of a price. +- The open-source tool depends on dbt. Elementary's docs say Cloud can connect to a warehouse without dbt, which helps if you're not a dbt shop. +- SSO and RBAC are listed under Enterprise, not Scale (pricing page). +- The AI Layer add-on has its own credit-based pricing, also marked "Talk to us" (pricing page). +- The open-source CLI reads the results that the Elementary dbt package collects in your warehouse, so you install both the package and the CLI (GitHub). + +**Pick something else if** your data isn't in dbt. Soda Core and Great Expectations don't need it. + +Elementary says its pricing is based on seats and environments. Scale lists up to 10 editor seats and 1K tables, and Enterprise lists up to 20 editor seats, 40 viewer seats and 3K tables, with no dollar prices. The cost of an extra 1K tables is not shown. + +![Elementary Cloud pricing page showing Scale, Enterprise and Unlimited plans with seat and table limits and no dollar prices](/img/blog/2026/10/elementary-cloud-pricing.webp) + +*Elementary pricing page, October 2026.* + +### 5. Deequ: very large data on Apache Spark + +![Deequ home page showing its headline and main navigation](/img/blog/2026/10/landing-deequ.webp) + +*Deequ home page, October 2026.* + +**At a glance:** A free library from AWS (Amazon Web Services) Labs that runs "unit tests for data" on Spark. + +The Deequ repository on GitHub describes a library built on Apache Spark, written in Scala, with a Python wrapper called PyDeequ. Its repository lists data profiling, anomaly detection over time and automatic constraint suggestion, and its rule language includes completeness and uniqueness checks. + +Deequ uses Apache 2.0, and its latest release on GitHub, 2.1.0, came out on 2026-09-16. Note that it's an open-source library, not an AWS managed service. + +**Where it fits** + +- Free, and built on Spark, an engine made for large datasets. +- It can suggest checks from the data, which helps when you have no idea where to start. +- A declarative rule language called DQDL is supported. +- It is designed for very large datasets: the README says "think billions of rows". +- It works on anything you can fit into a Spark dataframe, including CSV files, database tables, logs and flattened JSON (README). +- Computed metrics can be stored and queried with a MetricsRepository, and updated incrementally as data grows or partitions change (README). + +**Where it falls short** + +- You need a Spark setup and a matching Java version. Release 2.1.0 and later need Java 11, and each release targets specific Spark versions, so check before you install. +- The repository says row-level checks in DQDL mode work only for certain rule types, and dataset-level rules such as RowCount and Mean are marked as skipped. +- It's a library from AWS Labs, not an AWS managed service. +- The Deequ 2.x table lists Spark 3.1 through 3.5, and Spark 3.0 and earlier need a Deequ 1.x release (README). +- It is a Scala library, and Python use goes through PyDeequ, a separate Python interface (README). + +**Pick something else if** you have no Spark. Soda Core and Great Expectations are Python-based and do not need Spark. + +### 6. OpenMetadata: quality tests inside a free catalog + +![OpenMetadata home page showing its headline and main navigation](/img/blog/2026/10/landing-openmetadata.webp) + +*OpenMetadata home page, October 2026.* + +**At a glance:** An open-source data catalog with data quality tests built in. + +Per its docs, you can run tests at the table and column level, write no-code test cases from the screen and use a built-in profiler. Alerts fire when a test fails. Lineage (where data came from) and governance are covered too, all under the Apache 2.0 licence. + +**Where it fits** + +- One free tool for the catalog, the tests and the alerts, with no licence fee. +- No-code tests let analysts add checks without writing any Python. +- Its GitHub README says it has 130+ connectors. +- The docs say quality tests are supported for all of its supported database connectors, with alerts, a health dashboard and a resolution workflow for failures (docs). +- Tests can be set up in the UI or in a YAML config file, and you can write your own tests and test suites (docs). + +**Where it falls short** + +- You run and upgrade it yourself unless you use a managed offering. The docs' production options are Kubernetes, cloud-managed services or bare metal (docs). +- Collate, which sells managed OpenMetadata, posted about a free managed tier in June 2024 with a waitlist (Collate's blog post). We did not confirm it is open today. +- It's a full catalog with lineage and governance, so it's more than a test library. +- Quality is one feature among several in its docs. A team that only wants tests may not need all of it. +- Its connectors page marks each connector PROD or BETA, and says a BETA connector may have limitations or missing features. + +**Pick something else if** you only need pipeline tests. Great Expectations or dbt tests are lighter to carry. + +### 7. Monte Carlo: broad production monitoring with a paid platform + +**At a glance:** A paid observability platform that monitors your tables and traces issues. + +Monte Carlo's [pricing page](https://montecarlo.ai/pricing/) says all tiers include Agent Observability, ML Observability and Data Observability. Its platform page describes monitors, anomaly data and lineage that shows what a problem touches downstream. + +The pricing page lists four tiers: Start, Scale, Enterprise and Business Critical. Start allows up to 10 users, up to 1,000 monitors and 10,000 API calls a day. + +Customers "buy credits", and the cost per credit depends on the tier. No dollar figure is shown, and a free trial is not mentioned. So you're guessing until you talk to sales. + +**Where it fits** + +- Higher tiers add unlimited users and more API calls, up to 100,000 a day. +- Its platform page says a Triage Agent uses anomaly data, alert history, lineage, orchestrator signals and the business criticality of affected assets to identify priorities. +- The Scale tier lists SSO, SCIM, self-hosted storage, PII filtering and audit logging (pricing page). +- Integrations grow by tier: Scale adds lakes (Databricks, Hive, Glue, Azure Data Lake) and MySQL, Postgres and SQL Server, and Enterprise adds Oracle, SAP Hana, Teradata and Microsoft Fabric (pricing page). +- Business Critical adds a Dedicated Instance and disaster recovery that rolls over to a different region (pricing page). + +**Where it falls short** + +- No price is published, so you have to ask for one. +- Its pricing and platform pages show no open-source edition. +- Vendor claims on its site, such as faster resolution, come without a published method, so we do not repeat them. +- Start lists Data Warehouse, BI and ETL integrations. Lake and database integrations are listed from Scale up (pricing page). +- Support differs by tier: Start lists a 24-hour support SLA with self-guided onboarding, Scale 8+ hours and Enterprise 4+ hours (pricing page). +- Every tier is listed as "Pay per monitor", and no dollar figure for a credit or a monitor is shown (pricing page). + +**Pick something else if** you have a small team and a tight budget. Elementary OSS (open source software) or Soda Free cost $0. + +### 8. Informatica Data Quality and Observability: enterprise cleansing + +**At a glance:** A cloud service inside Informatica's data management suite. + +Informatica's [pricing page](https://www.informatica.com/pricing.html) says usage is measured in Informatica Processing Units (IPUs), and it shows no dollar price per unit. Its data quality page lists continuous profiling, cleansing, standardization, AI-generated rules and observability. It also mentions pay-for-what-you-use pricing, and its site links to free trials of other Informatica products. + +Informatica's own [cloud schedule](https://www.informatica.com/content/dam/informatica-com/en/docs/informatica-cloud-and-product-description-schedule.pdf) says standard IPUs "do not carry over to the next month". Its Flex option is measured over a year instead. + +**Where it fits** + +- Its data quality page lists cleansing and standardization. +- It sits in a suite with integration and governance products, so one vendor can cover a lot. +- It states a pricing model and links to trials of other products. +- Its Cloud and Product Description Schedule lists the Data Quality assets: rule specification, dictionary, cleanse, parse, deduplicate, labeler and verifier. +- It publishes rates in IPUs, so you can model usage before a quote: Data Quality is 0.38 IPU per compute hour for the first 2,000 hours and 0.152 above (schedule, version 39.2, effective 11 September 2026). +- A real-time Data Quality option runs assets such as rule specifications and mapplets in real time, and the schedule says it is optimized for low-latency, low-volume use (schedule). + +**Where it falls short** + +- No dollar price per IPU is shown on its pricing page, just a quote request. An [AWS Marketplace listing](https://aws.amazon.com/marketplace/pp/prodview-vetdnosd4u6oe) for the wider cloud platform shows one bundle of 120 IPUs a month at $131,760 for 12 months. That is a bundle list price, not a rate card, and it covers more than data quality. +- It's a proprietary cloud service. +- Standard monthly units that don't carry over can waste spend in a quiet month. Our read: that's the one to ask about. +- If usage passes the subscription, the monthly IPU model requires you to subscribe to more IPUs for the rest of the period, and Flex IPU charges an overage fee whose rate is not published (schedule). The Overage Protection add-on requires the monthly IPU model and does not apply to Flex IPU. +- Address verification inside Data Quality Services needs a separate Premium Address Cleansing subscription or enough IPUs (schedule). + +**Pick something else if** you only need rules in a pipeline. Free tools such as Soda Core cover that. + +### 9. Ataccama ONE: governance-led teams that want rules and cleansing + +![Ataccama ONE home page showing its headline and main navigation](/img/blog/2026/10/landing-ataccama.webp) + +*Ataccama ONE home page, October 2026.* + +**At a glance:** A data quality and governance platform, with a cloud option. + +Ataccama's data quality page lists automated checks, monitoring, anomaly detection and remediation. The page says an AI agent writes and deploys rules, and that rules can run inside pipelines or as native Snowflake functions. We did not test either claim. + +The platform works across multi-cloud and hybrid setups, per its page. + +**Where it fits** + +- Its page lists rules, monitoring and remediation in one platform. +- Its page mentions pushdown processing (running rules where the data sits), which it ties to security and performance. +- It supports hybrid setups, for companies that keep some systems on their own servers. +- No-code transformation plans can standardize values such as country codes, phone numbers and SKUs (page). +- Reports can be viewed in the platform or sent to Tableau or Power BI through an API (page). +- It detects similar rules and prevents duplicates, and the page says it streamlines versioning and approvals (page). + +**Where it falls short** + +- The page we read shows no prices and no free trial. It offers an interactive walkthrough instead. +- It quotes return-on-investment and time-saved percentages with no method, so we won't repeat them. +- Connector counts weren't published on the page we read. +- The same page lists a data catalog, business glossary, data marketplace, reference data and multidomain mastering beside data quality, so it is a wide platform rather than a single-purpose checker. + +**What users say:** We found no substantive public review or thread about Ataccama that we could open, because the major review sites block automated readers. Independent discussion is thin too, so we're not going to invent praise or complaints. + +**Pick something else if** you want to try before you talk to sales. Soda, Great Expectations and Elementary all have a free way in. + +## Two others worth a look + +Anomalo is an observability product that says it works in your own private cloud network (VPC, or virtual private cloud) or as a hosted service. Its home page shows no price and points to a demo. DataHub, another open-source catalog under Apache 2.0, lists assertions and data contracts among its quality features, per its docs. + +## Which tool fits you? + +No budget approved yet? Soda Free and Elementary OSS cost $0, and so does GX Core. Self-hosted tools cost servers and your time, and free cloud plans come with usage limits. + + + +## Your first week with a free tool + +1. **Pick the five columns your reports lean on most.** Think order IDs, dates and amounts. +2. **Add `unique` and `not_null` to every ID.** One duplicated or empty ID can quietly double-count an order. +3. **Add `accepted_values` to status columns.** A new, misspelled status then fails a test instead of silently vanishing from a chart. +4. **Add `relationships` between tables.** It catches an order that points to a customer who doesn't exist. +5. **Send failures to one chat channel.** A test nobody sees is ONLY a file. + +Run it for a week before you shop for anything bigger. The failing tests show which tables deserve a monitoring tool. + +## Questions to ask a paid vendor + +Get the answers in writing. + +- What is one credit, unit or table worth in dollars on my tier? +- What counts toward usage: tables, monitors, rows scanned or users? +- Is there a trial or proof of concept on my own data? +- Which of my sources and warehouse are supported today, not on the roadmap? +- What happens to unused units at the end of the period? +- Can I export my rules and results if I leave? + +## Where data quality fits in the pipeline + +Quality checks sit after data has been loaded, and sometimes after it's been transformed. The tools here don't copy data between systems; if your tables come from database replication, checks such as row counts compare a source against its copy. + +## Where OLake fits + +[OLake Go](/docs/) is an open-source extract-and-load tool with no transformation step. It copies databases such as Postgres, MySQL, MongoDB and SQL Server into Apache Iceberg tables, using [any of the catalogs our docs list](/docs/understanding/compatibility-catalogs/). Once the copy lands, those Iceberg tables are where a quality tool can run its checks, such as a row count against the source. OLake Go writes Iceberg or Parquet, so the checks come from the tools above. + +## FAQ + + + +## Conclusion + +Start with the job, not the brand. Most teams can begin today for $0 with dbt tests, Great Expectations Core, Soda Core or Elementary. Move to a paid platform only after you know which tables hurt most, and ask each vendor for a written price. + + diff --git a/compare/2026-10-10-what-is-matillion.mdx b/compare/2026-10-10-what-is-matillion.mdx index a9ee1a81..8f51a49e 100644 --- a/compare/2026-10-10-what-is-matillion.mdx +++ b/compare/2026-10-10-what-is-matillion.mdx @@ -5,6 +5,7 @@ description: "What is Matillion? A plain guide to Matillion ETL and Maia, how it tags: [comparison, etl, data-pipeline-tools, data-ingestion, alternatives] authors: [priyansh] image: /img/blog/cover/what-is-matillion-cover.webp +date: 2026-10-04 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/what-is-matillion.json'; diff --git a/compare/2026-10-11-best-change-data-capture-tools.mdx b/compare/2026-10-11-best-change-data-capture-tools.mdx index d5958fb7..df0ccb8f 100644 --- a/compare/2026-10-11-best-change-data-capture-tools.mdx +++ b/compare/2026-10-11-best-change-data-capture-tools.mdx @@ -5,6 +5,7 @@ description: "Twelve change data capture tools compared: log-based or query-base tags: [comparison, cdc, data-pipeline-tools, data-ingestion, iceberg, best-of] authors: [priyansh] image: /img/blog/cover/best-change-data-capture-tools-cover.webp +date: 2026-10-05 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/best-change-data-capture-tools.json'; @@ -18,7 +19,7 @@ Short version: there is no single best change data capture (CDC) tool, because t Fivetran, Estuary, Airbyte and Artie suit teams that would rather have a vendor run the pipeline. Striim, Qlik Replicate and GoldenGate fit big Oracle estates, and AWS Database Migration Service (DMS) and Datastream fit teams that live on one cloud. Where your data has to land, say Apache Iceberg tables, cuts the list down fast. - **CDC is not one thing.** Log-based tools read the database's change log. Query-based tools just ask, on a schedule, what changed, and that matters most for deletes and source load. -- **Where the data lands decides your shortlist.** Only some tools write Apache Iceberg, and [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html), for one, has no Iceberg target. +- **Where the data lands decides your shortlist.** Only some tools write Apache Iceberg, and the [AWS DMS target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) does not include it. @@ -82,7 +83,7 @@ We left out the broad extract, transform, load (ETL) suites where CDC is just on | Striim | Iceberg on Google Cloud Storage or Amazon S3 Tables | Contact us (Developer tier is free) | | Qlik Replicate | Iceberg through Qlik Open Lakehouse | Not published on Qlik's pages | | Oracle GoldenGate | Iceberg handler in the DAA guide; OCI GoldenGate also lists Iceberg | Per processor or user; managed per compute minute | -| AWS DMS | S3 files; no Iceberg target | Instance or DCU hours | +| AWS DMS | S3 files; [Iceberg is not on its target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) | Instance or DCU hours | | Google Datastream | BigQuery, Cloud Storage, Iceberg tables (append-only) | Per GiB processed | Sources: [Estuary](https://estuary.dev/pricing/), [Airbyte](https://airbyte.com/pricing), [Artie](https://www.artie.com/pricing), [Striim](https://www.striim.com/pricing/), [Qlik](https://www.qlik.com/us/pricing/data-integration-products-pricing), [Oracle price list](https://www.oracle.com/a/ocom/docs/corporate/pricing/technology-price-list-070617.pdf), [AWS DMS price list](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSDatabaseMigrationSvc/current/us-east-1/index.json), [Datastream](https://cloud.google.com/datastream/pricing) pricing pages. Checked October 2026. @@ -174,7 +175,7 @@ Docs: [PostgreSQL](/docs/connectors/postgres/), [MySQL](/docs/connectors/mysql/) - It is open source under Apache 2.0 ([GitHub](https://github.com/datazip-inc/olake)), and one tool does the first snapshot and then the change capture, with no per-row fee. - It supports eleven Iceberg catalog types ([compatibility page](/docs/understanding/compatibility-catalogs/)), including Glue, Hive, Unity and Representational State Transfer (REST) catalogs ([REST catalog page](/docs/writers/iceberg/catalog/rest/)). -- Kafka and S3 work as sources too ([connector overview](/docs/connectors/overview/)), and OLake Fusion, a companion product, handles Iceberg compaction and table maintenance ([Fusion docs](/docs/fusion/compaction/types-of-compaction/)). +- Kafka and S3 work as sources too, and OLake Fusion, a companion product, handles Iceberg compaction and table maintenance ([Fusion docs](/docs/fusion/compaction/types-of-compaction/)). - Full Refresh + CDC, Full Refresh + Incremental and strict CDC syncs are stateful and resumable: after a crash, a network failure or a manual pause, a sync resumes from its last checkpoint instead of starting over. The Iceberg writer also uses a two-phase commit that tracks per-chunk commit status, so syncs avoid inconsistencies and duplicate writes ([OLake Go overview](/docs/)). - Large tables are read in parallel chunks during the first snapshot, and each job sets its own maximum number of connections to the source database ([OLake Go overview](/docs/)). - New source columns are added to the Iceberg schema automatically, and widening type changes such as INT to LONG, FLOAT to DOUBLE and wider DECIMAL precision are handled ([schema evolution docs](/docs/features/schema/)). @@ -442,7 +443,7 @@ DMS reads Oracle with LogMiner or the binary reader, SQL Server with Microsoft's - Per the CDC page, views can be migrated only with full-load-only tasks, because CDC-only and full load plus CDC tasks include only tables. - The CDC start point is marked when the task is created and cannot be changed, and a PostgreSQL source does not support a custom CDC start time because PostgreSQL has no way to map a timestamp to an LSN. - For Oracle, starting a CDC task from an SCN or timestamp misses open transactions (those started before the start position and committed after it), unless you use the setting above. -- AWS says bidirectional replication runs as two tasks, is not a full multi-master solution, and has no conflict detection or resolution. AWS suggests data validation on both tasks to find inconsistencies. +- AWS says bidirectional replication runs as two tasks, is not a full multi-master solution, and [does not include conflict detection or resolution](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html). AWS suggests data validation on both tasks to find inconsistencies. **What users say:** In a Hacker News thread about a PostgreSQL migration (January 2024), [one commenter](https://news.ycombinator.com/item?id=39054889) wrote "AWS DMS did not work for my team and we proceeded with pglogical." @@ -567,7 +568,7 @@ Use the same test for every finalist. It is a checklist we suggest, not a result }, { question: "Q5. Which CDC tools can write Apache Iceberg?", - answer: "Per their docs, all except AWS DMS, which has no Iceberg target. The limits differ, though: Debezium's sink is community-maintained, GoldenGate's is documented in a separate guide, Datastream is append-only and Striim writes to Google Cloud Storage or Amazon S3 Tables." + answer: "Per their docs, all except AWS DMS, whose [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) does not include Iceberg. The limits differ, though: Debezium's sink is community-maintained, GoldenGate's is documented in a separate guide, Datastream is append-only and Striim writes to Google Cloud Storage or Amazon S3 Tables." }, { question: "Q6. Is change data capture real time?", diff --git a/compare/2026-10-12-azure-etl-tools.mdx b/compare/2026-10-12-azure-etl-tools.mdx index 074a820b..661b0772 100644 --- a/compare/2026-10-12-azure-etl-tools.mdx +++ b/compare/2026-10-12-azure-etl-tools.mdx @@ -48,7 +48,7 @@ We did not run the other tools. When we quote users, the words are exact and car | Tool | Kind | Fits | Database change capture | Billing unit | Where it is the wrong pick | | --- | --- | --- | --- | --- | --- | -| Fabric Data Factory | Microsoft SaaS | Copy jobs and pipelines into OneLake | Preview, short source list | Fabric capacity units | You need SQL Server Integration Services (SSIS) packages or managed private networks | +| Fabric Data Factory | Microsoft SaaS | Copy jobs and pipelines into OneLake | Preview, short source list | Fabric capacity units | You need SQL Server Integration Services (SSIS) packages or managed private networks, which the [compare page](https://learn.microsoft.com/en-us/fabric/data-factory/compare-fabric-data-factory-and-azure-data-factory) lists as "To be determined" in Fabric | | Azure Data Factory | Microsoft PaaS | Hybrid, SSIS and pay-per-use pipelines | Native CDC for a few connectors | Activity runs, DIU-hours, vCore-hours | You are starting fresh on Fabric | | Fabric mirroring | Microsoft SaaS | Read-only copies of databases in OneLake | Yes, per source | Free compute, Fabric capacity must run | You want to transform or write elsewhere | | Synapse pipelines | Microsoft PaaS | Teams already in a Synapse workspace | Not published on pages read | Not readable on the page | You want new Fabric features | @@ -126,11 +126,11 @@ ADF is, in Microsoft's words, a managed cloud service for hybrid ETL, ELT and da **Where it fits** -- It has a self-hosted runtime for on-premises data and runs SSIS packages, which Fabric doesn't offer yet. +- It has a self-hosted runtime for on-premises data and runs SSIS packages. Microsoft's [compare page](https://learn.microsoft.com/en-us/fabric/data-factory/compare-fabric-data-factory-and-azure-data-factory) lists the SSIS activity as available in ADF and N/A in Fabric Data Factory, and Azure-SSIS integration runtimes as "To be determined" in Fabric. - Microsoft's [pricing page](https://azure.microsoft.com/en-us/pricing/details/data-factory/data-pipeline/) shows the meters, and Microsoft's retail price feed lists a one-year reservation for data flows at $1,795, about $0.205 per vCore-hour by our arithmetic. - Integration runtime charges on the pricing page are "prorated by the minute and rounded up", so you pay by the minute rather than by the hour. - Microsoft's change data capture page says native CDC in mapping data flow uses the database's own change capture with "no timestamp or ID columns" needed, and that "Pipelines in ADF are batch only, but the CDC resource can run continuously." -- Its Iceberg format page describes an Iceberg sink in the Copy activity (IcebergSink) that writes to Azure Data Lake Storage Gen2. +- Its [Iceberg format page](https://learn.microsoft.com/en-us/azure/data-factory/format-iceberg) describes an Iceberg sink in the Copy activity (IcebergSink) that writes to Azure Data Lake Storage Gen2. **Where it falls short** @@ -170,7 +170,7 @@ Mirroring keeps copying a database into OneLake as Delta tables, an open table f - A running Fabric capacity is required, and storage beyond the free limit is billed. - Mirroring writes to "a single, read-only destination in OneLake," per the data movement guide, and Microsoft's comparison table shows no custom scheduling or table and column management for it. -- On SQL Server 2016 to 2022, a schema change makes mirroring fail until you disable and re-enable CDC on that table, per Microsoft's [SQL Server limitations page](https://learn.microsoft.com/en-us/fabric/mirroring/sql-server-limitations). +- On SQL Server 2016 to 2022, a schema change makes mirroring fail until you disable and re-enable CDC on that table, per Microsoft's SQL Server limitations page. - SQL Server mirroring copies up to 1,000 tables and does not replicate tables above that limit, per the same page. Microsoft's Azure PostgreSQL mirroring limitations page sets the same 1,000-table cap and allows one Fabric item per database. - On Azure Database for PostgreSQL, DDL changes and TRUNCATE TABLE on mirrored tables are not supported, and stopping mirroring and starting it again reseeds all the tables. - The same PostgreSQL page says columns of several data types, including inet, json, jsonb and xml, cannot be mirrored, and views, materialized views and partitioned tables are not supported. @@ -249,19 +249,18 @@ Microsoft's Azure Databricks docs (last updated 2026-09-11) describe connectors **At a glance** - Kind: open-source database replication, licensed [Apache 2.0](https://github.com/datazip-inc/olake) -- Azure guides: [Iceberg on Azure](/docs/writers/iceberg/azure/), [Azure Database for PostgreSQL](/docs/connectors/postgres/setup/azure/) and [Azure Database for MySQL](/docs/connectors/mysql/setup/azure/) +- Docs: [Iceberg on Azure](/docs/writers/iceberg/azure/), [Postgres connector](/docs/connectors/postgres/) and [MySQL connector](/docs/connectors/mysql/) - Runs: on your own infrastructure - Support: [contact the OLake team](/contact/) -OLake Go captures changes from Postgres, MySQL/MariaDB, MongoDB and SQL Server ([connector docs](/docs/connectors/overview/)), and it writes Apache Iceberg or Parquet. You run it yourself with [Docker](/docs/install/docker-cli/), [Helm on Kubernetes](/docs/install/kubernetes/) or the [OLake UI](/docs/install/olake-ui/). +OLake Go captures changes from Postgres, MySQL/MariaDB, MongoDB and SQL Server ([Postgres](/docs/connectors/postgres/), [MySQL](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/), [SQL Server](/docs/connectors/mssql/)), and it writes Apache Iceberg or Parquet. You run it yourself with [Docker](/docs/install/docker-cli/), [Helm on Kubernetes](/docs/install/kubernetes/) or the [OLake UI](/docs/install/olake-ui/). **What's good** -- Its [Iceberg on Azure guide](/docs/writers/iceberg/azure/) shows OLake Go writing Iceberg-compatible Parquet files directly to Azure Data Lake Storage (ADLS) Gen2 and updating the catalog, with Lakekeeper as the open-source REST catalog. +- Our [Iceberg on Azure guide](/docs/writers/iceberg/azure/) shows OLake Go writing Iceberg-compatible Parquet files directly to Azure Data Lake Storage (ADLS) Gen2 and updating the catalog, with Lakekeeper as the open-source REST catalog. - Lakekeeper is one of eleven catalog types on the [catalog compatibility page](/docs/understanding/compatibility-catalogs/), so the Azure route is not tied to one catalog. -- The [Azure PostgreSQL setup page](/docs/connectors/postgres/setup/azure/) covers Azure Database for PostgreSQL Flexible Server, using logical replication with the native `pgoutput` plugin and a publication. -- The [Azure MySQL setup page](/docs/connectors/mysql/setup/azure/) covers Azure Database for MySQL Flexible Server through binary logs, and recommends a read replica so change reading stays off your production primary. -- Both setup pages say where to connect: use Flexible Server, since Single Server has limited support and is being deprecated, and for PostgreSQL connect to the primary, because Flexible Server read replicas do not support logical replication. +- Our [Postgres connector docs](/docs/connectors/postgres/) cover change capture with the native `pgoutput` plugin, a replication slot and a publication, and list a guide for Azure Database for PostgreSQL. +- Our [MySQL connector docs](/docs/connectors/mysql/) cover the binary log settings (ROW format) that change capture needs, and list a guide for Azure Database for MySQL. #### 7. Fivetran: many connectors with no servers @@ -279,7 +278,7 @@ Fivetran's docs describe a Managed Data Lake Service that writes to Azure Data L **Where it fits** - Fivetran says it runs the pipelines for you (we did not test that), and its free plan covers up to the row limit. -- Per its docs, its data lake service writes Parquet files to your own storage and always creates Iceberg table metadata for them. +- Per its [Managed Data Lake Service docs](https://fivetran.com/docs/destinations/managed-data-lake-service), the service supports Azure Data Lake Storage, writes Parquet files to your own storage and always creates Iceberg table metadata for them. - Its database connector docs say database connectors sync new and modified data every 15 minutes by default, applied to the destination in batches with a merge operation. They list PostgreSQL logical replication and MongoDB change streams as further capture methods. - Its catalog docs say Fivetran Catalog is built on Apache Polaris and implements the Iceberg OpenAPI specification, so a compatible Iceberg REST client can connect. With Delta Lake metadata turned on, Fivetran publishes the Delta metadata to OneLake. - Its usage docs say a row is counted once a month however many times it syncs, and some re-syncs, such as historical data after you add a column, are free. @@ -302,7 +301,7 @@ Fivetran's docs describe a Managed Data Lake Service that writes to Azure Data L **At a glance** - Kind: ELT with a free self-hosted Core and a paid cloud - Core: free to self-host; you pay for servers and staff -- Cloud: Standard shows "Starting at $20 /month" with 5 credits included and extra credits at $5 each, a base and not a price for any amount of data (Airbyte's [pricing page](https://airbyte.com/pricing), October 2026) +- Cloud: Standard shows "Starting at $20 /month" with 5 credits included and extra credits at $5 each, a base and not a price for any amount of data (Airbyte's pricing page, October 2026) Airbyte's docs list Azure Blob Storage and Azure Table as sources, and Azure Blob Storage, Microsoft SQL Server and Databricks as destinations. @@ -426,17 +425,17 @@ Microsoft's cost guide says its own prices there are hypothetical. Data leaving Many teams now want open table formats so more than one engine can read the same data. Apache Iceberg is one such format, and Delta Lake is another, and Azure tools mostly write Delta. -| Tool | What its docs name as the output | The catch | +| Tool | Output, from each tool's own docs | The catch | | --- | --- | --- | | Fabric mirroring and Copy job | Delta tables in OneLake | Iceberg readers get virtual metadata: Iceberg V2, Parquet only, source tables under 5,000 commits, no private links | -| Azure Data Factory | An Iceberg sink to Azure Data Lake Storage Gen2 | Catalog support is not stated on the page | +| Azure Data Factory | An [Iceberg sink](https://learn.microsoft.com/en-us/azure/data-factory/format-iceberg) to Azure Data Lake Storage Gen2 | Catalog support is not stated on the page | | Databricks Lakeflow Connect | Delta streaming tables | Iceberg output is not stated on the pages we read | -| Fivetran | Parquet files in ADLS with Iceberg metadata always created, Delta metadata optional | OneLake catalog route needs the Delta metadata; no Iceberg position deletes | +| Fivetran | [Parquet files in ADLS with Iceberg metadata always created](https://fivetran.com/docs/destinations/managed-data-lake-service), Delta metadata optional | OneLake catalog route needs the Delta metadata; no Iceberg position deletes | | Airbyte | CSV or JSON Lines in Blob Storage | No Iceberg or Parquet on the page | | Informatica | ADLS and OneLake targets | The file format is not stated on the page we read | -| OLake Go | Iceberg-compatible Parquet files on ADLS Gen2, per its Azure guide | The guide uses the Lakekeeper REST catalog | +| OLake Go | Iceberg-compatible Parquet files on ADLS Gen2, from [our Azure guide](/docs/writers/iceberg/azure/) | Our guide uses the Lakekeeper REST catalog | -The Fabric and Iceberg details come from Microsoft's OneLake Iceberg page. +The Fabric and Iceberg details come from Microsoft's [OneLake Iceberg page](https://learn.microsoft.com/en-us/fabric/onelake/onelake-iceberg-tables). ## So which one should you pick? @@ -444,7 +443,7 @@ The Fabric and Iceberg details come from Microsoft's OneLake Iceberg page. | --- | --- | --- | | A live, read-only copy of a supported database for Fabric reports | Fabric mirroring | Free replication compute, no pipelines | | Scheduled, incremental loads of raw tables into Fabric | Fabric Copy job | Incremental and CDC modes, no pipelines | -| SSIS packages, private networks or an existing ADF estate | Azure Data Factory | Fabric lists both as "To be determined" | +| SSIS packages, private networks or an existing ADF estate | Azure Data Factory | The [compare page](https://learn.microsoft.com/en-us/fabric/data-factory/compare-fabric-data-factory-and-azure-data-factory) lists SSIS runtimes and managed virtual networks as "To be determined" in Fabric | | Your warehouse is already a Synapse workspace | Synapse pipelines | Sits beside the warehouse | | CDC from MySQL, PostgreSQL, SQL Server or Oracle into Databricks | Lakeflow Connect | Built-in, Delta output | | Hundreds of SaaS connectors and no servers | Fivetran or Hevo | Managed connector libraries | @@ -452,7 +451,7 @@ The Fabric and Iceberg details come from Microsoft's OneLake Iceberg page. | Analysts building pipelines visually | Matillion | Visual design | | A big, governed estate | Informatica | Its docs list ADLS Gen2, Synapse and OneLake as replication targets | | Iceberg tables on ADLS Gen2 from one tool | ADF Iceberg sink | Check catalog support first | -| Postgres or MySQL on Azure into Iceberg on ADLS Gen2 you run | OLake Go | Its Azure guide writes Iceberg through Lakekeeper | +| Postgres or MySQL on Azure into Iceberg on ADLS Gen2 you run | OLake Go | Our Azure guide writes Iceberg through Lakekeeper | @@ -476,7 +475,7 @@ The right tool depends on where your data lands. Before you commit, run one real | Change a column | Does the pipeline adapt, fail or ignore it? | Mirroring on SQL Server 2016 to 2022 fails until CDC is re-enabled on that table | | Delete a row | Does the target remove it, mark it, or keep it? | Fivetran counts deletes as paid rows, and its lake service has no Iceberg position deletes | | Leave it idle for a day | What does the bill show? | Lakeflow Connect's gateway is paid even when idle, and a Fabric capacity must keep running for mirroring | -| Read the output with a second engine | Can another tool open the files? | Fabric and Databricks write Delta, and only ADF, Fivetran and OLake Go document Iceberg on ADLS | +| Read the output with a second engine | Can another tool open the files? | [Fabric](https://learn.microsoft.com/en-us/fabric/onelake/onelake-iceberg-tables) and Databricks write Delta, and [ADF](https://learn.microsoft.com/en-us/azure/data-factory/format-iceberg), [Fivetran](https://fivetran.com/docs/destinations/managed-data-lake-service) and [OLake Go](/docs/writers/iceberg/azure/) each document Iceberg on ADLS | ## FAQs diff --git a/compare/2026-10-12-sql-server-cdc-tools.mdx b/compare/2026-10-12-sql-server-cdc-tools.mdx index a7bd37e4..fc1a7bdc 100644 --- a/compare/2026-10-12-sql-server-cdc-tools.mdx +++ b/compare/2026-10-12-sql-server-cdc-tools.mdx @@ -5,6 +5,7 @@ description: "SQL Server CDC tools compared: how native CDC works, what breaks i tags: [comparison, cdc, data-pipeline-tools, data-ingestion, best-of] authors: [priyansh] image: /img/blog/cover/sql-server-cdc-tools-cover.webp +date: 2026-10-06 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/sql-server-cdc-tools.json'; @@ -382,7 +383,7 @@ OLake Go is [open source under Apache 2.0](https://github.com/datazip-inc/olake) **At a glance** - Reads SQL Server through: MS-Replication and MS-CDC -- Lands data in: AWS stores such as S3 files; Apache Iceberg is not in its [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) +- Lands data in: AWS stores such as S3; the [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) names S3, Kinesis, Kafka and others, and not Apache Iceberg - Price: not covered here DMS uses two methods, per its [SQL Server CDC docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.CDC.html). 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. @@ -397,7 +398,7 @@ DMS uses two methods, per its [SQL Server CDC docs](https://docs.aws.amazon.com/ **Where it falls short** -- It has no Iceberg target in its [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html), so you add a second step to build Iceberg tables from the S3 files. +- The [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) names S3, Kinesis, Kafka and others, and not Iceberg, so Iceberg tables from DMS output would need a step you add. - Self-managed sources need a distribution database for MS-Replication ([docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.CDC.html)). That's extra set-up work. - The [source docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html) 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. - Per the [source docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html), changes to computed fields aren't replicated, truncate commands aren't captured, and renaming tables or columns with `sp_rename` isn't supported. @@ -521,7 +522,7 @@ Suppose a SQL Server 2022 Standard edition server has 300 tables. Twenty have no | --- | --- | --- | | Twenty tables without a key | Estuary CDC, AWS DMS (MS-CDC), Fivetran CDC | Airbyte CDC copies those tables by full refresh only; Fivetran change tracking skips them | | Two columnstore tables | Fivetran Teleport Sync, which its docs point to when CDC can't be enabled | CDC tools for those two tables, since [Microsoft says](https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/change-data-capture-and-other-sql-server-features) CDC can't be enabled on a clustered columnstore index | -| Iceberg on S3 | Fivetran Managed Data Lake Service, Airbyte S3 Data Lake, OLake Go | Datastream (Google Cloud Storage), Striim (Google Cloud Storage or Amazon S3 Tables, not plain S3), Fabric mirroring, AWS DMS without a second step | +| Iceberg on S3 | Fivetran Managed Data Lake Service, Airbyte S3 Data Lake, OLake Go | Datastream (Google Cloud Storage), Striim (Google Cloud Storage or Amazon S3 Tables, not plain S3), Fabric mirroring, AWS DMS (its [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) does not name Iceberg) | | Monthly schema changes | Estuary and OLake Go (switch to a second instance) | Fivetran needs a new capture instance each time | No single tool covers every row, so each path needs a compromise. @@ -571,7 +572,7 @@ If two rows fit, shortlist both and test them. }, { question: "Q6. Can I send SQL Server changes to Apache Iceberg?", - 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." + 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. The AWS DMS target list names S3, Kinesis, Kafka and others, and not Iceberg. }, { question: "Q7. What permissions do I need to enable SQL Server CDC?", diff --git a/compare/2026-10-13-best-data-replication-tools.mdx b/compare/2026-10-13-best-data-replication-tools.mdx index 3ce6122f..8ad9e84e 100644 --- a/compare/2026-10-13-best-data-replication-tools.mdx +++ b/compare/2026-10-13-best-data-replication-tools.mdx @@ -63,7 +63,7 @@ Most replication is one-way. The source takes the writes and the target is a rea ![One-way replication flows from source to copy; two-way needs loopback prevention and conflict rules so changes do not echo back](/img/blog/2026/10/best-data-replication-tools-one-vs-two-way.webp) -AWS DMS supports two-way replication on Oracle, SQL Server, MySQL, PostgreSQL and the two Aurora editions. Its docs are blunt about the limits. It is not a full multi-master solution, it has no conflict detection or resolution, and it suits data that is operationally segregated between the two nodes. +AWS DMS supports two-way replication on Oracle, SQL Server, MySQL, PostgreSQL and the two Aurora editions. Its [docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html) are blunt about the limits. It is not a full multi-master solution, it does not include conflict detection or resolution, and it suits data that is operationally segregated between the two nodes. ![AWS DMS documentation heading on bidirectional replication, with a note that it is not a full multi-master solution](/img/blog/2026/10/best-data-replication-tools--aws-dms-bidirectional-replication.webp) @@ -89,7 +89,7 @@ Cells for the other vendors state what their own docs say, and we did not test t | AWS DMS | Log-based | Oracle, SQL Server, MySQL, PostgreSQL, MongoDB | AWS managed | | Google Datastream | Per source | MySQL, Oracle, SQL Server, PostgreSQL, MongoDB | Google Cloud serverless | | Debezium | Log-based | MySQL, PostgreSQL, Oracle, MongoDB and more | Self-hosted | -| [OLake Go](/docs/connectors/overview/) | Log-based | PostgreSQL, MySQL, MongoDB, SQL Server | Self-hosted | +| [OLake Go](/docs/) | Log-based | PostgreSQL, MySQL, MongoDB, SQL Server | Self-hosted | | Estuary | Log-based | PostgreSQL, MySQL, Oracle, SQL Server | Managed, private or your cloud | | Airbyte | Log-based, on a schedule | PostgreSQL, MySQL, MongoDB, SQL Server | Core self-managed, or Cloud | | Artie | Log-based | PostgreSQL, MySQL, MongoDB, Oracle, SQL Server | Managed, or your cloud on Enterprise | @@ -101,7 +101,7 @@ Cells for the other vendors state what their own docs say, and we did not test t | Qlik Replicate | Many targets; Iceberg via Qlik Open Lakehouse, or a Cloudera Iceberg target | Not published (October 2026) | | Striim | Many targets; Iceberg on Google Cloud Storage or Amazon S3 Tables | Contact us; Developer tier free (October 2026) | | Fivetran HVA | Fivetran destinations | No separate HVA price found; Enterprise plan or higher (October 2026) | -| AWS DMS | Many targets, S3 files; no Iceberg target | Instance or DCU hours (October 2026) | +| AWS DMS | Many targets, S3 files; [Iceberg is not on its target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) | Instance or DCU hours (October 2026) | | Google Datastream | BigQuery, Cloud Storage, Iceberg (append-only) | Per GiB processed (October 2026) | | Debezium | Kafka; Iceberg through a community sink | Free licence, you pay for servers | | [OLake Go](/docs/understanding/compatibility-catalogs/) | Apache Iceberg or Parquet | Free licence, you pay for servers | @@ -273,7 +273,7 @@ Fivetran's page on High-Volume Agent (HVA) connectors lists Db2 for i, Oracle, S *OLake home page, October 2026.* **At a glance** -- Method: Log-based change capture ([connectors](/docs/connectors/overview/)) +- Method: Log-based change capture - Price: Free licence ([Apache 2.0](https://github.com/datazip-inc/olake)); you pay for infrastructure and staff OLake Go is open source. It reads [PostgreSQL](/docs/connectors/postgres/) logical replication, the [MySQL](/docs/connectors/mysql/) and MariaDB binlog, [MongoDB](/docs/connectors/mongodb/) change streams and [SQL Server](/docs/connectors/mssql/)'s native CDC, then writes Apache Iceberg or Parquet to storage you control. @@ -282,7 +282,7 @@ Engines such as Snowflake, BigQuery, Redshift, Athena, Spark and Trino can read **What's good** -- It does the first copy and then change capture in one tool ([connectors](/docs/connectors/overview/)). +- It does the first copy and then change capture in one tool. - It writes eleven Iceberg catalog types, and handles deletes with equality and positional deletes plus deletion vectors since v0.11.0 ([catalogs](/docs/understanding/compatibility-catalogs/)). - It installs with Docker Compose and a web UI, a Docker command line, or Helm on Kubernetes ([Docker Compose](/docs/install/olake-ui/), [Docker CLI](/docs/install/docker-cli/) and [Kubernetes](/docs/install/kubernetes/) install pages). - It follows schema changes: adds, drops and renames are detected, and widening type changes are documented ([schema evolution](/docs/features/schema/)). @@ -290,7 +290,7 @@ Engines such as Snowflake, BigQuery, Redshift, Athena, Spark and Trino can read - It uses a two-phase commit for the Iceberg destination in full refresh, incremental and CDC runs (MongoDB, PostgreSQL, MySQL and SQL Server), tracking per-chunk commit status so syncs avoid inconsistencies and duplicate writes ([capabilities](/docs/)). **Good to know** -- Change capture covers PostgreSQL, MySQL and MariaDB, MongoDB and SQL Server. Oracle, Db2 and S3 sources load by full refresh or incremental runs, and output is Apache Iceberg or Parquet on storage you choose ([connectors](/docs/connectors/overview/)). +- Change capture covers PostgreSQL, MySQL and MariaDB, MongoDB and SQL Server. Oracle, Db2 and S3 sources load by full refresh or incremental runs, and output is Apache Iceberg or Parquet on storage you choose. **Bottom line:** Pick OLake Go if you run PostgreSQL, MySQL, MariaDB, MongoDB or SQL Server and want Iceberg tables on storage you control ([docs](/docs/understanding/compatibility-catalogs/)). @@ -304,7 +304,7 @@ Engines such as Snowflake, BigQuery, Redshift, Athena, Spark and Trino can read **At a glance** - Method: Log-based -- Price: Replication instance hours or Serverless DCU hours, plus storage. AWS's DMS pricing page lists no separate CDC fee for DMS tasks. For example, dms.t3.medium lists at $0.0745 an hour in us-east-1, on-demand, Single-AZ ([AWS price list](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSDatabaseMigrationSvc/current/us-east-1/index.json), published September 2026, read 8 October 2026) +- Price: Replication instance hours or Serverless DCU hours, plus storage (AWS DMS pricing page, October 2026) AWS says DMS migrates databases with one-time moves or ongoing replication. A task can do a full load first and then switch to CDC. Under the hood, its CDC docs say it reads Oracle with LogMiner or a binary reader, SQL Server through Microsoft's CDC or replication, MySQL binary logs, PostgreSQL logical slots and the MongoDB oplog. @@ -319,10 +319,10 @@ AWS says DMS migrates databases with one-time moves or ongoing replication. A ta **Where it falls short** - AWS's CDC page says DMS ongoing replication has no service-level agreement for latency, that it does not provide real-time replication, and that latency can rise to several minutes or longer. -- The two-way mode has no conflict resolution. Loopback prevention tracks only DML, not DDL, and tasks that use it cannot commit changes in batches, so `BatchApplyEnabled` must be false (CDC page). +- The two-way mode does not include conflict detection or resolution. Loopback prevention tracks only DML, not DDL, and tasks that use it cannot commit changes in batches, so `BatchApplyEnabled` must be false (CDC page). - Views can be migrated in full-load tasks only. A CDC-only task or a full load that goes on to CDC includes tables only (CDC page). - PostgreSQL as a source does not support a custom CDC start time, and the CDC start point is fixed when the task is created, so a different one needs a new task. For Oracle, starting from an SCN or timestamp misses open transactions unless you use the 3.5.1 setting above (CDC page). -- Apache Iceberg is not among the target endpoints AWS's docs list for DMS, so Iceberg needs a separate step after the files land on S3. +- Apache Iceberg is not among the [target endpoints AWS's docs list for DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html), so Iceberg needs a separate step after the files land on S3. - On an S3 target, DMS records no ALTER statement when a column is added, dropped or renamed and does not alter earlier records, and the docs say batch apply to S3 might lose data (S3 target docs). #### 8. Google Cloud Datastream: BigQuery on Google Cloud @@ -496,8 +496,8 @@ Artie's architecture page says it reads the source transaction log and buffers c | Iceberg lake, self-hosted | Debezium Server or [OLake Go](/docs/understanding/compatibility-catalogs/) | Debezium: you need a vendor-supported sink | | Iceberg with a vendor in charge | Qlik Open Lakehouse or Fivetran | Your query engine needs position deletes (Fivetran) or you will not use Talend Cloud (Qlik) | | Large Oracle or mainframe estate | GoldenGate, Qlik Replicate or Striim | Iceberg must land in a plain S3 bucket (Striim: Iceberg Writer is GCS only, S3 Tables Writer needs S3 Tables), or you want a public price | -| One-off move into AWS | AWS DMS | You need Iceberg directly, or a promised latency | -| Two-way copies | GoldenGate, or DMS | Both sides edit the same rows (DMS has no conflict rules) | +| One-off move into AWS | AWS DMS | You need Iceberg directly ([not on its target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)), or a promised latency | +| Two-way copies | GoldenGate, or DMS | Both sides edit the same rows ([DMS two-way tasks do not include conflict detection or resolution](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html)) | @@ -561,11 +561,11 @@ We have not run this test on these tools. }, { question: "Q5. What are the best free or open-source data replication tools?", - answer: "Debezium uses an Apache 2.0 licence, [OLake Go](https://github.com/datazip-inc/olake) is open source under Apache 2.0 ([docs](/docs/connectors/overview/)), and PostgreSQL and MySQL include replication in the database. Airbyte Core is free to self-host, so read its licence terms before you call it open source. A free licence still isn't a free ride, because you pay for servers and the people who run them." + answer: "Debezium uses an Apache 2.0 licence, [OLake Go](https://github.com/datazip-inc/olake) is open source under Apache 2.0, and PostgreSQL and MySQL include replication in the database. Airbyte Core is free to self-host, so read its licence terms before you call it open source. A free licence still isn't a free ride, because you pay for servers and the people who run them." }, { question: "Q6. Can I replicate in both directions?", - answer: "Some can, but tread carefully. Oracle GoldenGate documents one-way, two-way and multi-directional setups, and AWS DMS supports two-way tasks without conflict resolution." + answer: "Some can, but tread carefully. Oracle GoldenGate documents one-way, two-way and multi-directional setups, and AWS DMS supports two-way tasks, though its [docs](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html) say they do not include conflict detection or resolution." }, { question: "Q7. Does replication slow down my source database?", @@ -577,7 +577,7 @@ We have not run this test on these tools. }, { question: "Q9. Which tools write Apache Iceberg?", - answer: "Per their docs: GoldenGate (its FAQ lists Iceberg; write details are in the separate DAA docs), Qlik, Striim (Google Cloud Storage or Amazon S3 Tables), Fivetran, Datastream (append-only), Debezium (community sink), Estuary, Airbyte and Artie (Enterprise). [OLake Go](/docs/understanding/compatibility-catalogs/) writes Apache Iceberg or Parquet, with eleven catalog types. AWS DMS has no Iceberg target." + answer: "Per their docs: GoldenGate (its FAQ lists Iceberg; write details are in the separate DAA docs), Qlik, Striim (Google Cloud Storage or Amazon S3 Tables), Fivetran, Datastream (append-only), Debezium (community sink), Estuary, Airbyte and Artie (Enterprise). [OLake Go](/docs/understanding/compatibility-catalogs/) writes Apache Iceberg or Parquet, with eleven catalog types. AWS DMS's [target list](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) does not include Iceberg." } ]} /> diff --git a/compare/2026-10-14-best-reverse-etl-tools.mdx b/compare/2026-10-14-best-reverse-etl-tools.mdx index 44d18232..31656da1 100644 --- a/compare/2026-10-14-best-reverse-etl-tools.mdx +++ b/compare/2026-10-14-best-reverse-etl-tools.mdx @@ -61,7 +61,7 @@ dbt Labs adds a caution from the modeling side: the models you sync out should n We kept the rules simple. A tool had to sync data from a warehouse or database into business tools, be maintained, and publish docs or pricing pages we could open. Then we compared the billing meter, published prices, free options, named warehouse sources, sync limits and what each tool needs inside your warehouse. -Fair warning: we did not run these tools. This is a careful reading of vendor pages, not a lab test. +Fair warning: we did not run the other tools. This is a careful reading of vendor pages, not a lab test. Where we found no substantive public discussion of a tool's reverse ETL product, we say so and don't invent praise. @@ -436,6 +436,10 @@ Short on time? Find your row, then go and try that tool. Sources: Polytomic pricing page, RudderStack pricing page. Checked October 2026. +## Where OLake fits + +[OLake Go](/docs/) works the other way round. It copies data from Postgres, MySQL/MariaDB, MongoDB and SQL Server into Apache Iceberg or Parquet, with change capture for those four sources ([Postgres](/docs/connectors/postgres/), [MySQL](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/), [SQL Server](/docs/connectors/mssql/)). That fills a lake that engines such as Athena, Spark, Flink and Trino can read ([compatibility](/docs/understanding/compatibility-engines/)). It does not send data on to CRMs or ad tools. + Want a quicker answer? Try this short quiz. @@ -449,7 +453,8 @@ Want a quicker answer? Try this short quiz. {question:"Q4. How much do reverse ETL tools cost?", answer:"It depends on the meter. RudderStack's Growth plan is $265 a month at 1 million events, Polytomic says pricing begins at $500 a month, and Hightouch has a free plan with 2 active syncs. Fivetran Activations bills by Monthly Active Rows with a free cap of 3,500 a month. Fivetran's Standard rates are in its Service Consumption Table. Segment, Hevo Activate and Hightouch self-serve show no dollar price on the pages we read."}, {question:"Q5. Do reverse ETL tools need write access to my warehouse?", answer:"Some do, so check. Segment keeps its sync state in a schema in your warehouse, RudderStack uses a schema you create, and Fivetran's Advanced engine needs read and write access. Fivetran's Basic engine needs read-only access and keeps state on its own side, but it is slower."}, {question:"Q6. Is there an open-source reverse ETL tool?", answer:"Yes. Multiwoven is open source under AGPL-3.0, and GitHub shows releases on September 29 and October 6, 2026. Airbyte also describes its platform as covering reverse ETL, and its docs call Core the free and open-source version you deploy locally or in your own infrastructure. Grouparoo's repository was archived in April 2022, so skip that one."}, -{question:"Q7. Do I need a reverse ETL tool?", answer:"Not always. For one or two destinations, a script or a general automation tool can be enough. Fivetran lists custom code, iPaaS tools and customer data platforms as the main alternatives, each with tradeoffs. A dedicated tool starts to pay off once your destinations, mappings and audiences multiply."} +{question:"Q7. Do I need a reverse ETL tool?", answer:"Not always. For one or two destinations, a script or a general automation tool can be enough. Fivetran lists custom code, iPaaS tools and customer data platforms as the main alternatives, each with tradeoffs. A dedicated tool starts to pay off once your destinations, mappings and audiences multiply."}, +{question:"Q8. Is OLake Go a reverse ETL tool?", answer:"No. It runs the other direction: [OLake Go](/docs/) copies Postgres, MySQL/MariaDB, MongoDB and SQL Server data into Apache Iceberg or Parquet, so it can fill the lake that engines read from. For sending warehouse data to CRMs and ad tools, use one of the tools above."} ]} /> ## Conclusion diff --git a/learn/2026-09-30-oltp-vs-olap.mdx b/learn/2026-09-30-oltp-vs-olap.mdx new file mode 100644 index 00000000..bb8a0eb4 --- /dev/null +++ b/learn/2026-09-30-oltp-vs-olap.mdx @@ -0,0 +1,277 @@ +--- +slug: oltp-vs-olap +title: "OLTP vs OLAP: Differences, Examples and How to Choose" +description: "OLTP vs OLAP in plain language: what each does, a sourced comparison table, where each falls short, how HTAP fits, and why most firms use both." +tags: [etl, lakehouse, thought-leadership] +authors: [priyansh] +image: /img/blog/cover/oltp-vs-olap-cover.webp +--- +import BlogCTA from '@site/src/components/BlogCTA'; +import quiz from '@site/src/data/quizzes/oltp-vs-olap.json'; + +![OLTP vs OLAP cover showing an operational database, a data copy step and an analytics system](/img/blog/cover/oltp-vs-olap-cover.webp) + + + +The short version: OLTP (online transaction processing) is the database behind your app. It records orders, payments and sign-ups one at a time, fast and correctly. OLAP (online analytical processing) is where you ask the big questions, like sales by month, across years of stored history. + +Pick OLTP to run the business and OLAP to study it. Honestly, you'll probably end up with both, with data copied from the first into the second. + +- **OLTP handles lots of small jobs. OLAP handles a few big questions.** [AWS](https://aws.amazon.com/compare/the-difference-between-olap-and-oltp/) puts OLTP response times at milliseconds and OLAP at seconds or minutes. +- **They're built differently on purpose.** Microsoft describes [OLTP](https://learn.microsoft.com/en-us/azure/architecture/data-guide/relational-data/online-transaction-processing) as heavy writes with moderate reads, and [OLAP](https://learn.microsoft.com/en-us/azure/architecture/data-guide/relational-data/online-analytical-processing) as heavy reads and read-only. +- **Running big reports on your live database is risky.** Microsoft says it can be slow and can block other transactions. +- **"OLAP means cubes" is out of date, yes, really.** Microsoft says OLAP systems have moved toward massively parallel processing, and AWS says OLAP can also use relational databases. +- **You often don't have to pick one.** AWS says OLTP databases can feed an OLAP system, and some products try to do both jobs in one place, with limits listed below. + + + +Every fact below comes from a vendor's own documentation or a named reference page, read in October 2026. Each source is named beside its claim, and the main pages are linked once each. Fair warning: we did not run any of these systems ourselves, and the shop example is made up to show the idea. + +## OLTP vs OLAP: the short answer + +Picture a shop. The till and the website record each sale the moment it happens. That's OLTP. + +Now picture the monthly report that asks "which products sold best in each region this year?" That one's OLAP. + +AWS defines OLTP as storing and updating transactional data reliably and efficiently in high volumes. It defines OLAP as combining and grouping data so you can analyze it from different points of view. + +Microsoft says OLTP systems record business interactions as they occur. Its OLAP page says OLAP organizes large databases for complex calculations and trend analysis without disrupting transactional systems. + +The words are older than you'd think. Wikipedia says Edgar F. Codd, described there as the father of the relational database, [created the term OLAP in 1993](https://en.wikipedia.org/wiki/Online_analytical_processing). Keeping the two jobs apart has stayed a useful idea ever since. + +![AWS page on OLAP vs OLTP: OLAP for reports and trends, OLTP for orders, inventory and customer accounts](/img/blog/2026/10/aws-olap-oltp-comparison-table.webp) + +*AWS, Key differences: OLAP vs. OLTP, October 2026.* + +## How we checked + +Here's what we read: the AWS comparison page, Microsoft's two Azure Architecture Center pages, Wikipedia, and the documentation of ClickHouse, PostgreSQL, Snowflake and Google AlloyDB. + +No user opinions in this part. Each number has its source named beside it, and where two sources disagree, we show both. + +## OLTP vs OLAP comparison table + +Here's the side-by-side. It uses the AWS comparison page and Microsoft's OLTP and OLAP pages, named in the last column. The final two rows, the named limits and the "better choice" call, are the bits most pages leave out. + +| Question | OLTP | OLAP | Source | +| --- | --- | --- | --- | +| Main job | Record and update transactions | Analyze data for decisions | AWS | +| Typical workload | Heavy writes, moderate reads | Heavy reads, read-only | Microsoft | +| Data it holds | Real-time data from one source | Historical, combined data from many sources | AWS | +| Layout | Normalized or denormalized tables (normalized means data split into small, non-repeating pieces) | Star or snowflake schema (a central table of facts ringed by lookup tables) | AWS, Microsoft | +| Typical response time | Milliseconds | Seconds or minutes | AWS | +| Typical size | Gigabytes (AWS); MBs to a few TBs (Microsoft) | Terabytes to petabytes (AWS); hundreds of GBs to multiple PBs (Microsoft) | AWS, Microsoft | +| Guarantees | Strong consistency; atomic, consistent, isolated, durable (ACID) transactions | No transactions, no locking (in Microsoft's semantic-model table) | Microsoft | +| Availability | High priority, with multiple data backups | A low-priority concern, because the main use is analytics | AWS | +| Changing data | Updates and appends are normal | Typically refreshed on a slower schedule | Microsoft | +| Named limit | Big aggregate reports are resource-intensive and can block other transactions | Data is refreshed at slower intervals, and it needs data cleansing and ongoing upkeep to stay current | Microsoft | +| Better choice when | A delay hurts day-to-day work | You need complex analysis, simple reports or fast, consistent totals without slowing the live system | Microsoft | + +The two sources don't agree on sizes. Both describe typical ranges, so treat them as rules of thumb, not hard limits. AWS's own text also says OLAP processing can take minutes to hours, so its table figure is a typical case. + +![Microsoft Learn table of typical OLTP traits: highly normalized, ACID guarantees, heavy writes, moderate reads, MBs to a few TBs](/img/blog/2026/10/oltp-vs-olap--microsoft-oltp-d.webp) + +*Microsoft Learn, Online Transaction Processing (OLTP), October 2026.* + +![Microsoft Learn table of typical OLAP traits: no transactions, no locking, heavy reads, hundreds of GBs to petabytes](/img/blog/2026/10/oltp-vs-olap--microsoft-olap-d.webp) + +*Microsoft Learn, Online Analytical Processing, October 2026.* + +## Same question, two kinds of query + +Let's see the difference in practice, using that made-up shop. These two queries were written for this page. They're not from a vendor. + +```sql +-- OLTP: one order, a few rows, answer in milliseconds +SELECT * FROM orders WHERE order_id = 1042; + +-- OLAP: a total over every order, only two columns needed +SELECT region, SUM(amount) FROM orders GROUP BY region; +``` + +The first touches one record. That second query reads every record but only cares about two fields from each. ClickHouse's docs draw the same line: [transactional queries read and write just a few rows, while analytics queries routinely process billions or trillions of rows](https://clickhouse.com/docs/intro). + +## Example systems for each job + +A product name doesn't make a system OLTP or OLAP. The job does. Below is what the vendors themselves file under each job. + +| Job | Examples the vendor names | Source | +| --- | --- | --- | +| OLTP | Azure SQL Database, SQL Managed Instance, SQL Server on Azure VM, Azure Database for MySQL, Azure Database for PostgreSQL, Azure Cosmos DB | Microsoft OLTP page | +| OLAP | Microsoft Fabric, SQL Server with columnstore indexes, Azure Analysis Services, SQL Server Analysis Services | Microsoft OLAP page | +| OLAP | ClickHouse, described as a column-oriented database for OLAP | ClickHouse docs | +| OLAP and OLTP in one vendor | Snowflake standard tables for analytics, hybrid tables for short operational queries | Snowflake docs | + +Snowflake says that [standard tables should perform better on large analytical queries, while hybrid tables allow faster results on short-running operational queries](https://docs.snowflake.com/en/user-guide/tables-hybrid). So even inside one product, the two jobs get two table types. + +## What is OLTP? + +Ever paid for something online and wondered if the shop really got your order? OLTP is the system that makes sure it did. It sits behind an app and keeps a correct record, and AWS names payments, customer data management and order processing as typical jobs. + +Its big promise is simple. A transaction either fully happens or doesn't happen at all. + +Atomic means all or nothing, and consistent means always leaving the data valid, as Microsoft puts it. It points to four formal properties known as ACID (atomicity, consistency, isolation and durability). Skip that, and you could pay with no order saved. + +Lots of people hit the system at once, so OLTP databases work hard to keep users out of each other's way. PostgreSQL's docs, for example, say that under its concurrency model [reading never blocks writing and writing never blocks reading](https://www.postgresql.org/docs/current/mvcc-intro.html). That's how one customer can browse while another pays. + +Microsoft lists Azure SQL Database, Azure Database for MySQL and Azure Database for PostgreSQL among its OLTP stores. It also lists Azure Cosmos DB, which it suggests for nonrelational data. So OLTP is a job, not one kind of product. + +### Where OLTP falls short + +Here's the catch, and Microsoft is direct about it. Reports that add up millions of transactions are very resource-intensive for an OLTP system, can be slow and can block other transactions. It notes exceptions, such as a well-planned schema. + +Highly normalized data also makes reporting queries messy, because they need many joins (steps that stitch tables back together). Piling all your history into one table slows queries too. + +Microsoft's usual fix is simple. Keep a recent window, such as the current fiscal year, in the OLTP system, and send older history to a data mart or data warehouse. + +## What is OLAP? + +OLAP is the part that looks back. It's built to answer questions about the past in bulk, and Microsoft says OLAP databases are optimized for heavy reads and low writes, are modeled and cleansed for analysis, and often keep historical data for time-series work. + +The classic picture of OLAP is a data cube, where each side is a way of slicing the data, such as product, region and month. Wikipedia names three flavors: MOLAP (multidimensional arrays), ROLAP (relational databases) and HOLAP (a mix of both). + +These days the cube is just one option. Microsoft says OLAP systems are moving to massively parallel processing, where many machines share the work of one query. AWS adds that OLAP can use relational databases too. + +What matters is that these systems are built for reading, not for recording sales. + +Microsoft also describes a semantic layer, which renames columns in friendlier terms and defines the business calculations. One option it describes is giving users direct access to the raw database, which it says typically leads to several people reporting the same metric with different results. A semantic model fed from a data warehouse, it says, gives all users a single source of truth. + +### Where OLAP falls short + +OLAP isn't magic either. Per Microsoft, OLAP stores typically refresh at much slower intervals than OLTP systems, so they suit strategic decisions, not instant answers. You also have to plan data cleansing and ongoing upkeep to keep them current. + +And please don't record a sale in one. In Microsoft's semantic-model table, OLAP lists no transactions and no locking, and its cube-style stores typically need recomputing to take updates. + +## Why they are built differently: rows vs columns + +This is the idea behind most of the table above. In a row store, each record is kept together, so finding one order is quick. A column store keeps each field together, so adding up one field across millions of records is quick. + +ClickHouse's docs say that in its column-oriented design only the columns a query needs are read from disk. The same docs say transactional queries finish in milliseconds. + +Here's a small illustration, made up for this page. Say your shop has 10 million orders with 20 fields each. "Show order 1042" wants one whole row, which a row store hands over in one piece. + +"Total sales by month" wants just two fields from all 10 million rows. A column store can read those two without touching the other 18. That's the whole trick. + +Column layouts have a cost too. Google's AlloyDB docs, for example, say that [frequent updates to rows invalidate columnar data](https://docs.cloud.google.com/alloydb/docs/columnar-engine/about). + +![OLTP records orders one row at a time, then a copy feeds an OLAP system answering questions over many rows](/img/blog/2026/10/oltp-vs-olap-two-systems.webp) + +## One order, from OLTP to OLAP + +Let's walk through the made-up shop once more. A customer places order 1042. The app writes it to the OLTP database, which confirms in milliseconds that the payment and the stock change either both happened or neither did. + +Overnight, a copy of that day's orders lands in the OLAP system. The next morning the finance team opens a dashboard and sees revenue by region for the month. Nothing the dashboard did touched the live database. + +The catch is the gap. That dashboard is a day behind. + +For a monthly report, that's fine. For "is this item in stock right now?", it's wrong, and that question has to go to the OLTP side. + +## How data moves from OLTP to OLAP + +So how does the data get across? Usually it's a copy, and in Azure, Microsoft says, data in OLTP systems such as Azure SQL Database is copied into OLAP systems such as Fabric or Analysis Services. AWS says OLTP databases can be one of several sources for an OLAP system. + +AWS also notes that OLTP data may be cleared once it's loaded into a warehouse or lake. That lines up with Microsoft's advice to keep only a recent window in the live database. + +There are two common ways to make the copy. One is a scheduled batch, such as nightly. The other is change data capture (CDC), which reads the database's own log of changes and sends only what changed, so your copy stays closer to current. + +Our read: a nightly batch is often a perfectly fine start, because CDC takes extra setup. + +## What about HTAP, one system for both? + +Wouldn't it be nice if one system did everything? That's the pitch behind HTAP, short for hybrid transactional and analytical processing. Microsoft says most workloads aren't entirely OLTP and often need real-time reporting, and it calls that HTAP. + +Vendors build it in different ways, and two of the three below state limits on the pages we read. + +| Product | How it mixes the two | Limit the vendor states | +| --- | --- | --- | +| SQL Server columnstore | Updateable nonclustered columnstore indexes (since SQL Server 2016) allow OLTP and OLAP on one platform without separate data copies (Microsoft) | Not stated on the page we read, so check before relying on it for large, multi-source analytics | +| Snowflake hybrid tables | A row-based engine with row locking, joinable with standard tables (Snowflake) | Larger storage footprint than standard tables, and only AWS and Azure commercial regions | +| AlloyDB columnar engine | Adds a column store of selected columns to speed scans and aggregates (Google Cloud) | Frequent row updates invalidate columnar data, and only some data types work | + +![Snowflake hybrid tables page with the note that they are available in AWS and Azure commercial regions only](/img/blog/2026/10/oltp-vs-olap--snowflake-hybrid-a.webp) + +*Snowflake documentation, Hybrid tables, October 2026.* + +AWS says Amazon Aurora can run both OLTP and complex OLAP workloads. Microsoft says SQL Server's updateable columnstore indexes remove the need for separate OLTP and OLAP systems. Both are vendor claims we did not test, and none of the vendors we read says one system suits every case. + +Our read: HTAP may fit modest reporting on live data. Ask the vendor how much reporting the live side can take before the app slows, and test it on your own workload before you bet on it. + +## Common mix-ups + +**Myth: OLAP is always slow.** Not quite. AWS puts OLAP at seconds or minutes, but ClickHouse's own docs describe real-time analytics as returning a result in under a second, a claim we did not test. The speed depends on the product and the question. + +**Myth: OLTP is always a SQL database.** Nope. Microsoft lists Cosmos DB as an OLTP store, so the test is the job: fast, correct, small transactions. + +**Myth: OLAP means a cube.** Cubes are just the classic form, as covered above. + +**Myth: A data warehouse and OLAP are the same thing.** Close, but no. OLAP is the style of work, and a warehouse is a common place to do it. + +## What practitioners say about two OLAP systems + +Vendor pages tell you what a system is built for. Public forum threads show how people feel after living with it. These are single comments, so treat them as individual views, not a vote. + +| System | Kind of comment | One comment | +| --- | --- | --- | +| ClickHouse | Praise | A commenter on Hacker News, under "ClickHouse gets lazier and faster: Introducing lazy materialization" (April 2025), [wrote](https://news.ycombinator.com/item?id=43770780): "We migrated some analytics workloads from postgres to clickhouse last year, it's crazy how fast it is." | +| Snowflake | Complaint | A commenter on Hacker News, under "Distributed DuckDB Instance" (April 2026), [described](https://news.ycombinator.com/item?id=47791418) a workplace where others have been "hounding everybody to reduce credit usage". | + +We found no comparable public threads that speak for OLTP databases as a group, so we left that side out rather than stretch. We kept one praise and one complaint, and left out other comments we read. + +## When to use OLTP, OLAP, both, or neither + +Time to decide. The first three rows follow the Microsoft pages above, and the last two are our own judgment calls, labeled as such. + +| Your situation | Choose | Why | +| --- | --- | --- | +| An app records orders, payments or accounts, and delays hurt | OLTP | Built for fast, correct single transactions (Microsoft) | +| You need totals and trends across lots of history | OLAP | Built for heavy reads over large data (Microsoft) | +| You need reports without slowing the live app | OLTP plus a copy into OLAP | Microsoft says big reports can block transactions | +| You only need a few live reports on a small database | OLTP alone, or HTAP | Judgment call: fewer moving parts. Check the HTAP limits above | +| Your data is mostly files, logs or events with no transactions | Neither, to start | Judgment call: object storage and a query engine may be all you need | + +Once you do pick an OLAP store, Microsoft lists five questions to narrow the field: + +- Do you want a managed service? +- Do you need Microsoft Entra ID sign-in? +- Do you need data from several sources beyond your OLTP store? +- Do you want real-time analytics? +- Do you need pre-aggregated data, such as cubes or tabular models, so business users get consistent answers? + +![Decision path: questions about one record point to OLTP, questions about totals and trends over many records point to OLAP](/img/blog/2026/10/oltp-vs-olap-which-fits.webp) + +AWS says most companies use both together. So the better question is usually how to connect them, not which one to drop. Neither replaces the other, because they do different jobs. + +## One line on OLake + +If you want to copy [Postgres](/docs/connectors/postgres/), [MySQL](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/) or [SQL Server](/docs/connectors/mssql/) data into Apache Iceberg tables for the OLAP side, OLake Go is an [open-source (Apache 2.0)](https://github.com/datazip-inc/olake) option. It runs a full load and then reads the database log, and it writes Iceberg tables or Parquet files to storage you control. Setup guides are in the [OLake introduction](/docs/). + +Ready to test what you picked up? Here is a quick check. + + + +## FAQs + + + +## Conclusion + +OLTP and OLAP split one job into two: keep an accurate record now, and study it later. Fast, correct, current work goes to OLTP. Big questions over history go to OLAP. + +Each is poor at the other's job, and a single product that does both comes with limits you should test. + +For most teams, the practical answer is simple. Keep the OLTP database for your app and copy its data into an OLAP system. Then agree, out loud and with the people reading the reports, how fresh that copy needs to be. + +Last reviewed October 2026. + + diff --git a/learn/2026-10-01-data-migration-strategy.mdx b/learn/2026-10-01-data-migration-strategy.mdx index 6dad6f54..0513dd57 100644 --- a/learn/2026-10-01-data-migration-strategy.mdx +++ b/learn/2026-10-01-data-migration-strategy.mdx @@ -34,7 +34,7 @@ Not sure where to begin? Ask yourself one thing: how long can the business stop? | Not stop, and can live with a longer project | Trickle or phased | MongoDB: less downtime, longer project | | Not sure yet | Write the success test and rollback plan first | Both shape the choice | -Every fact below comes from vendor and project documentation we read in October 2026. We did not run these tools ourselves, so confirm current limits before you commit. +Every fact below comes from vendor and project documentation we read in October 2026. We did not run the other tools ourselves, so confirm current limits before you commit. ## What is a data migration strategy? @@ -105,6 +105,8 @@ About that third row. Google's guide calls a good migration consistent: complete The replication-based lane runs on change data capture (CDC), which reads a database's own log of changes and replays them on the target. Fair warning: not every database or tool supports it, so check your source before you pick this lane. +If the target is an Apache Iceberg lake, [OLake Go](/docs/) can do the initial load and then follow changes for Postgres, MySQL/MariaDB, MongoDB and SQL Server ([Postgres](/docs/connectors/postgres/), [MySQL](/docs/connectors/mysql/), [MongoDB](/docs/connectors/mongodb/), [SQL Server](/docs/connectors/mssql/)). It writes Iceberg or Parquet. The drain, switchover test and way back stay in your own plan. + ### How a near-zero downtime move runs Curious what "near-zero" looks like in practice? Google's guide breaks it into five phases plus a fallback. Here all six are in plain words. @@ -138,6 +140,7 @@ Okay, time to be practical. This list is our own, built from the cloud vendors' - **Remember what tools don't copy.** The [AWS DMS best practices page](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html) says DMS does not automatically create secondary indexes, foreign keys or user accounts on the target. Easy to forget, painful to find later. - **Delay constraints during a full load.** The same page says to drop or delay foreign keys and triggers during a full load and enable triggers right before cutover. +- **Check change capture on your source.** If the target is Iceberg, OLake Go follows changes for Postgres, MySQL/MariaDB, MongoDB and SQL Server ([our docs](/docs/)). - **Watch lag if you replicate changes.** AWS says ongoing replication is not real time, offers no service level agreement (SLA) for latency, and delay can reach several minutes or more under heavy load. - **Freeze schema changes.** Per Google's guide, avoid them until the draining phase is complete. @@ -241,7 +244,8 @@ Want to check what stuck? Try this short quiz. {question:"Q7. What are the types of data migration?", answer:"AWS names four: storage, database, application and business process migration. This guide is about moving data between systems, which covers the first three. IBM also separates online migration over a network from offline migration on shipped devices."}, {question:"Q8. Should you improve the system while you migrate it?", answer:"Usually not. AWS says refactor, the most complex of its seven strategies, is not recommended for large migrations, and it advises modernizing after the migration is complete. Our read: moving and redesigning at once makes errors hard to trace."}, {question:"Q9. When is shipping a storage device better than an online copy?", answer:"IBM says under 10 TB, shipping on a client-provided device is often the simplest and most cost-effective method, and up to multiple PB a provider device can be the most convenient. It also names shipping security as a risk, and says a vendor appliance kept longer than agreed can incur extra charges. And remember, a one-time copy doesn't keep changes flowing."}, -{question:"Q10. How long should you keep the old system after migrating?", answer:"No source gives a number. Google's guide says you sometimes keep the source databases as a fallback until the target is reliable, so let your own success test decide. Once it passes on live data, you can start planning the sign-off."} +{question:"Q10. How long should you keep the old system after migrating?", answer:"No source gives a number. Google's guide says you sometimes keep the source databases as a fallback until the target is reliable, so let your own success test decide. Once it passes on live data, you can start planning the sign-off."}, +{question:"Q11. Can I move a live database into Apache Iceberg?", answer:"Yes, with a tool that copies once and then follows changes. [OLake Go](/docs/) does this for Postgres, MySQL/MariaDB, MongoDB and SQL Server, and writes Iceberg or Parquet. Plan the drain, switchover test and rollback as for any replication-based move."} ]} /> ## Conclusion diff --git a/learn/2026-10-02-etl-pipelines.mdx b/learn/2026-10-02-etl-pipelines.mdx index f85e429a..8f82198f 100644 --- a/learn/2026-10-02-etl-pipelines.mdx +++ b/learn/2026-10-02-etl-pipelines.mdx @@ -5,6 +5,7 @@ description: "ETL pipelines explained in plain words: the three steps, a worked tags: [etl, data-pipeline-tools, data-ingestion] authors: [priyansh] image: /img/blog/cover/etl-pipelines-cover.webp +date: 2026-09-28 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/etl-pipelines.json'; diff --git a/learn/2026-10-03-what-is-a-data-pipeline.mdx b/learn/2026-10-03-what-is-a-data-pipeline.mdx index 45287f8c..5faa0cff 100644 --- a/learn/2026-10-03-what-is-a-data-pipeline.mdx +++ b/learn/2026-10-03-what-is-a-data-pipeline.mdx @@ -5,6 +5,7 @@ description: "What is a data pipeline? Its parts, six types compared with their tags: [data-pipeline-tools, etl, data-ingestion] authors: [priyansh] image: /img/blog/cover/what-is-a-data-pipeline-cover.webp +date: 2026-09-29 --- import BlogCTA from '@site/src/components/BlogCTA'; import quiz from '@site/src/data/quizzes/what-is-a-data-pipeline.json'; diff --git a/scripts/og-images.manifest.json b/scripts/og-images.manifest.json index cdb26af6..95b31ced 100644 --- a/scripts/og-images.manifest.json +++ b/scripts/og-images.manifest.json @@ -17,6 +17,9 @@ "/img/blog/cover/azure-etl-tools-cover.webp": "db7b79ab08d1a27c56df391a02a82bc246533843565bcf787733dbc69d388405", "/img/blog/cover/best-change-data-capture-tools-cover.webp": "23488501919176ee2e0ff5221095b3b0beb467ed4d68e02ce726822b6e0a8e30", "/img/blog/cover/best-data-integration-tools-cover.webp": "7ef2564ab932a042d42240d4178370f287c9c587994be769779baba3b3c1106a", + "/img/blog/cover/best-data-management-platforms-cover.webp": "cc0df26a82049fd610b9ace22311ece7d698aa6b30feed697f838bd6a2984261", + "/img/blog/cover/best-data-pipeline-tools-cover.webp": "ac9399ac859a2897e1f18978be0437a2896b823a51969ece8413982254990112", + "/img/blog/cover/best-data-quality-tools-cover.webp": "8905293840e50b834745cdfb17dcd3f432186817ddafc4a47d18422a46fb9a0b", "/img/blog/cover/best-data-lake-tools-cover.webp": "94f8414ef048f2b90f7a77250a6040985920ba59f38af37ed97ff02674035be5", "/img/blog/cover/best-data-replication-tools-cover.webp": "11e186d1a3f089017902e379cda96e7dc9e74333689f4088cb58557b20f2e512", "/img/blog/cover/best-reverse-etl-tools-cover.webp": "f9b408b7d106214a6ce74ec4e4e1b2c3f0dbde76c5e34881c87a54b3c4956d61", @@ -73,6 +76,7 @@ "/img/blog/cover/olake-iceberg-doris-banner.webp": "c7f6f848c319382ad8536123d69a4f56f529f41c9efeae499c98e52b2c55a1e1", "/img/blog/cover/olake-iceberg-trino-cover.webp": "13458c75bee9c82191f47558ec5f15b911f7668de6f0d800d83120c1c4de1c90", "/img/blog/cover/olake-on-kubernetes.webp": "c441c73322043e0bcc36a051d97614497a58569ada37a18575546c0497c752a8", + "/img/blog/cover/oltp-vs-olap-cover.webp": "b70c7018c3c8673a2f08254763d586695304f7b38367e6308eccd948878097e9", "/img/blog/cover/open-data-lakehouse-cover.webp": "0d24b17f7ff0946d131d91b667adfffef9a40b15260dfb1f53326f4ae7ed3a61", "/img/blog/cover/paimon-vs-iceberg-cover.webp": "3ddd527aeeb3a4bb9350647ee16b767a742eafdabf9b40d24f884d2da6d952b0", "/img/blog/cover/parquet-vs-iceberg.webp": "f95233fdd027f8b109404365cfdab38991a61fce2623c0ed506c2f059e9e4397", @@ -82,6 +86,7 @@ "/img/blog/cover/postgres-cdc-bigquery-iceberg-biglake-cover.webp": "542e4413e17cbacffb75ea95c7e9c1801498c5185abc44f6cd63cd46b874b220", "/img/blog/cover/postgres-to-iceberg-blog-cover.webp": "cf04db22e18c17e48adcaeda192b91fb268ec368e8c0a99ed2708e78ccaf2bed", "/img/blog/cover/postgres-to-iceberg-using-glue-cover.webp": "435675fbfb7d859670b9b588606918d0546e3f29aa414ed00c593f56fea7d6b2", + "/img/blog/cover/postgres-vs-mysql-cover.webp": "260d4ccf329ae92dc0dca087734075a02ae2ebdcb6849a662fe0b76a8670b34b", "/img/blog/cover/risingwave-alternatives-cover.webp": "60201d3356d3d3387af67114f6f661573b3c64d053d2fc54e7db308b7ca3decf", "/img/blog/cover/row_lineage_cover.webp": "73d838fb24bb65343324f08bfdc6078d9f34310bd7c16d40271f5f8da63dd0c2", "/img/blog/cover/s3-connector-cover-image.webp": "4b35304390a5d09db83aeab32773ae2cae0d2a5b653b8f2cef24f318939534d0", diff --git a/src/components/blog/PostCard.jsx b/src/components/blog/PostCard.jsx index baa27380..2e04cca5 100644 --- a/src/components/blog/PostCard.jsx +++ b/src/components/blog/PostCard.jsx @@ -9,6 +9,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl' * `priority` marks the first card of the page: its cover is loaded eagerly and at high priority * (it is the largest contentful paint element), every other cover is lazy. * `headingLevel` is the title's tag ('h2' in lists, 'h3' under a section heading). + * `showAuthor` is false on the list pages (every post shows the same author there, so the byline is left to the post page). * `showDescription` is false for the related posts at the end of a post (title and cover are enough there). */ export default function PostCard({ @@ -18,6 +19,7 @@ export default function PostCard({ half = false, headingLevel: Heading = 'h2', showDescription = true, + showAuthor = true, formatDate }) { const { permalink, title, date, description, frontMatter, authors } = @@ -57,7 +59,7 @@ export default function PostCard({ {showDescription && description &&

{description}

}
- {author && ( + {showAuthor && author && ( a.name).join(', ')}> {authorLink ? ( diff --git a/src/data/quizzes/aws-etl-tools.json b/src/data/quizzes/aws-etl-tools.json index 49a19804..2d60e026 100644 --- a/src/data/quizzes/aws-etl-tools.json +++ b/src/data/quizzes/aws-etl-tools.json @@ -25,7 +25,7 @@ "firehose", "olake" ], - "why": "your source is a SaaS app, and DMS reads databases while Firehose needs a stream" + "why": "your source is a SaaS app: DMS reads databases, Firehose takes event streams, and OLake Go moves databases" }, { "label": "A live database", @@ -42,7 +42,7 @@ "appflow", "firehose" ], - "why": "your source is a database, and AppFlow covers SaaS apps while the Firehose database preview ended" + "why": "your source is a database: AppFlow's overview names SaaS apps as sources, and the Firehose database preview ended" }, { "label": "Events already in Kafka or Kinesis", @@ -59,7 +59,7 @@ "hevo": 2, "zeroetl": 1 }, - "why": "you need a long connector list", + "why": "you need SaaS apps too, and OLake Go moves databases, not SaaS apps", "exclude": [ "olake" ] @@ -78,10 +78,12 @@ "fivetran": 2, "firehose": 2, "airbyte": 1, - "dms": 1, - "glue": 1 + "dms": 1 }, - "why": "you load Redshift" + "why": "you load Redshift, and OLake Go writes Iceberg and Parquet", + "exclude": [ + "olake" + ] }, { "label": "Files on S3", @@ -138,7 +140,7 @@ "airbyte": 3, "olake": 3 }, - "why": "Airbyte Core and OLake Go are free software you run yourself" + "why": "Airbyte Core is free to self-host and OLake Go is open source, and you run both yourself" }, { "label": "An AWS service is fine", @@ -177,7 +179,7 @@ "firehose": 2, "olake": 1 }, - "why": "you want changes to land quickly, and these read database logs or streams" + "why": "you want changes to land quickly, and these tools read database logs or streams, or list short sync intervals" } ] }, @@ -219,28 +221,28 @@ "name": "AWS Glue", "summary": "Serverless Spark jobs with the Glue Data Catalog, billed in DPU-hours.", "bestWhen": "your team writes Spark or Python and your data already lives in AWS.", - "watchOut": "we found no native log-based CDC for self-managed databases, a job needs at least 2 DPUs, and there is no free tier for ETL jobs.", + "watchOut": "we found no native log-based CDC for self-managed databases in its docs, a job needs at least 2 DPUs, and its pricing page shows no free tier for ETL jobs.", "href": "#1-aws-glue-best-for-spark-code-and-batch-jobs" }, "dms": { "name": "AWS DMS", "summary": "A managed service that copies a database, then keeps it current from the database logs.", "bestWhen": "you want to move or mirror a live database inside AWS.", - "watchOut": "it has no Apache Iceberg target, and AWS says there are no SLAs for CDC latency.", + "watchOut": "its target list names S3, Kinesis, Kafka and others but not Iceberg, and AWS says there are no SLAs for CDC latency.", "href": "#2-aws-dms-best-for-moving-a-live-database-into-aws" }, "zeroetl": { "name": "AWS Glue zero-ETL", - "summary": "Managed integrations that replicate SaaS apps and DynamoDB with no pipeline code.", + "summary": "Managed integrations that replicate SaaS apps and DynamoDB, built to minimize pipeline code.", "bestWhen": "your sources are supported SaaS apps or DynamoDB, or a self-managed database going to Redshift.", - "watchOut": "self-managed databases can only go to Redshift, and the source list is short.", + "watchOut": "for self-managed databases the docs say you can replicate only to a Redshift data warehouse, and ingestion from applications bills $1.50 per GB (US East, Ohio).", "href": "#3-aws-glue-zero-etl-best-for-saas-and-dynamodb-data-with-no-pipeline-code" }, "appflow": { "name": "Amazon AppFlow", "summary": "Managed SaaS-to-AWS flows, billed per flow run and per gigabyte.", "bestWhen": "a handful of SaaS apps need to land in S3 or Redshift.", - "watchOut": "its documented sources are SaaS apps, not databases, and we found no Iceberg destination named.", + "watchOut": "its overview names SaaS apps as sources, not databases, and does not mention Iceberg.", "href": "#4-amazon-appflow-best-for-small-saas-pulls" }, "firehose": { @@ -252,21 +254,21 @@ }, "olake": { "name": "OLake Go", - "summary": "Open-source replication of Postgres, MySQL/MariaDB, MongoDB and SQL Server (plus Oracle, Db2, S3 and Kafka sources) into Iceberg or Parquet.", + "summary": "Open-source replication with change capture for Postgres, MySQL/MariaDB, MongoDB and SQL Server (Oracle, Db2, S3 and Kafka load without it), writing Iceberg or Parquet.", "bestWhen": "your sources are databases and you want Iceberg or Parquet on storage you run.", "watchOut": "its output is Iceberg and Parquet, so it suits teams that want one of those on storage they run.", "href": "#6-olake-go-best-for-database-changes-into-iceberg-on-storage-you-own" }, "fivetran": { "name": "Fivetran", - "summary": "A fully managed ELT service with many connectors, billed on monthly active rows.", + "summary": "A managed ELT service that says it runs the pipelines for you, with many connectors, billed on monthly active rows.", "bestWhen": "you want the vendor to run everything and your row counts are predictable.", "watchOut": "busy tables push the bill up, and the rates sit in a separate Service Consumption Table.", "href": "#7-fivetran-best-for-many-connectors-with-no-servers" }, "airbyte": { "name": "Airbyte", - "summary": "Open-source ELT with a long connector list, plus a paid cloud.", + "summary": "ELT with a 700+ connector list, a self-hosted Core edition (free under the Elastic License 2.0) and a paid cloud.", "bestWhen": "you want connector choice and can host it yourself, or you like a low entry price on Cloud.", "watchOut": "database change capture runs as scheduled syncs, not a continuous stream, per Airbyte's docs, and Core needs servers and staff.", "href": "#8-airbyte-best-for-connector-choice-and-self-hosting" diff --git a/src/data/quizzes/azure-etl-tools.json b/src/data/quizzes/azure-etl-tools.json index dbbd5347..f90f02b1 100644 --- a/src/data/quizzes/azure-etl-tools.json +++ b/src/data/quizzes/azure-etl-tools.json @@ -19,31 +19,32 @@ "informatica": 1 }, "exclude": [ - "lakeflow" + "lakeflow", + "hevo" ], - "why": "you land in Fabric, and Lakeflow Connect writes into Databricks instead" + "why": "you land in Fabric, Lakeflow Connect writes into Databricks instead, and we found no Fabric destination in Hevo's docs" }, { "label": "Azure Databricks", "scores": { - "lakeflow": 3, + "lakeflow": 4, "airbyte": 2 }, - "why": "Databricks is where your analysts work" + "why": "you land in Databricks, where Lakeflow Connect writes Delta tables" }, { "label": "Azure Synapse or Azure SQL", "scores": { "hevo": 2, - "fivetran": 2, "informatica": 2, - "adf": 2, - "airbyte": 1 + "adf": 2 }, "exclude": [ - "lakeflow" + "lakeflow", + "olake", + "airbyte" ], - "why": "your target is not Databricks, and Lakeflow Connect writes Delta streaming tables into Databricks" + "why": "your target is Synapse or Azure SQL: Lakeflow Connect writes Delta streaming tables into Databricks, Airbyte lists no Synapse page, and OLake Go writes Iceberg or Parquet files" }, { "label": "Files in my own Azure Data Lake Storage", @@ -53,7 +54,10 @@ "informatica": 2, "olake": 3 }, - "why": "ADF can write Iceberg to ADLS Gen2, Fivetran's docs say its lake service writes Parquet there, OLake Go's Azure guide writes Iceberg to ADLS Gen2, and Hevo lists no ADLS destination in the docs we read" + "why": "ADF has an Iceberg sink to ADLS Gen2, Fivetran's lake service writes Parquet there, Informatica lists ADLS Gen2 targets, our OLake Go guide writes Iceberg to ADLS Gen2, and we found no ADLS destination in Hevo's docs", + "exclude": [ + "hevo" + ] } ] }, @@ -119,14 +123,14 @@ "airbyte": 1, "olake": 2 }, - "why": "you want database changes copied over, and OLake Go's docs cover Azure Database for PostgreSQL and MySQL Flexible Server" + "why": "you want database changes copied over, and these tools document change capture" }, { "label": "SSIS packages or a private network", "scores": { "adf": 3 }, - "why": "Microsoft lists SSIS and managed virtual networks as To be determined in Fabric, and ADF supports them" + "why": "Microsoft's compare page lists SSIS runtimes and managed virtual networks as To be determined in Fabric, and ADF runs SSIS packages with a self-hosted runtime for your own network" } ] }, @@ -159,9 +163,10 @@ "informatica": 3 }, "exclude": [ - "mirroring" + "mirroring", + "olake" ], - "why": "mirroring has a single read-only destination and no transforms" + "why": "mirroring has a single read-only destination and no custom scheduling or table and column management, and OLake Go does not transform data on the way" } ] }, @@ -191,7 +196,7 @@ "scores": { "informatica": 3 }, - "why": "Informatica publishes no dollar price per unit, so expect a quote, and its docs list several Azure replication targets" + "why": "we found no dollar price per unit on Informatica's pages, so expect a quote, and its docs list several Azure replication targets" } ] } @@ -201,7 +206,7 @@ "name": "Fabric Copy job", "summary": "Scheduled full, incremental or CDC copies into OneLake without building pipelines.", "bestWhen": "Fabric is your analytics home and you want scheduled, incremental loads.", - "watchOut": "CDC is in preview and leaves out PostgreSQL, MySQL and MongoDB, and SSIS and managed private networks are not there yet.", + "watchOut": "CDC is in preview and leaves out PostgreSQL, MySQL and MongoDB, and Microsoft's compare page lists SSIS runtimes and managed virtual networks as To be determined in Fabric.", "href": "#1-fabric-data-factory-copy-jobs-into-onelake" }, "mirroring": { @@ -227,14 +232,14 @@ }, "olake": { "name": "OLake Go", - "summary": "Open-source replication of Postgres, MySQL/MariaDB, MongoDB and SQL Server (plus Oracle, Db2, S3 and Kafka sources) into Iceberg or Parquet, with an Azure guide for ADLS Gen2.", + "summary": "Open-source change capture from Postgres, MySQL/MariaDB, MongoDB and SQL Server into Iceberg or Parquet, with an Azure guide for ADLS Gen2.", "bestWhen": "your sources are databases and you want Iceberg or Parquet on Azure storage you run.", "watchOut": "its output is Iceberg and Parquet, so it suits teams that want one of those on storage they run.", "href": "#6-olake-go-best-for-azure-databases-into-iceberg-on-your-own-storage" }, "fivetran": { "name": "Fivetran", - "summary": "A fully managed ELT service with many connectors and a free plan up to a row limit.", + "summary": "A managed ELT service that says it runs the pipelines for you, with many connectors and a free plan up to a row limit.", "bestWhen": "you want a vendor to run everything and your row counts are predictable.", "watchOut": "billing is by monthly active rows, deletes count as paid rows, and its lake service has no Iceberg position deletes.", "href": "#7-fivetran-many-connectors-with-no-servers" diff --git a/src/data/quizzes/best-change-data-capture-tools.json b/src/data/quizzes/best-change-data-capture-tools.json index d99db6c9..ee01b17a 100644 --- a/src/data/quizzes/best-change-data-capture-tools.json +++ b/src/data/quizzes/best-change-data-capture-tools.json @@ -13,20 +13,37 @@ "options": [ { "label": "A vendor runs it for me", - "scores": { "fivetran": 3, "estuary": 3, "airbyte": 1, "enterprise": 1 }, - "exclude": ["olake"], - "why": "you want a vendor to run it, and OLake Go runs on your own infrastructure" + "scores": { + "fivetran": 3, + "estuary": 3, + "airbyte": 1, + "enterprise": 1 + }, + "exclude": [ + "olake" + ], + "why": "you want a vendor to run it, and you run OLake Go yourself" }, { "label": "My team runs it on our own servers", - "scores": { "debezium": 3, "flink": 3, "olake": 3, "airbyte": 2, "enterprise": 1 }, + "scores": { + "debezium": 3, + "flink": 3, + "olake": 3, + "airbyte": 2, + "enterprise": 1 + }, "why": "you are happy to self-host" }, { "label": "My cloud's own service (AWS or Google)", - "scores": { "cloud": 3, "fivetran": 1, "estuary": 1 }, - "exclude": ["olake"], - "why": "you want a cloud service, and OLake Go runs on your own infrastructure" + "scores": { + "cloud": 3 + }, + "exclude": [ + "olake" + ], + "why": "you want your cloud's own service, and you run OLake Go yourself" } ] }, @@ -35,19 +52,40 @@ "options": [ { "label": "Apache Iceberg tables in my own storage", - "scores": { "olake": 3, "flink": 2, "airbyte": 2, "fivetran": 2, "debezium": 1, "estuary": 1, "enterprise": 1 }, + "scores": { + "olake": 3, + "flink": 2, + "airbyte": 2, + "fivetran": 2, + "debezium": 1, + "estuary": 1, + "enterprise": 1 + }, "why": "you want Iceberg tables you control" }, { "label": "A warehouse such as BigQuery", - "scores": { "fivetran": 3, "cloud": 2, "airbyte": 2, "estuary": 2, "enterprise": 1 }, - "exclude": ["olake"], - "why": "you want a warehouse writer, and OLake Go writes Iceberg and Parquet (its docs say engines can read those tables)" + "scores": { + "fivetran": 3, + "cloud": 2, + "airbyte": 2, + "estuary": 2, + "enterprise": 1 + }, + "exclude": [ + "olake" + ], + "why": "you want a warehouse writer, and OLake Go writes Iceberg and Parquet (warehouses can query those tables, per our compatibility page)" }, { "label": "Kafka topics, for many consumers", - "scores": { "debezium": 3, "flink": 2 }, - "exclude": ["olake"], + "scores": { + "debezium": 3, + "flink": 2 + }, + "exclude": [ + "olake" + ], "why": "you want a stream into Kafka, and OLake Go writes Iceberg and Parquet" } ] @@ -57,19 +95,42 @@ "options": [ { "label": "Postgres, MySQL, MongoDB or SQL Server", - "scores": { "olake": 3, "debezium": 2, "airbyte": 2, "estuary": 2, "fivetran": 2, "flink": 1, "cloud": 1 }, - "why": "these four are covered by almost every tool here" + "scores": { + "olake": 3, + "debezium": 2, + "airbyte": 2, + "estuary": 2, + "fivetran": 2, + "flink": 1, + "cloud": 1 + }, + "why": "the tools in the post's table list these four databases" }, { "label": "Oracle at large scale, or a mainframe", - "scores": { "enterprise": 3, "debezium": 1, "estuary": 1, "fivetran": 1, "cloud": 1 }, - "exclude": ["olake"], + "scores": { + "enterprise": 3, + "debezium": 1, + "estuary": 1, + "fivetran": 1, + "cloud": 1 + }, + "exclude": [ + "olake" + ], "why": "you need Oracle or mainframe capture, and OLake Go's change capture covers PostgreSQL, MySQL, MongoDB and SQL Server" }, { "label": "Databases plus many SaaS apps", - "scores": { "fivetran": 3, "airbyte": 3, "estuary": 2 }, - "why": "you need a long connector list" + "scores": { + "fivetran": 3, + "airbyte": 3, + "estuary": 2 + }, + "why": "you need SaaS apps too, and OLake Go's sources are databases, Kafka and S3", + "exclude": [ + "olake" + ] } ] }, @@ -78,18 +139,36 @@ "options": [ { "label": "Within the hour is fine", - "scores": { "airbyte": 3, "fivetran": 1, "olake": 1, "cloud": 1 }, + "scores": { + "airbyte": 3, + "fivetran": 1, + "olake": 1, + "cloud": 1 + }, "why": "scheduled syncs are enough" }, { "label": "Every few minutes", - "scores": { "airbyte": 1, "fivetran": 2, "estuary": 2, "olake": 1, "flink": 1, "enterprise": 1, "cloud": 1 }, + "scores": { + "airbyte": 1, + "fivetran": 1, + "estuary": 2, + "olake": 1, + "flink": 1, + "enterprise": 1, + "cloud": 1 + }, "why": "you want a short delay" }, { "label": "As close to continuous as I can get", - "scores": { "debezium": 3, "estuary": 3, "flink": 2, "enterprise": 1 }, - "why": "you want a continuous stream, not scheduled syncs" + "scores": { + "debezium": 3, + "estuary": 3, + "flink": 2, + "enterprise": 1 + }, + "why": "you want a continuous stream, not scheduled syncs: Debezium and Flink CDC stream events, and Estuary says millisecond latency (a vendor claim)" } ] }, @@ -98,18 +177,31 @@ "options": [ { "label": "Kafka", - "scores": { "debezium": 3, "flink": 1 }, + "scores": { + "debezium": 3, + "flink": 1 + }, "why": "Debezium can run inside Kafka Connect" }, { "label": "Flink", - "scores": { "flink": 3 }, + "scores": { + "flink": 3 + }, "why": "Flink CDC fits teams that already run Flink" }, { "label": "Neither, and I would rather not add them", - "scores": { "olake": 2, "airbyte": 2, "fivetran": 2, "estuary": 2, "cloud": 2, "enterprise": 1 }, - "why": "you do not want to run a streaming stack just for this" + "scores": { + "olake": 2, + "airbyte": 2, + "fivetran": 2, + "estuary": 2, + "cloud": 2, + "enterprise": 1, + "debezium": 1 + }, + "why": "you do not want to run a streaming stack just for this (Debezium Server runs without Kafka)" } ] } @@ -129,7 +221,7 @@ }, "olake": { "name": "OLake Go", - "summary": "Free, log-based CDC that copies database changes into Apache Iceberg or Parquet on your own storage.", + "summary": "Open-source, log-based CDC that copies PostgreSQL, MySQL, MongoDB and SQL Server changes into Apache Iceberg or Parquet on your own storage.", "bestWhen": "you run PostgreSQL, MySQL, MongoDB or SQL Server and want Iceberg tables you control.", "watchOut": "it runs on your own infrastructure and writes Iceberg and Parquet." }, @@ -153,15 +245,15 @@ }, "enterprise": { "name": "Striim, Qlik Replicate or GoldenGate", - "summary": "Enterprise platforms with deep Oracle support. Qlik Replicate also lists mainframe sources.", + "summary": "Enterprise platforms with documented Oracle log readers. Qlik Replicate also lists mainframe sources.", "bestWhen": "Oracle is your main source and you are fine talking to sales.", - "watchOut": "prices are hidden or complex, and their Iceberg support has limits, such as Striim's Iceberg Writer supporting only Google Cloud Storage, and Qlik's coming mainly from a separate feature." + "watchOut": "Striim and Qlik publish no prices and GoldenGate is priced per processor or user, and their Iceberg support has limits: Striim's Iceberg Writer supports only Google Cloud Storage (it documents a separate S3 Tables writer), and Qlik's comes mainly from a separate feature." }, "cloud": { "name": "AWS DMS or Datastream", "summary": "Cloud-native services for teams that live on one cloud.", - "bestWhen": "you are on AWS or Google Cloud and need migration or simple replication.", - "watchOut": "DMS has no Iceberg target and no latency guarantee, and Datastream's Iceberg output is append-only." + "bestWhen": "you are on AWS or Google Cloud and want migration or replication on one cloud.", + "watchOut": "AWS's DMS target list does not include Iceberg and its CDC page says there is no latency guarantee, and Datastream's Iceberg output is append-only." } } } diff --git a/src/data/quizzes/best-data-integration-tools.json b/src/data/quizzes/best-data-integration-tools.json index 02a6e32c..494cfba6 100644 --- a/src/data/quizzes/best-data-integration-tools.json +++ b/src/data/quizzes/best-data-integration-tools.json @@ -9,42 +9,176 @@ "questions": [ { "q": "Who will run it?", - "hint": "The post's trade: a vendor-run tool costs money and saves staff time, while a self-run tool costs staff time.", + "hint": "Self-run tools have no software fee, but you pay for servers and staff time.", "options": [ - { "label": "A vendor runs it for me", "scores": { "fivetran": 3, "hevo": 3, "estuary": 2, "airbyte": 1, "informatica": 1, "qlik": 1 }, "why": "you want a vendor to run the pipelines" }, - { "label": "My team runs it on our own servers", "scores": { "airbyte": 3, "code": 2, "olake": 2, "estuary": 1, "informatica": 1, "qlik": 1 }, "why": "your engineers will run it" }, - { "label": "Pipelines should live as code in Git", "scores": { "code": 3, "airbyte": 1 }, "why": "you want pipelines kept as code" }, - { "label": "I live inside one cloud", "scores": { "glue": 3 }, "why": "you work inside one cloud" } + { + "label": "A vendor runs it for me", + "scores": { + "fivetran": 3, + "hevo": 3, + "estuary": 2, + "airbyte": 1, + "informatica": 1, + "qlik": 1 + }, + "why": "you want a vendor to run the pipelines" + }, + { + "label": "My team runs it on our own servers", + "scores": { + "airbyte": 3, + "code": 2, + "olake": 2, + "estuary": 1, + "informatica": 1, + "qlik": 1 + }, + "why": "your engineers will run it" + }, + { + "label": "Pipelines should live as code in Git", + "scores": { + "code": 3, + "airbyte": 1 + }, + "why": "you want pipelines kept as code" + }, + { + "label": "I live inside AWS or Azure", + "scores": { + "glue": 3, + "adf": 3 + }, + "why": "you work inside AWS or Azure, where the post lists Glue and Azure Data Factory" + } ] }, { "q": "What are most of your sources?", "options": [ - { "label": "SaaS apps such as Salesforce", "scores": { "fivetran": 3, "hevo": 3, "airbyte": 3, "code": 1 }, "why": "you load many SaaS apps" }, - { "label": "Databases that need fresh data", "scores": { "estuary": 3, "qlik": 3, "fivetran": 2, "olake": 2 }, "why": "you need database changes with fresh data" }, - { "label": "Old systems under governance rules", "scores": { "informatica": 3, "qlik": 3 }, "why": "you have mainframes or governance rules" }, - { "label": "Mostly SQL, REST APIs and files", "scores": { "code": 3, "glue": 1, "airbyte": 1 }, "why": "you load SQL databases, APIs and files" } + { + "label": "SaaS apps such as Salesforce", + "scores": { + "fivetran": 3, + "hevo": 3, + "airbyte": 3, + "code": 1 + }, + "why": "you load many SaaS apps, and OLake Go reads databases, Kafka and S3", + "exclude": [ + "olake" + ] + }, + { + "label": "Databases that need fresh data", + "scores": { + "estuary": 3, + "qlik": 3, + "fivetran": 2, + "olake": 3 + }, + "why": "you need database changes with fresh data" + }, + { + "label": "Old systems under governance rules", + "scores": { + "informatica": 4, + "qlik": 3 + }, + "why": "you have older systems or governance rules, and Qlik lists mainframe connectivity on Enterprise" + }, + { + "label": "Mostly SQL, REST APIs and files", + "scores": { + "code": 3, + "airbyte": 1 + }, + "why": "you load SQL databases, APIs and files" + } ] }, { "q": "How fresh must the data be?", "options": [ - { "label": "Hourly is fine", "scores": { "airbyte": 2, "hevo": 1, "code": 2, "glue": 1 }, "why": "scheduled syncs are enough" }, - { "label": "Within minutes", "scores": { "fivetran": 2, "estuary": 3, "qlik": 2, "informatica": 1 }, "why": "you need database changes within minutes" } + { + "label": "Hourly is fine", + "scores": { + "airbyte": 2, + "hevo": 1, + "code": 2, + "glue": 1, + "adf": 2 + }, + "why": "scheduled syncs are enough" + }, + { + "label": "Within minutes", + "scores": { + "fivetran": 2, + "estuary": 3, + "qlik": 2 + }, + "why": "you need database changes within minutes" + } ] }, { "q": "Where must the data land?", "options": [ - { "label": "A warehouse", "scores": { "fivetran": 2, "hevo": 2, "airbyte": 2, "informatica": 1, "code": 1 }, "why": "a warehouse is easy almost everywhere" }, - { "label": "Iceberg tables on my own catalog", "scores": { "qlik": 3, "glue": 3, "olake": 3, "airbyte": 2, "fivetran": 2, "estuary": 2, "code": 1, "informatica": 1 }, "why": "you want Iceberg tables, which shrinks the field" } + { + "label": "A warehouse", + "scores": { + "fivetran": 2, + "hevo": 2, + "airbyte": 2, + "informatica": 1, + "code": 1 + }, + "why": "you load a warehouse, and OLake Go writes Iceberg and Parquet", + "exclude": [ + "olake" + ] + }, + { + "label": "Iceberg tables", + "scores": { + "qlik": 3, + "glue": 3, + "olake": 3, + "airbyte": 2, + "fivetran": 1, + "estuary": 2, + "code": 1, + "informatica": 1 + }, + "why": "you want Iceberg tables, which shrinks the field to the writers in the post's second table" + } ] }, { "q": "Does your data have to stay in your network?", "options": [ - { "label": "Yes, I need to host it myself", "scores": { "airbyte": 2, "code": 2, "olake": 2, "informatica": 1, "qlik": 1, "estuary": 1 }, "why": "you want to host it yourself, and the post marks Airbyte Core, Meltano, dlt and OLake Go as self-run" }, - { "label": "No, a hosted service is fine", "scores": { "fivetran": 2, "hevo": 2, "estuary": 1 }, "why": "a hosted service is fine for you, so vendor-run tools stay in play" } + { + "label": "Yes, I need to host it myself", + "scores": { + "airbyte": 2, + "code": 2, + "olake": 2, + "informatica": 1, + "qlik": 1, + "estuary": 1 + }, + "why": "you want to host it yourself: Airbyte Core, Meltano, dlt and OLake Go run on your own servers, and Informatica, Qlik and Estuary list self-run options" + }, + { + "label": "No, a hosted service is fine", + "scores": { + "fivetran": 2, + "hevo": 2, + "estuary": 1 + }, + "why": "a hosted service is fine for you, so vendor-run tools stay in play" + } ] } ], @@ -53,12 +187,12 @@ "name": "Fivetran", "summary": "A vendor-run tool with a big connector list, billed on monthly active rows per connection.", "bestWhen": "nobody wants to run pipelines and your sources are mostly SaaS.", - "watchOut": "Oracle, SAP and Db2 sources are only on Enterprise and Business Critical, and since January 2026 deleted rows count as paid MAR.", + "watchOut": "Oracle, SAP and Db2 (Beta) sources are only on Enterprise and Business Critical, and since January 2026 deleted rows count as paid MAR.", "href": "#1-fivetran-best-for-saas-sources-and-a-hands-off-setup" }, "hevo": { "name": "Hevo", - "summary": "A managed tool with a permanent free plan and entry prices you can see.", + "summary": "A managed tool with a free plan and entry prices you can see.", "bestWhen": "you want a managed tool with a small, published price.", "watchOut": "streaming must be enabled through sales, Iceberg is Early Access and Snowflake-managed only, and we found no self-hosted edition.", "href": "#3-hevo-best-for-a-low-entry-price-and-a-free-plan" @@ -67,7 +201,7 @@ "name": "Airbyte", "summary": "A big connector list you can self-host as Core or rent as Cloud.", "bestWhen": "you want lots of connectors and the option to self-host.", - "watchOut": "syncs are scheduled, not continuous (hourly at best apart from 15-minute syncs on Cloud Plus), and Core uses the Elastic License 2.0, which does not let you sell a cloud service that gives users direct access to Airbyte.", + "watchOut": "syncs are scheduled, not continuous (its pricing page lists 1 hour on Standard, 15 minutes on Plus and 5 minutes on Pro and Enterprise Flex), and Core uses the Elastic License 2.0, which does not let you sell a cloud service that gives users direct access to Airbyte.", "href": "#2-airbyte-best-for-a-big-connector-list-you-can-self-host-or-rent" }, "estuary": { @@ -87,7 +221,7 @@ "informatica": { "name": "Informatica", "summary": "A large suite for governance and big, mixed estates.", - "bestWhen": "you need governance, mainframes and a big mixed estate.", + "bestWhen": "you need governance and a big mixed estate.", "watchOut": "we found no dollar price per IPU on its site, so you need a quote, and its database ingestion docs describe Iceberg only as Snowflake-managed tables.", "href": "#13-informatica-best-for-governance-and-large-mixed-estates" }, @@ -95,12 +229,12 @@ "name": "AWS Glue", "summary": "A serverless AWS service for Spark jobs that writes Iceberg to S3.", "bestWhen": "your team writes Spark and lives on AWS.", - "watchOut": "we found no native log-based CDC engine, and jobs need storage and a catalog as well.", + "watchOut": "we found no log-based CDC engine documented for Glue ETL jobs, and jobs need storage and a catalog as well.", "href": "#15-aws-glue-best-for-spark-jobs-inside-aws" }, "olake": { "name": "OLake Go", - "summary": "An open-source tool that copies Postgres, MySQL, MongoDB and SQL Server changes into Iceberg or Parquet on storage you own.", + "summary": "An open-source tool that captures Postgres, MySQL, MongoDB and SQL Server changes into Iceberg or Parquet on storage you own.", "bestWhen": "you run your own infrastructure and want database changes in Iceberg tables.", "watchOut": "it reads databases, Kafka and S3 rather than SaaS apps, and it does not transform data.", "href": "#10-olake-go-best-for-database-changes-into-iceberg-or-parquet-on-your-own-storage" @@ -109,8 +243,15 @@ "name": "Meltano or dlt", "summary": "Free code-first tools: Meltano keeps pipelines in Git, and dlt is a Python library.", "bestWhen": "your team likes code and wants control.", - "watchOut": "you own scheduling, upgrades and on-call work, we found no official Meltano Iceberg loader, and dlt's open-source CDC is Postgres only.", + "watchOut": "you own scheduling, upgrades and on-call work, we found no official Meltano Iceberg loader, and the log-based option we found in dlt's open-source docs is Postgres.", "href": "#9-meltano-best-for-pipelines-kept-as-code" + }, + "adf": { + "name": "Azure Data Factory", + "summary": "Microsoft's managed ETL and ELT service, billed on activity runs, copy hours and data flow hours.", + "bestWhen": "you build pipelines inside Azure.", + "watchOut": "native CDC covers SAP, Azure SQL, SQL Server, Cosmos DB and Snowflake, and its Copy activity writes Iceberg only to Azure Data Lake Storage Gen2.", + "href": "#16-azure-data-factory-best-for-pipelines-inside-azure" } } } diff --git a/src/data/quizzes/best-data-lake-tools.json b/src/data/quizzes/best-data-lake-tools.json index d7c52fd5..39afbea9 100644 --- a/src/data/quizzes/best-data-lake-tools.json +++ b/src/data/quizzes/best-data-lake-tools.json @@ -15,7 +15,9 @@ "label": "Amazon Web Services", "scores": { "athena": 3, - "dremio": 1 + "dremio": 1, + "snowflake": 1, + "databricks": 1 }, "why": "you are on AWS" }, @@ -66,7 +68,7 @@ "why": "you want one vendor and one bill" }, { - "label": "We must self-host", + "label": "We would rather host it ourselves", "scores": { "trino": 3, "dremio": 2, @@ -101,7 +103,7 @@ "scores": { "fabric": 3 }, - "why": "you use Power BI and want governance in one place" + "why": "you use Power BI and Microsoft tools, and want one lake" }, { "label": "Engineers who like open source", @@ -118,13 +120,14 @@ "hint": "\"Supports Iceberg\" can mean read only.", "options": [ { - "label": "Many engines must write Iceberg", + "label": "Many engines must work on the same Iceberg tables", "scores": { "trino": 3, "snowflake": 1, - "olake": 2 + "olake": 2, + "databricks": 1 }, - "why": "you want to switch or mix engines later" + "why": "you want to mix engines later: Trino reads and writes Iceberg, and OLake Go writes tables other engines read" }, { "label": "One engine does the writing", @@ -208,14 +211,14 @@ "athena": { "name": "Amazon S3 plus Athena", "summary": "Object storage with a query engine you do not run, billed on data scanned. Lake Formation can add access rules.", - "bestWhen": "you are on AWS, ask one-off questions and have low, spiky usage.", - "watchOut": "Athena works on Iceberg v2 tables only and only with the AWS Glue catalog.", + "bestWhen": "you are on AWS and run occasional SQL over files in S3.", + "watchOut": "Athena's docs say it creates and operates only on Iceberg v2 tables, and only tables created against the AWS Glue catalog work.", "href": "#8-amazon-athena-best-for-occasional-sql-over-files-in-s3" }, "fabric": { "name": "Microsoft Fabric OneLake", "summary": "One lake per Fabric tenant, built on Azure Data Lake Storage, with capacity billed per workspace.", - "bestWhen": "you use Power BI and want governance in one place.", + "bestWhen": "you use Power BI and want one lake.", "watchOut": "Fabric engines store data in Delta Parquet, so Iceberg is bridged rather than the default.", "href": "#14-microsoft-fabric-onelake-best-for-microsoft-teams-that-want-one-lake" }, @@ -223,7 +226,7 @@ "name": "Google BigQuery", "summary": "A Google Cloud platform with Iceberg managed tables kept in your own buckets, billed per TiB scanned or by slots.", "bestWhen": "your analysts use BigQuery and you want Iceberg files in your own Cloud Storage.", - "watchOut": "only one UPDATE, DELETE or MERGE runs on a table at a time, and renaming or cloning is not supported.", + "watchOut": "the docs say only one UPDATE, DELETE or MERGE runs on a table at a time, and renaming, copying and cloning are not supported.", "href": "#15-google-bigquery-best-for-sql-teams-on-google-cloud-who-want-iceberg-tables-in-their-own-buckets" }, "trino": { @@ -256,7 +259,7 @@ }, "olake": { "name": "OLake Go plus a catalog and an engine", - "summary": "Open-source copy of Postgres, MySQL and MariaDB, MongoDB and SQL Server data (plus Oracle, Db2, S3 and Kafka sources) into Iceberg or Parquet on storage you run.", + "summary": "Open-source tool that captures changes from Postgres, MySQL and MariaDB, MongoDB and SQL Server (Oracle, Db2, S3 and Kafka load without database change capture) into Iceberg or Parquet on storage you run.", "bestWhen": "your data starts in a database and you want Iceberg tables that Trino, Athena or another engine can read.", "watchOut": "OLake Go loads the lake, so you still pick a catalog and a query engine.", "href": "#10-olake-go-best-for-getting-database-changes-into-an-iceberg-lake" diff --git a/src/data/quizzes/best-data-management-platforms.json b/src/data/quizzes/best-data-management-platforms.json new file mode 100644 index 00000000..26dc11db --- /dev/null +++ b/src/data/quizzes/best-data-management-platforms.json @@ -0,0 +1,357 @@ +{ + "id": "best-data-management-platforms", + "mode": "recommend", + "title": "Which data management tool fits you?", + "updated": "October 2026", + "guideHref": "#start-from-your-problem", + "guideLabel": "See the problem-to-tool table", + "topN": 3, + "questions": [ + { + "q": "What is the pain you have today?", + "hint": "The post says to start from the pain, because no single tool does every job.", + "options": [ + { + "label": "I cannot get the data from our apps and databases", + "scores": { + "fivetran": 3, + "airbyte": 3, + "olake": 3, + "informatica": 1 + }, + "why": "your pain is getting data out of apps and databases, which the post gives to Fivetran, Airbyte and OLake Go", + "exclude": [ + "bigquery", + "snowflake", + "databricks", + "purview", + "openmetadata", + "datahub", + "collibra", + "greatexpectations", + "semarchy" + ] + }, + { + "label": "Reports are slow or the data sits in too many places", + "scores": { + "bigquery": 3, + "snowflake": 3, + "databricks": 3, + "informatica": 1 + }, + "why": "your pain is slow reports and scattered data, which the post gives to Snowflake, BigQuery and Databricks", + "exclude": [ + "fivetran", + "airbyte", + "olake", + "purview", + "openmetadata", + "datahub", + "collibra", + "greatexpectations", + "semarchy" + ] + }, + { + "label": "Nobody knows which table is right or who owns it", + "scores": { + "purview": 3, + "openmetadata": 3, + "datahub": 3, + "collibra": 3, + "informatica": 1 + }, + "why": "your pain is not knowing which table is right, which the post gives to Purview, Collibra, OpenMetadata and DataHub", + "exclude": [ + "fivetran", + "airbyte", + "olake", + "bigquery", + "snowflake", + "databricks", + "greatexpectations", + "semarchy" + ] + }, + { + "label": "The numbers broke and we heard it from a customer", + "scores": { + "greatexpectations": 3, + "informatica": 1 + }, + "why": "your pain is broken numbers, which the post gives to Great Expectations", + "exclude": [ + "fivetran", + "airbyte", + "olake", + "bigquery", + "snowflake", + "databricks", + "purview", + "openmetadata", + "datahub", + "collibra", + "semarchy" + ] + }, + { + "label": "Sales and finance have different customer lists", + "scores": { + "informatica": 3, + "semarchy": 3 + }, + "why": "your pain is two customer lists, which the post gives to Informatica and Semarchy", + "exclude": [ + "fivetran", + "airbyte", + "olake", + "bigquery", + "snowflake", + "databricks", + "purview", + "openmetadata", + "datahub", + "collibra", + "greatexpectations" + ] + } + ] + }, + { + "q": "Who should run it?", + "options": [ + { + "label": "A vendor runs it for me", + "scores": { + "fivetran": 3, + "bigquery": 3, + "purview": 3, + "informatica": 2, + "datahub": 1, + "snowflake": 3, + "databricks": 3, + "semarchy": 2 + }, + "why": "you want the vendor to run it" + }, + { + "label": "My team runs it", + "scores": { + "airbyte": 3, + "openmetadata": 3, + "datahub": 3, + "greatexpectations": 3, + "olake": 3 + }, + "why": "you can run it yourself" + }, + { + "label": "Either, I want a managed option and a self-run option", + "scores": { + "airbyte": 3, + "datahub": 3, + "semarchy": 3 + }, + "why": "it offers a vendor-run route and a self-run route" + } + ] + }, + { + "q": "What does your budget look like?", + "options": [ + { + "label": "Free software, we will pay in servers and people", + "scores": { + "openmetadata": 3, + "greatexpectations": 3, + "datahub": 2, + "airbyte": 2, + "olake": 3 + }, + "why": "it is free, Apache-2.0 or free to run yourself" + }, + { + "label": "A free tier or published price I can check", + "scores": { + "bigquery": 3, + "fivetran": 2, + "airbyte": 2, + "databricks": 2, + "purview": 1, + "snowflake": 2 + }, + "why": "it has a free plan or a price you can read" + }, + { + "label": "A quote and a contract are fine", + "scores": { + "informatica": 3, + "collibra": 3, + "semarchy": 3 + }, + "why": "its price comes from a quote" + } + ] + }, + { + "q": "Where does your data have to live?", + "options": [ + { + "label": "On Google Cloud", + "scores": { + "bigquery": 3 + }, + "why": "you are already on Google Cloud" + }, + { + "label": "On Microsoft", + "scores": { + "purview": 3 + }, + "why": "Microsoft is already your home base" + }, + { + "label": "No preference", + "scores": { + "fivetran": 1, + "airbyte": 1, + "openmetadata": 1, + "datahub": 1, + "olake": 1 + }, + "why": "you have no cloud preference" + }, + { + "label": "I would rather keep it in our own environment", + "scores": { + "airbyte": 2, + "openmetadata": 3, + "datahub": 2, + "greatexpectations": 3, + "semarchy": 2, + "olake": 3 + }, + "why": "you can run it in your own environment" + } + ] + }, + { + "q": "What skills does your team have?", + "options": [ + { + "label": "Engineers who write Python", + "scores": { + "greatexpectations": 3, + "airbyte": 2 + }, + "why": "your engineers can write the rules and code" + }, + { + "label": "Platform engineers who run services", + "scores": { + "openmetadata": 3, + "datahub": 3, + "airbyte": 1, + "olake": 2 + }, + "why": "you can run services on Kubernetes" + }, + { + "label": "Few engineers", + "scores": { + "fivetran": 3, + "informatica": 2, + "purview": 2, + "bigquery": 2, + "snowflake": 2, + "databricks": 1, + "collibra": 1, + "semarchy": 2 + }, + "why": "you want a vendor to carry the work" + } + ] + } + ], + "results": { + "fivetran": { + "name": "Fivetran", + "summary": "A managed service that moves your data using ready-made connectors.", + "bestWhen": "You want a managed pipeline service and can accept per-row billing.", + "watchOut": "Paid per-row rates sit in a separate table, so your bill depends on your row counts and connections." + }, + "airbyte": { + "name": "Airbyte", + "summary": "Open-source connectors you can self-host, or pay for as Cloud.", + "bestWhen": "You have engineers and want control or a lower starting price.", + "watchOut": "Its CDC docs say syncs are scheduled and that CDC incremental needs primary keys for most sources, and Core uses the ELv2 licence, which restricts resale as a hosted service." + }, + "olake": { + "name": "OLake Go", + "summary": "Open-source tool that captures Postgres, MySQL/MariaDB, MongoDB and SQL Server changes into Iceberg or Parquet (Oracle, Db2, S3 and Kafka load without database change capture).", + "bestWhen": "Your data sits in databases and you want Iceberg or Parquet on storage you run.", + "watchOut": "It moves data, so catalog, quality and master data are other tools' jobs." + }, + "bigquery": { + "name": "Google BigQuery", + "summary": "A serverless warehouse billed per TiB scanned, with the first 1 TiB of queries a month free.", + "bestWhen": "You are on Google Cloud and want pay-per-query.", + "watchOut": "It is a Google Cloud service with no self-hosted option stated, and busy projects share query capacity." + }, + "purview": { + "name": "Microsoft Purview", + "summary": "A catalog and governance product that sits next to security and compliance tools.", + "bestWhen": "Microsoft is already your home base.", + "watchOut": "Billing is per governed asset, and its Learn page lists Data Security Posture Management as in preview." + }, + "openmetadata": { + "name": "OpenMetadata", + "summary": "A free, Apache-2.0 catalog for discovery, lineage, quality checks and governance.", + "bestWhen": "You have platform engineers and want no licence fee.", + "watchOut": "The docs say to deploy for production using Kubernetes, cloud-managed services or bare metal, so you run and upgrade it yourself." + }, + "datahub": { + "name": "DataHub", + "summary": "An Apache-2.0 catalog you can self-host, with a managed DataHub Cloud route.", + "bestWhen": "You want open source now and a managed option later.", + "watchOut": "We found no DataHub Cloud price, and self-hosting means running it yourself, with Docker or Helm charts." + }, + "greatexpectations": { + "name": "Great Expectations", + "summary": "A free Python library that checks your data against rules you write.", + "bestWhen": "Engineers own your pipelines.", + "watchOut": "It is a Python library for data validation, so you write the rules and run them in code." + }, + "informatica": { + "name": "Informatica", + "summary": "A large vendor with master data, catalog, integration and quality products.", + "bestWhen": "You want a single large vendor and a negotiated contract.", + "watchOut": "No dollar price per unit appears on its pricing page, so you need a quote." + }, + "snowflake": { + "name": "Snowflake", + "summary": "A managed cloud data platform with consumption-based pricing.", + "bestWhen": "You want a managed warehouse.", + "watchOut": "Credit rates vary by edition and region, and no self-hosted option is stated." + }, + "databricks": { + "name": "Databricks", + "summary": "A data and AI platform on AWS, Azure and Google Cloud, billed pay as you go.", + "bestWhen": "Your team mixes analytics with machine learning.", + "watchOut": "Managed Iceberg tables need Unity Catalog, Databricks Runtime 16.4 LTS or newer and serverless compute." + }, + "collibra": { + "name": "Collibra", + "summary": "A governance product with shared business terms, assigned roles, automated compliance checks and incident workflows.", + "bestWhen": "You are a large team with a formal governance program.", + "watchOut": "No price is shown and the page points to a demo request, so ask for a quote." + }, + "semarchy": { + "name": "Semarchy xDM", + "summary": "A focused master data tool offered as SaaS or on-premises.", + "bestWhen": "Master data is your main problem.", + "watchOut": "No price is published, so you need to ask for a quote." + } + } +} diff --git a/src/data/quizzes/best-data-pipeline-tools.json b/src/data/quizzes/best-data-pipeline-tools.json new file mode 100644 index 00000000..e888dc23 --- /dev/null +++ b/src/data/quizzes/best-data-pipeline-tools.json @@ -0,0 +1,357 @@ +{ + "id": "best-data-pipeline-tools", + "mode": "recommend", + "title": "Which pipeline tool fits you?", + "updated": "October 2026", + "guideHref": "#building-a-pipeline-from-parts-a-decision-table", + "guideLabel": "See the full decision table", + "topN": 3, + "questions": [ + { + "q": "Which job in your pipeline is missing?", + "hint": "A pipeline has four jobs: ingest, store, transform and orchestrate. Most tools only do one.", + "options": [ + { + "label": "Copying data in from databases or apps", + "scores": { + "fivetran": 3, + "airbyte": 3, + "debezium": 2, + "matillion": 2, + "glue": 2, + "adf": 2, + "hevo": 3, + "olake": 3 + }, + "why": "you need to copy data in, and the post's table lists dbt, Airflow, Dagster and Prefect as transform or scheduling tools", + "exclude": [ + "dbt", + "airflow", + "dagster", + "prefect" + ] + }, + { + "label": "Reshaping data that is already in a warehouse", + "scores": { + "dbt": 3, + "matillion": 2, + "glue": 1, + "adf": 1 + }, + "why": "your data has landed and needs reshaping, and the post's table lists these tools' main job as ingest or scheduling", + "exclude": [ + "fivetran", + "airbyte", + "hevo", + "olake", + "debezium", + "airflow", + "dagster", + "prefect" + ] + }, + { + "label": "Running the steps in order and retrying failures", + "scores": { + "airflow": 3, + "adf": 1, + "matillion": 1, + "dagster": 3, + "prefect": 3 + }, + "why": "you need something to run the steps in order, and the post's table lists these tools' main job as ingest or transform", + "exclude": [ + "fivetran", + "airbyte", + "hevo", + "olake", + "debezium", + "dbt" + ] + }, + { + "label": "All of it, from one vendor", + "scores": { + "matillion": 3, + "glue": 3, + "adf": 3 + }, + "why": "you want several jobs from one vendor, and the post lists Matillion, AWS Glue and Azure Data Factory as the bundles", + "exclude": [ + "fivetran", + "airbyte", + "hevo", + "olake", + "debezium", + "dbt", + "airflow", + "dagster", + "prefect" + ] + } + ] + }, + { + "q": "Who will run it?", + "hint": "Free software still has a bill: servers and people.", + "options": [ + { + "label": "A vendor runs it for us", + "scores": { + "fivetran": 3, + "matillion": 2, + "glue": 2, + "adf": 2, + "airbyte": 1, + "hevo": 3, + "dagster": 1, + "prefect": 1 + }, + "why": "you want someone else to run it" + }, + { + "label": "We run it ourselves, on our own servers", + "scores": { + "debezium": 3, + "airbyte": 3, + "airflow": 3, + "dbt": 2, + "dagster": 2, + "prefect": 2, + "olake": 3 + }, + "exclude": [ + "glue" + ], + "why": "you want to self-host, and AWS Glue runs only on AWS" + } + ] + }, + { + "q": "How fast must changes show up?", + "options": [ + { + "label": "Hourly or slower is fine", + "scores": { + "airbyte": 2, + "fivetran": 2, + "adf": 2, + "glue": 2, + "airflow": 1, + "dbt": 1, + "hevo": 2, + "dagster": 1, + "prefect": 1 + }, + "why": "hourly or slower is enough" + }, + { + "label": "Every few minutes", + "scores": { + "fivetran": 2, + "matillion": 1, + "airbyte": 1 + }, + "why": "you need syncs every few minutes" + }, + { + "label": "Within seconds", + "scores": { + "debezium": 3 + }, + "exclude": [ + "fivetran", + "airbyte", + "matillion", + "glue", + "adf", + "dbt", + "airflow", + "hevo", + "dagster", + "prefect", + "olake" + ], + "why": "you need seconds, and the post points seconds to Debezium, Kafka and Flink, which you run yourself" + } + ] + }, + { + "q": "Where does your data live?", + "options": [ + { + "label": "Everything is on AWS", + "scores": { + "glue": 3, + "airflow": 1 + }, + "why": "your data and skills are on AWS" + }, + { + "label": "Everything is on Azure", + "scores": { + "adf": 3 + }, + "why": "you live on Azure" + }, + { + "label": "In a cloud warehouse such as Snowflake or BigQuery", + "scores": { + "matillion": 2, + "dbt": 2, + "fivetran": 1, + "hevo": 2 + }, + "why": "you work inside a cloud warehouse" + }, + { + "label": "Not tied to one cloud", + "scores": { + "airbyte": 1, + "debezium": 1, + "airflow": 1, + "dagster": 1, + "prefect": 1, + "olake": 2 + }, + "exclude": [ + "glue" + ], + "why": "you want to stay cloud-neutral, and AWS Glue runs only on AWS" + } + ] + }, + { + "q": "What kind of bill do you want?", + "hint": "Rows, events, credits, models and compute hours all grow in different ways.", + "options": [ + { + "label": "Free software, and we pay in staff time", + "scores": { + "debezium": 2, + "airbyte": 2, + "airflow": 2, + "dbt": 2, + "prefect": 2, + "olake": 3, + "dagster": 2 + }, + "why": "you prefer free software over a licence bill" + }, + { + "label": "A public price I can plan around", + "scores": { + "airbyte": 2, + "dbt": 2, + "glue": 2, + "adf": 2, + "airflow": 1, + "hevo": 2, + "dagster": 2, + "prefect": 2 + }, + "exclude": [ + "matillion" + ], + "why": "you need a public price, and Matillion's pricing page shows no dollar price" + }, + { + "label": "I will pay for hands-off loading", + "scores": { + "fivetran": 2, + "matillion": 1, + "hevo": 2 + }, + "why": "you will budget for hands-off loading" + } + ] + } + ], + "results": { + "fivetran": { + "name": "Fivetran", + "summary": "A managed loader with a free plan, 700+ connectors and 15-minute syncs on Standard.", + "bestWhen": "You want someone else to run loading and you can budget for the meter.", + "watchOut": "Paid rates sit in a separate table and each connection has its own curve, so you need rows per connection to predict a bill, and deleted rows count as paid rows.", + "href": "#1-fivetran-best-for-hands-off-loading-from-many-sources" + }, + "airbyte": { + "name": "Airbyte", + "summary": "A long connector list with a free self-hosted core or a paid cloud.", + "bestWhen": "You want lots of connectors and can live with minutes to an hour of delay.", + "watchOut": "It is not a continuous streaming tool, and the core uses the Elastic License 2.0, which stops you offering it to others as a managed service.", + "href": "#2-airbyte-best-for-a-long-connector-list-with-a-free-self-hosted-core" + }, + "debezium": { + "name": "Debezium", + "summary": "Free and open source. Its docs say it records database changes as events, and describe delay in the millisecond range for MySQL and PostgreSQL (the project's claim, not a measurement).", + "bestWhen": "You already run Kafka or have engineers to spare, and need changes in seconds.", + "watchOut": "It only captures changes. You still need a place to send them and someone to keep it healthy.", + "href": "#5-debezium-best-for-engineers-who-need-every-database-change-as-an-event" + }, + "matillion": { + "name": "Matillion", + "summary": "One tool for loading, transforming and scheduling inside a cloud warehouse.", + "bestWhen": "You want one vendor for load and transform on a warehouse.", + "watchOut": "No dollar price is shown on its pricing page, and we found no Apache Iceberg destination in its docs.", + "href": "#8-matillion-best-for-teams-that-load-and-transform-inside-a-cloud-warehouse" + }, + "glue": { + "name": "AWS Glue", + "summary": "A managed Spark service on AWS with a built-in data catalog, billed by compute time.", + "bestWhen": "Your data and skills already live on AWS.", + "watchOut": "You write Spark code or compose jobs in Glue's visual editor, and it runs only on AWS.", + "href": "#9-aws-glue-best-for-teams-that-already-write-spark-jobs-on-aws" + }, + "adf": { + "name": "Azure Data Factory", + "summary": "A managed Microsoft service for ETL, ELT and data integration.", + "bestWhen": "You live on Azure and run batch jobs.", + "watchOut": "Pipelines are batch only, and Microsoft says new users should start with Fabric Data Factory.", + "href": "#10-azure-data-factory-best-for-microsoft-centred-batch-pipelines" + }, + "dbt": { + "name": "dbt", + "summary": "Reshapes data already in your warehouse using SQL, with a free plan and open-source core.", + "bestWhen": "Analysts will write the transformations in SQL.", + "watchOut": "It does not extract or load anything, so you need a loader first.", + "href": "#11-dbt-best-for-sql-first-teams-that-model-data-in-a-warehouse" + }, + "airflow": { + "name": "Apache Airflow", + "summary": "A free, code-first scheduler that runs your pipeline steps in order.", + "bestWhen": "Your team writes Python and wants a free scheduler.", + "watchOut": "It does not copy data itself, it is built for batch rather than streaming, and you pay for servers and staff.", + "href": "#12-apache-airflow-best-for-teams-that-want-a-code-first-scheduler" + }, + "hevo": { + "name": "Hevo", + "summary": "A managed, no-code loader into a warehouse, with a free plan up to 1M events a month.", + "bestWhen": "You are a small team that wants a warehouse fed without writing code.", + "watchOut": "Every insert, update or delete is an event, so busy tables use the quota fast. Streaming sits on higher plans.", + "href": "#3-hevo-best-for-small-teams-that-want-no-code-pipelines-into-a-warehouse" + }, + "dagster": { + "name": "Dagster", + "summary": "A code-first orchestrator that shows your pipeline as the datasets it makes, with built-in lineage.", + "bestWhen": "You like to see your pipeline as tables and assets rather than tasks.", + "watchOut": "Each asset run or op is a credit, so many small runs add up. The cheaper plans allow only 1 or 3 users.", + "href": "#13-dagster-best-for-teams-that-think-in-tables-and-assets-rather-than-tasks" + }, + "prefect": { + "name": "Prefect", + "summary": "An open-source engine that turns plain Python functions into pipelines, with a free Hobby plan.", + "bestWhen": "Your team already writes Python and wants to start with ordinary functions.", + "watchOut": "It is code only, and the free plan caps at 5 deployments and 7 days of history.", + "href": "#14-prefect-best-for-python-teams-that-want-to-start-with-ordinary-functions" + }, + "olake": { + "name": "OLake Go", + "summary": "Open-source tool that captures Postgres, MySQL/MariaDB, MongoDB and SQL Server changes into Iceberg or Parquet (Oracle, Db2, S3 and Kafka load without database change capture).", + "bestWhen": "Your sources are databases and you want Iceberg or Parquet on storage you run.", + "watchOut": "Its output is Iceberg and Parquet, so it suits teams that want one of those on storage they run.", + "href": "#4-olake-go-best-for-copying-postgres-mysql-mongodb-or-sql-server-into-iceberg" + } + } +} diff --git a/src/data/quizzes/best-data-quality-tools.json b/src/data/quizzes/best-data-quality-tools.json new file mode 100644 index 00000000..19d2a1b5 --- /dev/null +++ b/src/data/quizzes/best-data-quality-tools.json @@ -0,0 +1,61 @@ +{ + "id": "best-data-quality-tools", + "mode": "recommend", + "title": "Which data quality tool fits you?", + "updated": "October 2026", + "guideHref": "#the-three-jobs-and-which-tool-fits", + "guideLabel": "See the job table", + "topN": 3, + "questions": [ + { + "q": "What job do you want the tool to do?", + "hint": "The post says data quality tools do three different jobs, so start here.", + "options": [ + {"label": "Run rules I write in a pipeline", "scores": {"gx": 2, "soda": 2, "dbt": 2, "deequ": 2}, "why": "you want rules you write and run in a pipeline"}, + {"label": "Watch production tables for surprises", "scores": {"elementary": 3, "montecarlo": 3, "soda": 1}, "why": "you want something to watch tables for drift"}, + {"label": "A free catalog with quality tests too", "scores": {"openmetadata": 3}, "why": "you want a catalog with tests built in"}, + {"label": "Cleansing and governance across a big company", "scores": {"enterprise": 3}, "why": "you need profiling, cleansing and governance"} + ] + }, + { + "q": "What does your data stack look like?", + "options": [ + {"label": "We already transform data with dbt", "scores": {"dbt": 3, "elementary": 3}, "why": "you already use dbt"}, + {"label": "Our data runs on Apache Spark", "scores": {"deequ": 3}, "why": "your data is on Spark"}, + {"label": "No dbt and no Spark, we write Python", "scores": {"gx": 3, "soda": 3, "openmetadata": 1, "montecarlo": 1, "enterprise": 1}, "exclude": ["deequ", "dbt"], "why": "dbt tests need dbt and Deequ needs Spark"} + ] + }, + { + "q": "What is the budget shape?", + "options": [ + {"label": "$0 for now", "scores": {"gx": 2, "soda": 2, "dbt": 2, "elementary": 2, "deequ": 2, "openmetadata": 2}, "why": "it has a free plan or free software"}, + {"label": "I can pay, but I want a price I can see", "scores": {"soda": 3, "dbt": 2}, "why": "its paid price is published"}, + {"label": "A sales quote is fine", "scores": {"montecarlo": 2, "enterprise": 2, "elementary": 1}, "why": "its paid plans are quote based"} + ] + }, + { + "q": "Who should run the tool?", + "options": [ + {"label": "A vendor hosts it", "scores": {"soda": 1, "montecarlo": 3, "enterprise": 2, "elementary": 1}, "why": "it is sold as a hosted platform or cloud service"}, + {"label": "We run it ourselves", "scores": {"openmetadata": 2, "deequ": 2, "gx": 2, "elementary": 2, "soda": 2, "dbt": 2}, "why": "you can run it yourself"} + ] + }, + { + "q": "How big is your company?", + "options": [ + {"label": "A small team that wants to start fast", "scores": {"dbt": 2, "gx": 2, "soda": 2, "elementary": 2}, "why": "our read is that small teams gain most from a few rules, then alerts"}, + {"label": "Large or regulated", "scores": {"enterprise": 3, "montecarlo": 2, "openmetadata": 1}, "why": "our read is that large or regulated companies often begin on the catalog and governance side or need many tables watched"} + ] + } + ], + "results": { + "gx": {"name": "Great Expectations", "summary": "A free Python library for data tests (GX Core).", "bestWhen": "You want rules written in Python that you can review and version like code.", "watchOut": "You write every rule yourself in Python. GX Cloud is no longer publicly available, per GX's May 2026 post, and the same post says Fivetran will become the new steward of GX Core.", "href": "#1-great-expectations-rules-written-in-python"}, + "soda": {"name": "Soda", "summary": "Checks written in YAML, with a free plan and a published Team price.", "bestWhen": "You want an openly priced paid plan or a free hosted tier.", "watchOut": "Soda Core uses the Elastic License 2.0, not Apache or MIT, and Soda's docs say Soda Core has no observability features. Those come from the hosted product.", "href": "#2-soda-data-contracts-and-a-free-hosted-tier"}, + "dbt": {"name": "dbt tests", "summary": "Tests built into dbt, such as unique, not_null, accepted_values and relationships.", "bestWhen": "You already transform your data with dbt.", "watchOut": "It only tests what dbt manages, and the docs we read do not describe cleansing or learned alerts.", "href": "#3-dbt-tests-data-already-transformed-with-dbt"}, + "elementary": {"name": "Elementary", "summary": "An open-source tool that turns dbt test results into a report and alerts.", "bestWhen": "You use dbt and want a report and alerts on your dbt test results.", "watchOut": "The docs say the open-source tool covers a single dbt project, and it depends on dbt. Cloud plans say \"Talk to us\" instead of a price.", "href": "#4-elementary-adding-alerts-to-a-dbt-project"}, + "deequ": {"name": "Deequ", "summary": "A free AWS Labs library that runs unit tests for data on Spark.", "bestWhen": "Your data is very large and already on Apache Spark.", "watchOut": "You need a Spark setup and a matching Java version. It is a library from AWS Labs, not an AWS managed service.", "href": "#5-deequ-very-large-data-on-apache-spark"}, + "openmetadata": {"name": "OpenMetadata", "summary": "A free open-source catalog with no-code quality tests and alerts.", "bestWhen": "You want one free tool for the catalog and the tests.", "watchOut": "You run and upgrade it yourself unless you use a managed offering, and it is more than a test library.", "href": "#6-openmetadata-quality-tests-inside-a-free-catalog"}, + "montecarlo": {"name": "Monte Carlo", "summary": "A paid platform that monitors tables and traces issues.", "bestWhen": "Many tables across a company need watching and you can pay.", "watchOut": "No price is published, no free trial is mentioned and its pricing and platform pages show no open-source edition.", "href": "#7-monte-carlo-broad-production-monitoring-with-a-paid-platform"}, + "enterprise": {"name": "Informatica or Ataccama", "summary": "Enterprise suites for profiling, cleansing and governance.", "bestWhen": "You need cleansing and governance across many teams in an enterprise suite.", "watchOut": "Neither shows a dollar price on its own pages, and both are proprietary enterprise suites.", "href": "#8-informatica-data-quality-and-observability-enterprise-cleansing"} + } +} diff --git a/src/data/quizzes/best-data-replication-tools.json b/src/data/quizzes/best-data-replication-tools.json index bbafbb8d..580245ce 100644 --- a/src/data/quizzes/best-data-replication-tools.json +++ b/src/data/quizzes/best-data-replication-tools.json @@ -72,7 +72,8 @@ "debezium": 2, "airbyte": 2, "dms": 2, - "datastream": 2 + "datastream": 2, + "goldengate": 1 }, "why": "your source is MongoDB" }, @@ -80,7 +81,6 @@ "label": "SQL Server", "scores": { "olake": 2, - "debezium": 1, "airbyte": 2, "estuary": 2, "dms": 2, @@ -113,9 +113,6 @@ "dms": 2, "airbyte": 2 }, - "exclude": [ - "olake" - ], "why": "you want a hosted service" }, { @@ -129,7 +126,7 @@ "exclude": [ "datastream" ], - "why": "you are happy to self-host" + "why": "you want to run it yourself; Google's docs describe no self-hosted option for Datastream" }, { "label": "It should be part of the database", @@ -153,9 +150,7 @@ { "label": "BigQuery on Google Cloud", "scores": { - "datastream": 3, - "estuary": 2, - "airbyte": 2 + "datastream": 3 }, "why": "you land data in BigQuery" }, @@ -165,8 +160,7 @@ "estuary": 2, "airbyte": 2, "dms": 2, - "goldengate": 2, - "datastream": 1 + "goldengate": 2 }, "why": "you want many possible targets" }, @@ -211,7 +205,7 @@ "scores": { "goldengate": 3 }, - "why": "you can pay for an enterprise licence" + "why": "it is an enterprise platform priced per OCPU on Oracle Cloud" } ] }, @@ -238,14 +232,12 @@ "estuary": 2, "debezium": 2, "goldengate": 2, - "datastream": 1, - "olake": 1, - "native": 1 + "olake": 1 }, "exclude": [ "airbyte" ], - "why": "you need continuous streaming" + "why": "you want changes read from the log with low delay" } ] } @@ -259,21 +251,21 @@ }, "goldengate": { "name": "Oracle GoldenGate", - "summary": "An enterprise platform for one-way, two-way and multi-directional copies, strong on Oracle.", + "summary": "An enterprise platform for one-way, two-way and multi-directional copies, with Oracle among its supported databases.", "bestWhen": "you are an Oracle shop with the budget and may need two-way copies.", "watchOut": "its FAQ lists Iceberg, but the write details are in separate GoldenGate DAA docs, and we do not quote an on-premises price." }, "dms": { "name": "AWS DMS", "summary": "AWS's managed service for one-time moves or ongoing replication, billed on instance or DCU hours.", - "bestWhen": "you are moving a database into AWS or doing simple replication inside AWS.", - "watchOut": "Iceberg is not a DMS target, there is no latency promise, and its two-way mode has no conflict resolution." + "bestWhen": "you are moving a database into AWS, with a full load first and then change capture.", + "watchOut": "Iceberg is not on the DMS target list, AWS's CDC page says there is no latency SLA, and DMS two-way tasks do not include conflict detection or resolution." }, "datastream": { "name": "Google Cloud Datastream", "summary": "A serverless CDC service on Google Cloud, billed per GiB processed.", "bestWhen": "you are on Google Cloud and land data in BigQuery.", - "watchOut": "there is no self-hosted option, and Iceberg streaming is append-only, so no updates and deletes." + "watchOut": "Google's docs describe no self-hosted option, and streaming to its Iceberg tables is supported only in append-only mode, where every row is an INSERT." }, "debezium": { "name": "Debezium", @@ -289,8 +281,8 @@ }, "estuary": { "name": "Estuary", - "summary": "A managed platform for streaming and batch, billed at $0.50 per GB plus connector fees.", - "bestWhen": "you want one managed platform that does streaming and batch.", + "summary": "A platform that says it does streaming and batch, priced at $0.50 per GB moved plus connector fees.", + "bestWhen": "you want one platform that, by Estuary's own description, does streaming and batch.", "watchOut": "every source and destination is billed, and its Iceberg connector needs an AWS EMR Serverless Spark application." }, "airbyte": { diff --git a/src/data/quizzes/best-reverse-etl-tools.json b/src/data/quizzes/best-reverse-etl-tools.json index b2759b92..471f78a0 100644 --- a/src/data/quizzes/best-reverse-etl-tools.json +++ b/src/data/quizzes/best-reverse-etl-tools.json @@ -20,11 +20,7 @@ "segment": 3, "rudderstack": 3 }, - "exclude": [ - "multiwoven", - "script" - ], - "why": "you want a vendor-run service, and Multiwoven and a script are yours to run" + "why": "you want a vendor-run service" }, { "label": "We run it ourselves", @@ -33,7 +29,7 @@ "script": 2, "polytomic": 1 }, - "why": "you are happy to deploy and upgrade it (Polytomic offers on-premises only on Enterprise)" + "why": "you are happy to deploy and upgrade it (Polytomic lists on-premises under Enterprise)" }, { "label": "Just a small script", @@ -51,9 +47,7 @@ { "label": "One or two tools", "scores": { - "script": 3, - "multiwoven": 1, - "rudderstack": 1 + "script": 3 }, "why": "with one or two destinations a short script is often cheaper" }, @@ -72,12 +66,9 @@ { "label": "Many, owned by marketing or revenue teams", "scores": { - "hightouch": 3, - "segment": 1, - "polytomic": 1, - "script": 0 + "hightouch": 3 }, - "why": "a script gets heavy as destinations pile up, and Hightouch has no cap on destinations" + "why": "Hightouch's self-serve plans have no limit on destinations, and a script gets heavy as destinations pile up" } ] }, @@ -123,14 +114,14 @@ "script": 1, "multiwoven": 1 }, - "why": "Hightouch's lower plans run hourly at most, which is fine here" + "why": "most syncs run on a batch schedule, and Hightouch's free and self-serve plans are hourly at most" }, { "label": "Every 15 minutes or faster", "scores": { "segment": 3 }, - "why": "Segment's shortest published gap is 15 minutes" + "why": "Segment publishes 15 minutes as its shortest gap" } ] }, @@ -140,12 +131,7 @@ "options": [ { "label": "Yes, that is fine", - "scores": { - "fivetran": 1, - "segment": 1, - "rudderstack": 1 - }, - "why": "Segment, RudderStack and Fivetran Advanced all keep state in your warehouse, so they need write access" + "scores": {} }, { "label": "No, read-only access only", @@ -169,7 +155,6 @@ "rudderstack": 3, "hightouch": 3, "multiwoven": 3, - "script": 2, "fivetran": 1 }, "why": "RudderStack Free, Hightouch's 2 free active syncs and Multiwoven's free licence are all published" @@ -190,7 +175,7 @@ "segment": 2, "polytomic": 1 }, - "why": "Hightouch self-serve and Segment show no dollar price on the pages we read" + "why": "Hightouch self-serve and Segment show no dollar price on the pages we read, and Polytomic's Standard and Enterprise say \"Let's chat\"" } ] } @@ -198,7 +183,7 @@ "results": { "hightouch": { "name": "Hightouch", - "summary": "A vendor-run tool billed by active syncs, with no cap on destinations or seats.", + "summary": "A vendor-run tool billed by active syncs, with no limit on destinations or seats on its self-serve plans.", "bestWhen": "marketing or revenue teams will own the syncs and you need many destinations.", "watchOut": "free and Self-serve plans are limited to hourly syncs, and the self-serve dollar price is not published.", "href": "#1-hightouch-best-for-marketing-led-teams-that-want-many-destinations" @@ -226,8 +211,8 @@ }, "rudderstack": { "name": "RudderStack", - "summary": "Event collection with reverse ETL on every plan, and a free tier.", - "bestWhen": "you also want event collection and a free start with a published price after.", + "summary": "Billed by events, with reverse ETL on every plan and a free tier.", + "bestWhen": "you want a free start with a published price after.", "watchOut": "failed syncs cannot be replayed, a source cannot go to a warehouse destination, and it stores sync state in your warehouse.", "href": "#5-rudderstack-best-for-a-free-start-with-reverse-etl-included" }, @@ -242,8 +227,8 @@ "name": "A short script or iPaaS", "summary": "Custom API code or a general automation tool instead of a dedicated product.", "bestWhen": "you send data to only one or two tools and an engineer can own it.", - "watchOut": "every API change, schema change and new destination means more work, and iPaaS tools are not designed to use a warehouse as the source.", + "watchOut": "per Fivetran's guide (Fivetran sells a reverse ETL product), every API change, schema change and new destination means more work, and iPaaS tools are not designed to use a warehouse as the source.", "href": "#do-you-need-a-reverse-etl-tool-at-all" } } -} \ No newline at end of file +} diff --git a/src/data/quizzes/data-migration-strategy.json b/src/data/quizzes/data-migration-strategy.json index fb20f8dc..568dad68 100644 --- a/src/data/quizzes/data-migration-strategy.json +++ b/src/data/quizzes/data-migration-strategy.json @@ -9,7 +9,7 @@ "q": "Your business can switch everything off for the whole copy. Which cutover approach fits best?", "options": ["Phased, one group at a time", "Big bang, copy it all in one go", "Trickle, a little at a time", "Replication-based, with changes kept in sync"], "correct": 1, - "explain": "Big bang copies everything in one operation, then switches. MongoDB says it is faster but needs downtime, so it only suits systems that can stop." + "explain": "Big bang copies everything in one operation, then switches. MongoDB says it is faster but needs downtime, so it fits a system that can be offline for the whole copy and whose data is small enough." }, { "q": "What does Google's architecture guide say about moving a database with zero downtime for clients?", @@ -50,7 +50,7 @@ "The old system is always deleted at switchover", "Backups stop working after a switch", "New writes land on the new system, so the old one goes stale", - "Old systems cannot be turned back on" + "Clients keep writing to both systems after the switch" ], "correct": 2, "explain": "After switchover the source stops receiving changes. Google's fallback phase copies target changes back to it, so a reverse move stays possible." diff --git a/src/data/quizzes/data-migration-tools.json b/src/data/quizzes/data-migration-tools.json index cc591675..fdfa4493 100644 --- a/src/data/quizzes/data-migration-tools.json +++ b/src/data/quizzes/data-migration-tools.json @@ -29,7 +29,7 @@ "scores": { "datasync": 3, "fivetran": 1, - "airbyte": 1 + "olake": 1 } }, { @@ -57,7 +57,7 @@ "azuredms", "googledms" ], - "why": "Azure DMS targets Azure SQL and Google DMS targets Google Cloud databases" + "why": "the Azure DMS overview names Azure SQL targets and the Google DMS overview names Google Cloud databases" }, { "label": "A cloud database on Azure or Google Cloud", @@ -65,20 +65,18 @@ "azuredms": 2, "googledms": 2 }, - "why": "Azure DMS targets Azure SQL and Google DMS targets Google Cloud databases" + "why": "the Azure DMS overview names Azure SQL targets and the Google DMS overview names Google Cloud databases" }, { "label": "BigQuery", "scores": { - "datastream": 3, - "fivetran": 1, - "airbyte": 1 + "datastream": 3 }, "exclude": [ "azuredms", "googledms" ], - "why": "Azure DMS and Google DMS do not list BigQuery as a target" + "why": "the Google DMS overview lists Google Cloud databases and no warehouse, and the Azure DMS overview names Azure SQL targets" }, { "label": "An Iceberg or Parquet lake I run", @@ -92,7 +90,7 @@ "azuredms", "googledms" ], - "why": "Azure DMS and Google DMS land in their own cloud's databases only" + "why": "the Azure DMS overview names Azure SQL targets and the Google DMS overview names Google Cloud databases" }, { "label": "A warehouse or lake somewhere else", @@ -104,7 +102,7 @@ "azuredms", "googledms" ], - "why": "Azure DMS and Google DMS land in their own cloud's databases only" + "why": "the Azure DMS overview names Azure SQL targets and the Google DMS overview names Google Cloud databases" } ] }, @@ -145,8 +143,7 @@ "label": "Scheduled copies", "scores": { "datasync": 2, - "airbyte": 1, - "fivetran": 1 + "airbyte": 1 }, "why": "DataSync does scheduled copies" } @@ -159,12 +156,12 @@ "label": "Free or close to it", "scores": { "googledms": 2, - "azuredms": 2, "airbyte": 2, "goldengate": 1, - "fivetran": 1 + "fivetran": 1, + "olake": 2 }, - "why": "some of these have a free route, such as Core, Standard or a free plan" + "why": "some have a free route: Airbyte Core, Fivetran's free plan, GoldenGate Free for Oracle databases up to 20 GB, Google's no-charge native moves and OLake Go's open-source licence (you still pay for servers)" }, { "label": "A price I can work out from the vendor page", @@ -177,11 +174,11 @@ "why": "DataSync is a flat per-GB fee and AWS DMS lists an hourly rate" }, { - "label": "A negotiated enterprise licence is fine", + "label": "A paid enterprise licence is fine", "scores": { "goldengate": 3 }, - "why": "GoldenGate licences are usually negotiated" + "why": "GoldenGate is sold by licence, listed per processor or Named User Plus" } ] }, @@ -207,7 +204,7 @@ "airbyte": 3, "olake": 3 }, - "why": "Airbyte Core and OLake Go are the self-run options in the post, and Datastream is documented as Google-run only" + "why": "Airbyte Core is self-managed and you run OLake Go on your own infrastructure" } ] } @@ -217,25 +214,26 @@ "name": "AWS Database Migration Service", "summary": "One-time moves or ongoing replication between databases, billed by instance hours or Serverless DCU hours.", "bestWhen": "you are moving a database into AWS.", - "watchOut": "AWS offers no SLA for change latency, and Apache Iceberg is not a target." + "watchOut": "AWS says there is no SLA for CDC latency, and its target list names S3, Kinesis, Kafka and others but not Iceberg (the guide's AWS DMS section links the page).", + "href": "#1-aws-database-migration-service-best-for-moving-databases-into-aws" }, "azuredms": { "name": "Azure Database Migration Service", - "summary": "Moves SQL Server databases to Azure SQL targets, with a Standard tier that the classic pricing page lists as free for offline moves.", + "summary": "Moves SQL Server databases to Azure SQL targets; the only pricing page we found is for the classic service.", "bestWhen": "you are moving SQL Server into Azure SQL.", - "watchOut": "the classic version for SQL Server lost support on 15 March 2026, the portal version has no assessment or login migration, and it does not suit other sources or targets outside Azure SQL." + "watchOut": "Microsoft's notice says the classic version for SQL Server scenarios was not supported after 15 March 2026, the overview table does not list assessment or login migration for the portal version, and it names Azure SQL targets only, so confirm other sources and targets with Microsoft." }, "googledms": { "name": "Google Database Migration Service", - "summary": "One-time or continuous moves into Google Cloud databases, with no additional charge for same-engine native moves to Cloud SQL or AlloyDB.", + "summary": "One-time or continuous moves into Google Cloud databases, with no additional charge for native same-engine moves to Cloud SQL or AlloyDB for PostgreSQL.", "bestWhen": "the target is Cloud SQL or AlloyDB.", "watchOut": "destinations are Google Cloud databases only, and no lake or warehouse is listed." }, "goldengate": { "name": "Oracle GoldenGate", - "summary": "Real-time copies between many systems, including one-way and two-way setups.", + "summary": "Copies between many systems, including one-way and two-way setups; Oracle's FAQ says it delivers changes in real time.", "bestWhen": "your estate is Oracle-heavy, or a copy has to run both ways.", - "watchOut": "licences are priced per processor or Named User Plus and usually negotiated, and Iceberg writing sits in a separate product." + "watchOut": "Oracle's price list charges per processor or Named User Plus, and Iceberg writing sits in a separate product." }, "datasync": { "name": "AWS DataSync", @@ -246,27 +244,27 @@ "fivetran": { "name": "Fivetran", "summary": "Managed pipelines from databases, apps and files into warehouses and lakes, billed on Monthly Active Rows.", - "bestWhen": "you want a warehouse fed with little upkeep.", - "watchOut": "it is built for ongoing syncs, not a one-time cutover, and its Iceberg service does not support position deletes." + "bestWhen": "you want a vendor to run the pipelines into a warehouse.", + "watchOut": "the decision table rules it out for a one-time database cutover, and its Iceberg service does not support position deletes." }, "airbyte": { "name": "Airbyte", "summary": "Syncs from many sources into warehouses, databases and lakes, with a free self-run Core edition.", - "bestWhen": "you want many connectors and are fine with minutes between syncs.", - "watchOut": "CDC runs on a schedule, and Cloud Standard syncs at most hourly, so skip it for a live cutover." + "bestWhen": "you want many connectors and are fine with scheduled syncs.", + "watchOut": "CDC runs on a schedule and Cloud Standard syncs at most hourly, so the decision table rules it out for a one-time cutover." }, "datastream": { "name": "Google Cloud Datastream", "summary": "A serverless service that backfills, then captures changes into BigQuery, Cloud Storage or Iceberg tables in BigQuery.", "bestWhen": "you are on Google Cloud and landing data in BigQuery.", - "watchOut": "a processed byte can be 2 to 5 times the real data size, its Iceberg mode is append-only, and there is no self-hosted option." + "watchOut": "a processed byte can be 2 to 5 times the real data size, its Iceberg mode is append-only, and Google documents no self-hosted option." }, "olake": { - "name": "OLake Go (ours)", + "name": "OLake Go", "summary": "Open-source copies of databases, S3 files and Kafka topics into Apache Iceberg or Parquet on storage you run, with change capture for PostgreSQL, MySQL/MariaDB, MongoDB and SQL Server.", "bestWhen": "you want an Iceberg or Parquet lake and want to run the tool on your own infrastructure.", - "watchOut": "it is built for Iceberg and Parquet output, and Oracle and Db2 load by full refresh or incremental copy.", - "href": "/docs/connectors/overview/" + "watchOut": "output is Apache Iceberg or Parquet, and Oracle, Db2 and S3 sources load by full refresh or incremental copy.", + "href": "#7-olake-go-best-for-copying-databases-into-iceberg-or-parquet-on-storage-you-run" } } } diff --git a/src/data/quizzes/database-to-iceberg-without-kafka.json b/src/data/quizzes/database-to-iceberg-without-kafka.json index 1b0a6882..f6b3d267 100644 --- a/src/data/quizzes/database-to-iceberg-without-kafka.json +++ b/src/data/quizzes/database-to-iceberg-without-kafka.json @@ -14,8 +14,7 @@ { "label": "Yes, and several systems read it", "scores": { - "kafka": 3, - "flink": 1 + "kafka": 3 }, "why": "other systems already read your Kafka topics" }, @@ -83,20 +82,18 @@ "label": "Yes, joins or filters in flight", "scores": { "flink": 3, - "risingwave": 3, - "kafka": 1 + "risingwave": 3 }, "exclude": [ "olake" ], - "why": "you transform in flight, which Flink CDC and RisingWave are built for" + "why": "Flink CDC's docs describe reshaping data in the same job and RisingWave offers SQL for shaping data; OLake Go is an extract-and-load tool with no transformation step" }, { "label": "Only small renames or tweaks", "scores": { "flink": 2, - "risingwave": 1, - "dlt": 1 + "risingwave": 1 }, "why": "you need light changes only" }, @@ -123,12 +120,11 @@ "dbzserver": 2, "kafka": 2, "flink": 1, - "risingwave": 2, + "risingwave": 1, "estuary": 2, - "fivetran": 1, - "dlt": 1 + "fivetran": 1 }, - "why": "your sources have CDC in most tools" + "why": "your sources have log-based CDC in most of these tools; check MongoDB and SQL Server by name" }, { "label": "Oracle, with change capture", @@ -141,7 +137,7 @@ "exclude": [ "olake" ], - "why": "you need Oracle CDC, which Debezium Server, Estuary and Flink CDC cover" + "why": "you need Oracle change capture, which Debezium Server, Estuary and Flink CDC list; OLake Go's change capture covers PostgreSQL, MySQL/MariaDB, MongoDB and SQL Server" }, { "label": "A mix of databases and SaaS apps", @@ -151,7 +147,7 @@ "exclude": [ "olake" ], - "why": "you need SaaS sources, which Fivetran covers" + "why": "you need SaaS sources, which Fivetran sells connectors for; OLake Go reads databases, S3 and Kafka" } ] }, @@ -209,7 +205,7 @@ "name": "Flink CDC", "summary": "Reads database changes inside Apache Flink and writes Iceberg, with room to reshape data in the same job.", "bestWhen": "Flink already runs and you join or clean data before it lands.", - "watchOut": "you need a Flink cluster, source tables need primary keys and the Iceberg sink does not offer exactly-once." + "watchOut": "you need a Flink cluster, source tables need primary keys and the pipeline page says exactly-once is not supported." }, "risingwave": { "name": "RisingWave", @@ -225,21 +221,21 @@ }, "fivetran": { "name": "Fivetran Managed Data Lake Service", - "summary": "A hosted service that lands data as Iceberg tables, next to Fivetran's large connector list.", - "bestWhen": "Fivetran already moves your data, or you also need SaaS sources, and you want to run nothing.", - "watchOut": "it is hosted only, has no position deletes, and compaction is not listed." + "summary": "A hosted service that lands data as Iceberg tables, next to Fivetran's database and SaaS connectors.", + "bestWhen": "Fivetran already moves your data, or you also need SaaS sources, and you want no brokers, cluster or sink to run.", + "watchOut": "the destination page lists the SaaS deployment only, position deletes are not supported, and compaction is not listed." }, "dlt": { "name": "dlt", "summary": "An open-source Python library that writes Iceberg through PyIceberg.", "bestWhen": "your team writes Python and the source is Postgres or a batch load.", - "watchOut": "log-based CDC is Postgres only, Parquet only, and you write and watch the code yourself." + "watchOut": "log-based CDC in the open-source library is PostgreSQL only, it writes Parquet only, and you write and watch the code yourself." }, "olake": { "name": "OLake Go", "summary": "Open-source software (Apache 2.0) that copies database changes into Apache Iceberg or Parquet with no Kafka or Debezium to run.", - "bestWhen": "your sources are Postgres, MySQL, MongoDB or SQL Server and you want a small setup.", - "watchOut": "jobs run on a schedule you set, and change capture covers PostgreSQL, MySQL/MariaDB, MongoDB and SQL Server (Oracle, Db2 and S3 load by full refresh or incremental)." + "bestWhen": "your sources are Postgres, MySQL, MongoDB or SQL Server and you want one process to run.", + "watchOut": "you choose the job schedule (every minute, hourly, daily, weekly or cron), so freshness follows it; change capture covers PostgreSQL, MySQL/MariaDB, MongoDB and SQL Server, and Oracle, Db2 and S3 sources load by full refresh or incremental sync." } } -} \ No newline at end of file +} diff --git a/src/data/quizzes/etl-pipelines.json b/src/data/quizzes/etl-pipelines.json index 9de4befe..43916eb6 100644 --- a/src/data/quizzes/etl-pipelines.json +++ b/src/data/quizzes/etl-pipelines.json @@ -17,7 +17,7 @@ "explain": "That's the whole idea. A pipeline extracts the data from each source, transforms it, and loads it into one destination, so nobody has to babysit it each day." }, { - "q": "What is the one real difference between ETL and ELT?", + "q": "Per Microsoft, what is the only difference between ETL and ELT?", "options": [ "ETL is for small data and ELT is for big data", "ETL needs a person to run it and ELT runs itself", @@ -28,7 +28,7 @@ "explain": "Microsoft puts it simply: the only difference is where the transformation happens. In ELT it runs inside the destination, using that system's own power." }, { - "q": "A pipeline copies only rows changed since its last run. Someone then deletes an order in the source. What happens?", + "q": "A pipeline copies only rows whose last-updated time is newer than its last run (a watermark). Someone then deletes an order in the source. What happens?", "options": [ "The pipeline deletes it from the destination too", "The pipeline stops and sends an alert", @@ -36,7 +36,7 @@ "The pipeline copies the order again" ], "correct": 2, - "explain": "A deleted row leaves nothing behind for the query to find. If deletes matter to you, the pipeline needs a different method for spotting changes." + "explain": "A deleted row leaves nothing behind for the query to find. Our read: if deletes matter to you, the pipeline needs a different method for spotting changes, such as SQL Server Change Tracking or reading the database's change log." }, { "q": "A run fails halfway and the scheduler retries it. What do you want the retry to do?", diff --git a/src/data/quizzes/mysql-to-iceberg-tools.json b/src/data/quizzes/mysql-to-iceberg-tools.json index f10b8f5f..fce965d8 100644 --- a/src/data/quizzes/mysql-to-iceberg-tools.json +++ b/src/data/quizzes/mysql-to-iceberg-tools.json @@ -13,19 +13,35 @@ "options": [ { "label": "A vendor runs it for me", - "scores": { "fivetran": 3, "estuary": 3, "airbyte": 2 }, + "scores": { + "fivetran": 3, + "estuary": 3, + "airbyte": 2 + }, "why": "you want a vendor to run it" }, { "label": "My team runs it, with a UI or command line", - "scores": { "olake": 3, "airbyte": 2, "supermetal": 2 }, - "exclude": ["fivetran"], + "scores": { + "olake": 3, + "airbyte": 2, + "supermetal": 2 + }, + "exclude": [ + "fivetran" + ], "why": "you want to self-host, and Fivetran's lake destination runs as SaaS only" }, { "label": "My team runs it, as Java services or code", - "scores": { "debezium": 3, "flink": 2, "kafka": 2 }, - "exclude": ["fivetran"], + "scores": { + "debezium": 3, + "flink": 2, + "kafka": 2 + }, + "exclude": [ + "fivetran" + ], "why": "you want to self-host, and Fivetran's lake destination runs as SaaS only" } ] @@ -35,17 +51,29 @@ "options": [ { "label": "Kafka, and several teams read the changes", - "scores": { "kafka": 3, "debezium": 1 }, + "scores": { + "kafka": 3, + "debezium": 1 + }, "why": "Kafka is already your backbone" }, { "label": "Apache Flink in production", - "scores": { "flink": 3 }, + "scores": { + "flink": 3 + }, "why": "Flink already runs in production" }, { "label": "Neither, I want few moving parts", - "scores": { "olake": 2, "debezium": 2, "supermetal": 2, "fivetran": 1, "estuary": 1, "airbyte": 1 }, + "scores": { + "olake": 2, + "debezium": 2, + "supermetal": 2, + "fivetran": 1, + "estuary": 1, + "airbyte": 1 + }, "why": "you want few moving parts" } ] @@ -55,18 +83,34 @@ "options": [ { "label": "Amazon S3", - "scores": { "estuary": 2, "airbyte": 2, "olake": 1, "supermetal": 1, "fivetran": 1 }, + "scores": { + "estuary": 2, + "airbyte": 2, + "olake": 1, + "supermetal": 1, + "fivetran": 1 + }, "why": "your tables live on S3" }, { "label": "Google Cloud or Azure storage", - "scores": { "olake": 2, "fivetran": 2, "supermetal": 1 }, - "exclude": ["estuary"], - "why": "Estuary's Iceberg connector supports only Amazon S3 today" + "scores": { + "olake": 2, + "fivetran": 2, + "supermetal": 1 + }, + "exclude": [ + "estuary" + ], + "why": "Estuary's Iceberg connector docs list REST catalogs on Amazon S3 only, with GCP and Azure planned" }, { "label": "Not decided yet", - "scores": { "olake": 1, "fivetran": 1, "supermetal": 1 }, + "scores": { + "olake": 1, + "fivetran": 1, + "supermetal": 1 + }, "why": "you want a wide choice of storage" } ] @@ -76,18 +120,36 @@ "options": [ { "label": "It must have an open-source licence", - "scores": { "debezium": 2, "olake": 2, "flink": 2, "kafka": 1 }, - "exclude": ["airbyte", "estuary"], - "why": "Airbyte Core uses the Elastic License 2.0 and Estuary uses the Business Source License" + "scores": { + "debezium": 2, + "olake": 2, + "flink": 2, + "kafka": 1 + }, + "exclude": [ + "airbyte" + ], + "why": "Airbyte Core uses the Elastic License 2.0, which is not an open-source licence" }, { "label": "No licence fee, I will pay for servers", - "scores": { "debezium": 2, "olake": 2, "flink": 2, "kafka": 2, "airbyte": 1 }, + "scores": { + "debezium": 2, + "olake": 2, + "flink": 2, + "kafka": 2, + "airbyte": 1 + }, "why": "you want to avoid a licence fee" }, { "label": "I can pay a vendor fee", - "scores": { "fivetran": 2, "estuary": 2, "supermetal": 2, "airbyte": 2 }, + "scores": { + "fivetran": 2, + "estuary": 2, + "supermetal": 2, + "airbyte": 2 + }, "why": "you can budget a paid plan" } ] @@ -97,14 +159,24 @@ "options": [ { "label": "Just databases like MySQL", - "scores": { "olake": 1, "debezium": 1, "estuary": 1, "supermetal": 1, "flink": 1 }, + "scores": { + "olake": 1, + "debezium": 1, + "estuary": 1, + "supermetal": 1, + "flink": 1 + }, "why": "your sources are mostly databases" }, { "label": "Many other sources, including SaaS apps", - "scores": { "airbyte": 3, "fivetran": 1 }, - "exclude": ["olake"], - "why": "you need SaaS app sources, which Airbyte and Fivetran cover" + "scores": { + "airbyte": 3 + }, + "exclude": [ + "olake" + ], + "why": "you need SaaS app sources, which Airbyte covers; OLake Go reads databases, S3 and Kafka" } ] } @@ -119,7 +191,7 @@ "olake": { "name": "OLake Go", "summary": "Free software that copies MySQL into Iceberg tables with a UI or command line, on your own infrastructure.", - "bestWhen": "you want a ready-made job, many catalogs and no licence fee.", + "bestWhen": "you want a UI, a documented catalog list and no licence fee.", "watchOut": "it runs on your own infrastructure, writes Iceberg and Parquet, and OLake Fusion handles compaction.", "href": "/docs/connectors/mysql/" }, @@ -143,9 +215,9 @@ }, "fivetran": { "name": "Fivetran Managed Data Lake Service", - "summary": "A vendor-run service that keeps your data in your own bucket and handles table upkeep.", + "summary": "A vendor-run service that, per its docs, keeps your data in your own bucket and runs snapshot cleanup every day.", "bestWhen": "you want someone else to run it.", - "watchOut": "no support for Iceberg position deletes, SaaS only, and priced on monthly active rows." + "watchOut": "we found no page that pairs its MySQL connector with the lake service, so ask Fivetran to confirm; position deletes are not supported, it runs as SaaS only, and it is priced on monthly active rows." }, "estuary": { "name": "Estuary", @@ -155,9 +227,9 @@ }, "supermetal": { "name": "Supermetal", - "summary": "A single self-hosted agent that writes Iceberg V3 or V2 and is priced on compute.", + "summary": "A self-hosted agent (Supermetal calls it a single binary) that writes Iceberg V3 or V2 and is priced on compute.", "bestWhen": "you want a lean agent and can budget the fee.", - "watchOut": "no data type promotion yet, compaction is on you, and it is paid after the trial and the licence is not stated." + "watchOut": "data type promotion is not supported, compaction is on you, it is paid after the trial and the pages we read state no licence." } } } diff --git a/src/data/quizzes/oltp-vs-olap.json b/src/data/quizzes/oltp-vs-olap.json new file mode 100644 index 00000000..c9824350 --- /dev/null +++ b/src/data/quizzes/oltp-vs-olap.json @@ -0,0 +1,65 @@ +{ + "id": "oltp-vs-olap", + "mode": "knowledge", + "title": "Test your OLTP vs OLAP basics", + "updated": "October 2026", + "guideHref": "#when-to-use-oltp-olap-both-or-neither", + "guideLabel": "Re-read when to use which", + "questions": [ + { + "q": "A shop's till and website record each sale the moment it happens. Which job is that?", + "options": [ + "OLAP, because it deals with sales data", + "OLTP, because it records one transaction at a time", + "Neither, because only a warehouse can store sales", + "OLAP, because it needs to be fast" + ], + "correct": 1, + "explain": "That's OLTP, the database behind your app. It records orders, payments and sign-ups one at a time, fast and correctly." + }, + { + "q": "Your finance team wants a report that adds up millions of past orders. Why is running it on the live shop database a bad idea?", + "options": [ + "It would delete the old orders", + "The report would be too inaccurate to trust", + "It can be slow and can block other transactions, like customers paying", + "Live databases refuse to answer any report at all" + ], + "correct": 2, + "explain": "Microsoft says reports that add up millions of transactions are very resource-intensive for an OLTP system. They can be slow and can block other transactions, though it notes exceptions such as a well-planned schema." + }, + { + "q": "The dashboard is fed by an overnight copy, so it is a day behind. Which question should still go to the live OLTP side?", + "options": [ + "Is this item in stock right now?", + "Which region sold the most this year?", + "How did revenue trend over the last 12 months?", + "Which products sold best last quarter?" + ], + "correct": 0, + "explain": "A day-old copy is fine for monthly reports. For something like \"is this in stock right now?\", it's wrong, so that question goes to the OLTP side." + }, + { + "q": "Why can a column store add up one field across millions of records so quickly?", + "options": [ + "It keeps every full record together, so it reads whole rows at once", + "It reads the whole table, then discards the fields it does not need", + "It copies every row to a second system before it answers", + "It keeps each field together, so it only reads the columns it needs" + ], + "correct": 3, + "explain": "A column store keeps each field together, so adding up one field is quick. A row store keeps each record together, so finding one order is quick." + }, + { + "q": "So which should a growing company pick, OLTP or OLAP?", + "options": [ + "OLAP alone, since it can answer every question", + "Usually both, with data copied from the first into the second", + "OLTP alone, since big reports are safe to run on the live app", + "Whichever has the bigger brand name" + ], + "correct": 1, + "explain": "AWS says most companies use both together. The better question is usually how to connect them, because they do different jobs." + } + ] +} diff --git a/src/data/quizzes/postgres-vs-mysql.json b/src/data/quizzes/postgres-vs-mysql.json new file mode 100644 index 00000000..0dddf312 --- /dev/null +++ b/src/data/quizzes/postgres-vs-mysql.json @@ -0,0 +1,158 @@ +{ + "id": "postgres-vs-mysql", + "mode": "recommend", + "title": "Which database fits you?", + "updated": "October 2026", + "guideHref": "#where-each-fits", + "guideLabel": "See the full decision table", + "topN": 2, + "questions": [ + { + "q": "Where are you starting from?", + "hint": "Moving a working system has real costs, so your current setup counts.", + "options": [ + { + "label": "A new project with no database yet", + "scores": { + "postgresql": 2, + "mysql": 1 + }, + "why": "you are starting fresh" + }, + { + "label": "We already run MySQL well", + "scores": { + "mysql": 3 + }, + "why": "switching costs more than it looks" + }, + { + "label": "A vendor product we need is built for MySQL", + "scores": { + "mysql": 3 + }, + "why": "your tools target MySQL" + } + ] + }, + { + "q": "How often will you change how your data is laid out?", + "options": [ + { + "label": "Often. We tweak our tables almost every week", + "scores": { + "postgresql": 3 + }, + "why": "schema changes can sit inside a transaction and roll back" + }, + { + "label": "Rarely. We set it up once and leave it", + "scores": { + "either": 2, + "postgresql": 1, + "mysql": 1 + }, + "why": "you can plan around MySQL's schema change rules" + } + ], + "hint": "Think adding a column or a new table to a live app." + }, + { + "q": "What do your reports need to do?", + "options": [ + { + "label": "Save the answer to a slow report so it opens fast (a materialized view)", + "scores": { + "postgresql": 3 + }, + "exclude": [ + "mysql" + ], + "why": "the MySQL 8.4 views FAQ answers No on materialized views" + }, + { + "label": "Join two lists and keep unmatched rows from both (a full outer join)", + "scores": { + "postgresql": 3 + }, + "why": "PostgreSQL supports it, and MySQL's join syntax lists no full outer join" + }, + { + "label": "Nothing fancy, just everyday lookups and summaries", + "scores": { + "either": 2, + "mysql": 1, + "postgresql": 1 + }, + "why": "both cover everyday SQL" + } + ] + }, + { + "q": "When something breaks, who do you want to call?", + "options": [ + { + "label": "A big vendor that sells a commercial edition", + "scores": { + "mysql": 3 + }, + "why": "Oracle sells commercial MySQL editions" + }, + { + "label": "My hosting company or my own team", + "scores": { + "either": 2, + "postgresql": 1, + "mysql": 1 + }, + "why": "pick what your hosting and teammates already know" + } + ] + }, + { + "q": "How much flexible, free-form data (JSON) will you keep?", + "options": [ + { + "label": "A lot, and I need to search inside it", + "scores": { + "either": 3, + "postgresql": 1 + }, + "why": "jsonb is indexable directly, and MySQL indexes through generated columns, so test both" + }, + { + "label": "Little or none", + "scores": { + "either": 1, + "postgresql": 1, + "mysql": 1 + }, + "why": "JSON will not decide it" + } + ] + } + ], + "results": { + "postgresql": { + "name": "PostgreSQL", + "summary": "A free, community-run database with transactional schema changes, full outer join, materialized views and six index types.", + "bestWhen": "You are starting fresh, ship many migrations, or need materialized views or its six documented index types.", + "watchOut": "It needs VACUUM housekeeping, though autovacuum is on by default. If your team already runs MySQL well, switching costs real time.", + "href": "#where-each-fits" + }, + "mysql": { + "name": "MySQL", + "summary": "A mature database developed by Oracle. In 8.4 the default engine is InnoDB, which follows ACID.", + "bestWhen": "Your team, tools and hosting already run on it, or you want a commercial edition from Oracle.", + "watchOut": "Its 8.4 join syntax lists no full outer join, its views FAQ answers No on materialized views, and a schema change ends any open transaction. MySQL 8.0 is in Sustaining Support.", + "href": "#schema-changes-the-difference-that-bites-in-production" + }, + "either": { + "name": "Either one works", + "summary": "Both are free, mature and can run most web apps. The post found no neutral, linked benchmark that crowns a winner.", + "bestWhen": "Your needs are plain and no feature above is a must. Test your own slowest queries on both.", + "watchOut": "Do not pick on speed claims. Check your version too: MySQL 8.0 is in Sustaining Support and PostgreSQL 14 gets its final release on November 12, 2026.", + "href": "#how-to-test-both-on-your-own-data" + } + } +} \ No newline at end of file diff --git a/src/data/quizzes/sql-server-cdc-tools.json b/src/data/quizzes/sql-server-cdc-tools.json index 8765d708..1267fbc7 100644 --- a/src/data/quizzes/sql-server-cdc-tools.json +++ b/src/data/quizzes/sql-server-cdc-tools.json @@ -33,7 +33,7 @@ { "label": "Microsoft Fabric runs it for me", "scores": { - "fabric": 3 + "fabric": 4 }, "why": "you want Microsoft's platform to run it" } @@ -54,30 +54,36 @@ "scores": { "fivetran": 3, "airbyte": 2, - "estuary": 2, - "striim": 2 + "estuary": 2 }, - "why": "these tools document warehouse loads" + "why": "warehouses are among the targets these tools list" }, { "label": "Iceberg tables on Amazon S3", "scores": { "fivetran": 2, "airbyte": 2, - "olake": 3, - "estuary": 1 + "olake": 3 }, "exclude": [ "fabric" ], - "why": "you want Iceberg on S3" + "why": "your target is Iceberg on S3 (Fabric mirroring writes to OneLake)" }, { "label": "Microsoft Fabric", "scores": { - "fabric": 3 + "fabric": 5 }, "why": "Fabric is where analysts work" + }, + { + "label": "Iceberg on Google Cloud Storage or Amazon S3 Tables", + "scores": { + "striim": 3, + "fivetran": 2 + }, + "why": "you want Iceberg on Google Cloud Storage or S3 Tables, which Striim's Iceberg writers cover" } ] }, @@ -88,9 +94,9 @@ "label": "Many have no primary key", "scores": { "estuary": 3, - "fivetran": 2 + "fivetran": 1 }, - "why": "keyless tables need a tool that handles them" + "why": "Estuary's CDC connector handles tables without a primary key, though you set a key by hand" }, { "label": "CDC is not allowed on the server", @@ -101,7 +107,7 @@ "exclude": [ "debezium" ], - "why": "Teleport Sync does not use CDC, and Estuary's batch connector polls tables, per its docs" + "why": "CDC is off the table, so you need a method that skips it: Fivetran Teleport Sync, or Estuary's batch connector, which its docs say polls" }, { "label": "They have keys and CDC is fine", @@ -145,14 +151,14 @@ "estuary": 3, "olake": 3 }, - "why": "Estuary and OLake switch to a second capture instance" + "why": "Estuary and OLake Go both switch to a second capture instance" }, { "label": "Rarely", "scores": { "fivetran": 2 }, - "why": "schema changes are not a worry" + "why": "new columns are rare, so Fivetran's single capture instance rule matters less" } ] }, @@ -164,9 +170,10 @@ "scores": { "striim": 3, "olake": 2, - "estuary": 1 + "debezium": 2, + "fivetran": 1 }, - "why": "lower load or a replica read matters to you" + "why": "lower load (Striim's claim for MSJet) or a read from a replica matters to you" }, { "label": "Not much", @@ -183,47 +190,47 @@ "results": { "debezium": { "name": "Debezium", - "summary": "An open-source CDC engine that reads SQL Server change tables and writes to Kafka topics, one per table.", + "summary": "A CDC engine with a free licence that reads SQL Server change tables and writes to Kafka topics, one per table.", "bestWhen": "Kafka is already in your stack.", - "watchOut": "after an outage the docs warn of duplicate events, and you run Kafka plus a schema history topic yourself." + "watchOut": "after an outage its docs warn of duplicate events, so your loads must cope with repeats." }, "fivetran": { "name": "Fivetran", "summary": "A vendor-run service that documents four ways to find SQL Server changes, including Teleport Sync for when CDC is off.", - "bestWhen": "you want a vendor to run the pipeline and you are fine with row-based billing.", - "watchOut": "with CDC it syncs only tables with a single capture instance, so a new column means a new instance." + "bestWhen": "you want a vendor to run the pipeline and you are fine with billing on monthly active rows.", + "watchOut": "with CDC it syncs only tables with a single capture instance, so a new column means a new instance and removing the old one." }, "airbyte": { "name": "Airbyte", - "summary": "An open-source option whose SQL Server connector uses CDC in scheduled syncs, with Iceberg on S3 through its S3 Data Lake destination.", + "summary": "Its Core edition is free to self-run, and Airbyte calls it open source. The SQL Server connector uses CDC in scheduled syncs, with Iceberg on S3 through its S3 Data Lake destination.", "bestWhen": "scheduled syncs are fine and you want something you can run yourself.", - "watchOut": "incremental CDC needs a primary key, delivery is at least once, and its docs do not treat CDC as continuous streaming." + "watchOut": "incremental CDC needs a primary key, delivery is at least once, and its CDC docs say it does not treat CDC sources as infinite streaming sources." }, "estuary": { "name": "Estuary", - "summary": "Three SQL Server connectors: CDC, change tracking and batch, so you can pick per table.", - "bestWhen": "your tables are a mix, some with keys and some without.", - "watchOut": "the CDC worker must run on the primary, and its platform uses the Business Source License." + "summary": "Three SQL Server connectors: CDC, change tracking and batch, so you can pick the one that fits.", + "bestWhen": "you want to choose between CDC and change tracking, or you have tables without a primary key.", + "watchOut": "the CDC worker must run on the primary, and the batch connector polls, so expect latency of minutes to hours." }, "striim": { "name": "Striim", - "summary": "Two readers: MS SQL Reader for CDC tables and MSJet for log backups, which has lower use of the source server.", - "bestWhen": "source load is your main worry and you run big, busy servers.", - "watchOut": "its Iceberg writers cover Google Cloud Storage or Amazon S3 Tables, not plain S3." + "summary": "Two readers: MS SQL Reader for CDC tables and MSJet for log backups, which Striim says uses less of the source server.", + "bestWhen": "you want to read log backups, and Striim's claim of lower load on the source matters to you.", + "watchOut": "its Iceberg Writer docs cover Google Cloud Storage, and its S3 Tables Writer covers Amazon S3 Tables." }, "fabric": { "name": "Microsoft Fabric mirroring", "summary": "Microsoft's own way to copy a SQL Server database into Fabric.", "bestWhen": "Fabric is where your analysts work.", "watchOut": "data lands in Fabric OneLake as Delta tables, and a schema change breaks mirroring on 2016 to 2022 until you re-enable CDC for the table.", - "href": "#10-microsoft-fabric-mirroring-best-for-teams-whose-target-is-microsoft-fabric" + "href": "#11-microsoft-fabric-mirroring-best-for-teams-whose-target-is-microsoft-fabric" }, "olake": { - "name": "OLake Go (ours)", - "summary": "Our open-source tool. Per its docs it reads SQL Server CDC capture instances (2017 or later) and writes Apache Iceberg or Parquet.", + "name": "OLake Go", + "summary": "Our open-source tool. It reads SQL Server CDC capture instances (2017 or later) and writes Apache Iceberg or Parquet.", "bestWhen": "you want SQL Server changes in Iceberg tables on storage you own and can run a container.", - "watchOut": "it writes Iceberg and Parquet, you run it on your own infrastructure, and CDC needs to be enabled on each table first.", - "href": "#11-olake-go-best-for-sql-server-changes-into-iceberg-or-parquet-on-your-own-storage" + "watchOut": "output is Apache Iceberg or Parquet, you run it on your own infrastructure, and it needs to keep reading inside SQL Server's three-day change table window (Microsoft's default).", + "href": "#6-olake-go-best-for-sql-server-changes-into-iceberg-or-parquet-on-your-own-storage" } } } diff --git a/src/data/quizzes/what-is-a-data-pipeline.json b/src/data/quizzes/what-is-a-data-pipeline.json index 8efddf4b..65e021f0 100644 --- a/src/data/quizzes/what-is-a-data-pipeline.json +++ b/src/data/quizzes/what-is-a-data-pipeline.json @@ -14,7 +14,7 @@ "Only when the data ends up in cheap file storage" ], "correct": 1, - "explain": "IBM says a data pipeline may simply move data from one system to another. ETL is one kind of pipeline, so every ETL pipeline is a data pipeline but not the other way round." + "explain": "IBM says a data pipeline may simply move data from one system to another. On IBM's reading, ETL is one kind of pipeline, so every ETL pipeline is a data pipeline but not the other way round." }, { "q": "A pipeline loads data in groups at set times, say once a night. How fresh is the data in the report?", @@ -22,7 +22,7 @@ "Updated the second something changes", "Updated only when someone clicks refresh", "Always a few seconds old", - "As old as the last run" + "As old as the last successful run" ], "correct": 3, "explain": "That is a batch pipeline. It is simple, and it fits reports that can be a few hours or a day old. If you need seconds, that is when streaming earns its keep." diff --git a/src/data/quizzes/what-is-fivetran.json b/src/data/quizzes/what-is-fivetran.json index b4347ce8..195cff79 100644 --- a/src/data/quizzes/what-is-fivetran.json +++ b/src/data/quizzes/what-is-fivetran.json @@ -10,11 +10,11 @@ "options": [ "It builds your dashboards and reports", "It stores your only copy of the data for safekeeping", - "It copies data from your apps and databases into a warehouse or lake and keeps it fresh", + "It copies data from your apps and databases into a warehouse or lake on a schedule", "It cleans and models the data so your team never has to write SQL" ], "correct": 2, - "explain": "You pick a source, a destination and a schedule, and Fivetran runs the connector. The reshaping afterwards, usually in SQL, is still your job." + "explain": "Per Fivetran, you pick a source, a destination and a schedule, and Fivetran runs the connector. The reshaping afterwards happens in your destination, with pre-built models or dbt, and is still your job." }, { "q": "A new connection finishes its first big copy. What does it do from then on?", @@ -28,7 +28,7 @@ "explain": "The first run is the initial sync and copies everything you selected. After that it switches to incremental mode and moves only the changes." }, { - "q": "In the post's orders example, one order is deleted in the source database. What does the destination show afterwards?", + "q": "In the post's orders example (a PostgreSQL source using logical replication), one order is deleted in the source database. What does the destination show afterwards?", "options": [ "The order is gone, so reports match the source on their own", "The whole table is copied again from scratch", @@ -36,7 +36,7 @@ "The order is still there, just marked as deleted" ], "correct": 3, - "explain": "Order 3 stays in the destination, flagged as deleted. Your queries need to filter flagged rows out, or deleted orders sneak into your reports." + "explain": "Per Fivetran's PostgreSQL connector docs, the destination row for order 3 is updated with _fivetran_deleted = TRUE, so it stays in the destination, flagged. Your queries need to filter flagged rows out, or deleted orders sneak into your reports." }, { "q": "A database keeps its change log for a limited time. What happens if Fivetran falls behind for longer than that?", @@ -47,7 +47,7 @@ "It switches your plan to a cheaper tier" ], "correct": 0, - "explain": "Think of the log as a diary the database wipes after a while. If Fivetran misses the window, the changes are gone, so the fix is a full re-copy. Big tables mean extra load and extra waiting." + "explain": "Fivetran's docs say expired change logs require a full source re-sync. Think of the log as a diary the database wipes after a while: if Fivetran misses the window, the changes are gone. On a big table, plan for extra load and extra waiting." }, { "q": "Fivetran bills by monthly active rows, counted per connection. Which setup costs more at the same list rates?", @@ -58,7 +58,7 @@ "It depends only on how many users you add" ], "correct": 2, - "explain": "Each connection is priced on its own curve and you can't pool them. The post's Standard-plan example is about $1,010 for one 4 million row connection, against $2,000 for four 1 million row ones." + "explain": "Each connection is priced on its own curve and you cannot pool them. In the post's Standard-plan example, from Fivetran's Service Consumption Table at list rates, one 4 million row connection costs about $1,010, against $2,000 for four 1 million row ones." } ] } diff --git a/src/data/quizzes/what-is-matillion.json b/src/data/quizzes/what-is-matillion.json index f1f86c60..b598a287 100644 --- a/src/data/quizzes/what-is-matillion.json +++ b/src/data/quizzes/what-is-matillion.json @@ -25,7 +25,7 @@ "On the laptop of whoever built the pipeline" ], "correct": 2, - "explain": "The transforms run as SQL inside your warehouse, which is called push-down. So the warehouse does the heavy lifting, and yes, your warehouse bill grows with it." + "explain": "Matillion's own comparison post says Maia Foundation runs transformations as native SQL pushed down into the warehouse, which is called push-down. So the warehouse does the heavy lifting, and your warehouse bill grows with it." }, { "q": "You open Matillion's pricing page to see what Developer, Teams and Scale cost. What do you find?", @@ -36,7 +36,7 @@ "Features for each plan, but no dollar prices" ], "correct": 3, - "explain": "You pay in credits, and the page shows no dollar amount for any plan. Matillion also does not publish the price of one credit, so ask for it in writing before you sign." + "explain": "You pay in credits, and the pricing page shows no dollar amount for any plan. The post found no price per credit on Matillion's official pages either, so ask for it in writing before you sign." }, { "q": "Someone forgets to switch off an older Matillion ETL instance over the weekend. What happens?", @@ -47,7 +47,7 @@ "The pipelines fail until someone restarts it" ], "correct": 1, - "explain": "Matillion ETL counts credits for every hour the software is on in your cloud account. In the post's example, the same instance cost 3 times as much when left on all month." + "explain": "Per Matillion's credit terms, Matillion ETL counts credits for every hour the software is on in your cloud account. In the post's invented example, the same 4-core instance used 3 times as many credits when left on all month." }, { "q": "On the current Maia Foundation platform, which kind of pipeline uses more credits for each hour it runs?", @@ -58,7 +58,7 @@ "Neither one, because both are free" ], "correct": 0, - "explain": "A transformation hour costs 3 credits, while a loading hour costs 1. So trimming an hour of transformation saves more than trimming an hour of loading." + "explain": "Per Matillion's credit terms, a transformation hour costs 3 credits, while an orchestration (loading) hour costs 1. So trimming an hour of transformation saves more than trimming an hour of loading." } ] } diff --git a/src/theme/BlogPostItems/index.js b/src/theme/BlogPostItems/index.js index 8fa3a76b..150a16d5 100644 --- a/src/theme/BlogPostItems/index.js +++ b/src/theme/BlogPostItems/index.js @@ -30,6 +30,7 @@ export default function BlogPostItems({ items, featured = false }) { priority={index === 0} featured={featured && index === 0} half={index >= halfFrom} + showAuthor={false} formatDate={formatDate} /> ))} diff --git a/static/img/blog/2026/10/aws-olap-oltp-comparison-table.webp b/static/img/blog/2026/10/aws-olap-oltp-comparison-table.webp new file mode 100644 index 00000000..931a5c9d Binary files /dev/null and b/static/img/blog/2026/10/aws-olap-oltp-comparison-table.webp differ diff --git a/static/img/blog/2026/10/best-data-management-platforms--airbyte-pricing-plans.webp b/static/img/blog/2026/10/best-data-management-platforms--airbyte-pricing-plans.webp new file mode 100644 index 00000000..ac6894c9 Binary files /dev/null and b/static/img/blog/2026/10/best-data-management-platforms--airbyte-pricing-plans.webp differ diff --git a/static/img/blog/2026/10/best-data-management-platforms--bigquery-on-demand-free-tib.webp b/static/img/blog/2026/10/best-data-management-platforms--bigquery-on-demand-free-tib.webp new file mode 100644 index 00000000..cd798a3e Binary files /dev/null and b/static/img/blog/2026/10/best-data-management-platforms--bigquery-on-demand-free-tib.webp differ diff --git a/static/img/blog/2026/10/best-data-management-platforms--snowflake-pricing-options.webp b/static/img/blog/2026/10/best-data-management-platforms--snowflake-pricing-options.webp new file mode 100644 index 00000000..387ad5d9 Binary files /dev/null and b/static/img/blog/2026/10/best-data-management-platforms--snowflake-pricing-options.webp differ diff --git a/static/img/blog/2026/10/best-data-management-platforms-purview-governed-assets.webp b/static/img/blog/2026/10/best-data-management-platforms-purview-governed-assets.webp new file mode 100644 index 00000000..433fb7ab Binary files /dev/null and b/static/img/blog/2026/10/best-data-management-platforms-purview-governed-assets.webp differ diff --git a/static/img/blog/2026/10/best-data-management-platforms-start-from-problem.webp b/static/img/blog/2026/10/best-data-management-platforms-start-from-problem.webp new file mode 100644 index 00000000..dd58c5e7 Binary files /dev/null and b/static/img/blog/2026/10/best-data-management-platforms-start-from-problem.webp differ diff --git a/static/img/blog/2026/10/best-data-management-platforms-two-meanings.webp b/static/img/blog/2026/10/best-data-management-platforms-two-meanings.webp new file mode 100644 index 00000000..417b2b78 Binary files /dev/null and b/static/img/blog/2026/10/best-data-management-platforms-two-meanings.webp differ diff --git a/static/img/blog/2026/10/best-data-pipeline-tools--dagster-pricing-plans.webp b/static/img/blog/2026/10/best-data-pipeline-tools--dagster-pricing-plans.webp new file mode 100644 index 00000000..b1b6fe59 Binary files /dev/null and b/static/img/blog/2026/10/best-data-pipeline-tools--dagster-pricing-plans.webp differ diff --git a/static/img/blog/2026/10/best-data-pipeline-tools--dbt-pricing-plans.webp b/static/img/blog/2026/10/best-data-pipeline-tools--dbt-pricing-plans.webp new file mode 100644 index 00000000..8d4e860f Binary files /dev/null and b/static/img/blog/2026/10/best-data-pipeline-tools--dbt-pricing-plans.webp differ diff --git a/static/img/blog/2026/10/best-data-pipeline-tools--hevo-pricing-plans.webp b/static/img/blog/2026/10/best-data-pipeline-tools--hevo-pricing-plans.webp new file mode 100644 index 00000000..7ab79e88 Binary files /dev/null and b/static/img/blog/2026/10/best-data-pipeline-tools--hevo-pricing-plans.webp differ diff --git a/static/img/blog/2026/10/best-data-pipeline-tools--mwaa-pricing-rates.webp b/static/img/blog/2026/10/best-data-pipeline-tools--mwaa-pricing-rates.webp new file mode 100644 index 00000000..c5a3413a Binary files /dev/null and b/static/img/blog/2026/10/best-data-pipeline-tools--mwaa-pricing-rates.webp differ diff --git a/static/img/blog/2026/10/best-data-pipeline-tools--prefect-pricing-plans.webp b/static/img/blog/2026/10/best-data-pipeline-tools--prefect-pricing-plans.webp new file mode 100644 index 00000000..128e8a9d Binary files /dev/null and b/static/img/blog/2026/10/best-data-pipeline-tools--prefect-pricing-plans.webp differ diff --git a/static/img/blog/2026/10/best-data-pipeline-tools-build-from-parts.webp b/static/img/blog/2026/10/best-data-pipeline-tools-build-from-parts.webp new file mode 100644 index 00000000..04041396 Binary files /dev/null and b/static/img/blog/2026/10/best-data-pipeline-tools-build-from-parts.webp differ diff --git a/static/img/blog/2026/10/best-data-pipeline-tools-four-jobs.webp b/static/img/blog/2026/10/best-data-pipeline-tools-four-jobs.webp new file mode 100644 index 00000000..4b26867b Binary files /dev/null and b/static/img/blog/2026/10/best-data-pipeline-tools-four-jobs.webp differ diff --git a/static/img/blog/2026/10/best-data-quality-tools--dbt-data-tests-plain-english.webp b/static/img/blog/2026/10/best-data-quality-tools--dbt-data-tests-plain-english.webp new file mode 100644 index 00000000..1c2f5c87 Binary files /dev/null and b/static/img/blog/2026/10/best-data-quality-tools--dbt-data-tests-plain-english.webp differ diff --git a/static/img/blog/2026/10/best-data-quality-tools--dbt-pricing-plans-quality.webp b/static/img/blog/2026/10/best-data-quality-tools--dbt-pricing-plans-quality.webp new file mode 100644 index 00000000..8d4e860f Binary files /dev/null and b/static/img/blog/2026/10/best-data-quality-tools--dbt-pricing-plans-quality.webp differ diff --git a/static/img/blog/2026/10/best-data-quality-tools--soda-pricing-plans.webp b/static/img/blog/2026/10/best-data-quality-tools--soda-pricing-plans.webp new file mode 100644 index 00000000..ca258d8b Binary files /dev/null and b/static/img/blog/2026/10/best-data-quality-tools--soda-pricing-plans.webp differ diff --git a/static/img/blog/2026/10/best-data-quality-tools-adoption-path.webp b/static/img/blog/2026/10/best-data-quality-tools-adoption-path.webp new file mode 100644 index 00000000..49be6b47 Binary files /dev/null and b/static/img/blog/2026/10/best-data-quality-tools-adoption-path.webp differ diff --git a/static/img/blog/2026/10/best-data-quality-tools-test-flow.webp b/static/img/blog/2026/10/best-data-quality-tools-test-flow.webp new file mode 100644 index 00000000..39079d1c Binary files /dev/null and b/static/img/blog/2026/10/best-data-quality-tools-test-flow.webp differ diff --git a/static/img/blog/2026/10/best-data-quality-tools-two-jobs.webp b/static/img/blog/2026/10/best-data-quality-tools-two-jobs.webp new file mode 100644 index 00000000..5e5a4ff8 Binary files /dev/null and b/static/img/blog/2026/10/best-data-quality-tools-two-jobs.webp differ diff --git a/static/img/blog/2026/10/elementary-cloud-pricing.webp b/static/img/blog/2026/10/elementary-cloud-pricing.webp new file mode 100644 index 00000000..93194489 Binary files /dev/null and b/static/img/blog/2026/10/elementary-cloud-pricing.webp differ diff --git a/static/img/blog/2026/10/landing-apache-airflow.webp b/static/img/blog/2026/10/landing-apache-airflow.webp new file mode 100644 index 00000000..596f2b4d Binary files /dev/null and b/static/img/blog/2026/10/landing-apache-airflow.webp differ diff --git a/static/img/blog/2026/10/landing-apache-flink.webp b/static/img/blog/2026/10/landing-apache-flink.webp new file mode 100644 index 00000000..8919cd63 Binary files /dev/null and b/static/img/blog/2026/10/landing-apache-flink.webp differ diff --git a/static/img/blog/2026/10/landing-ataccama.webp b/static/img/blog/2026/10/landing-ataccama.webp new file mode 100644 index 00000000..ead302ff Binary files /dev/null and b/static/img/blog/2026/10/landing-ataccama.webp differ diff --git a/static/img/blog/2026/10/landing-collibra.webp b/static/img/blog/2026/10/landing-collibra.webp new file mode 100644 index 00000000..8ed03afe Binary files /dev/null and b/static/img/blog/2026/10/landing-collibra.webp differ diff --git a/static/img/blog/2026/10/landing-dagster.webp b/static/img/blog/2026/10/landing-dagster.webp new file mode 100644 index 00000000..ee8e6753 Binary files /dev/null and b/static/img/blog/2026/10/landing-dagster.webp differ diff --git a/static/img/blog/2026/10/landing-datahub.webp b/static/img/blog/2026/10/landing-datahub.webp new file mode 100644 index 00000000..52beaf74 Binary files /dev/null and b/static/img/blog/2026/10/landing-datahub.webp differ diff --git a/static/img/blog/2026/10/landing-dbt.webp b/static/img/blog/2026/10/landing-dbt.webp new file mode 100644 index 00000000..537e809e Binary files /dev/null and b/static/img/blog/2026/10/landing-dbt.webp differ diff --git a/static/img/blog/2026/10/landing-deequ.webp b/static/img/blog/2026/10/landing-deequ.webp new file mode 100644 index 00000000..e5d7ed0b Binary files /dev/null and b/static/img/blog/2026/10/landing-deequ.webp differ diff --git a/static/img/blog/2026/10/landing-elementary.webp b/static/img/blog/2026/10/landing-elementary.webp new file mode 100644 index 00000000..85a5a27c Binary files /dev/null and b/static/img/blog/2026/10/landing-elementary.webp differ diff --git a/static/img/blog/2026/10/landing-great-expectations.webp b/static/img/blog/2026/10/landing-great-expectations.webp new file mode 100644 index 00000000..7dad5e77 Binary files /dev/null and b/static/img/blog/2026/10/landing-great-expectations.webp differ diff --git a/static/img/blog/2026/10/landing-kafka.webp b/static/img/blog/2026/10/landing-kafka.webp new file mode 100644 index 00000000..772489f6 Binary files /dev/null and b/static/img/blog/2026/10/landing-kafka.webp differ diff --git a/static/img/blog/2026/10/landing-microsoft-purview.webp b/static/img/blog/2026/10/landing-microsoft-purview.webp new file mode 100644 index 00000000..6e15c7db Binary files /dev/null and b/static/img/blog/2026/10/landing-microsoft-purview.webp differ diff --git a/static/img/blog/2026/10/landing-openmetadata.webp b/static/img/blog/2026/10/landing-openmetadata.webp new file mode 100644 index 00000000..bb422e39 Binary files /dev/null and b/static/img/blog/2026/10/landing-openmetadata.webp differ diff --git a/static/img/blog/2026/10/landing-prefect.webp b/static/img/blog/2026/10/landing-prefect.webp new file mode 100644 index 00000000..4e9f7b14 Binary files /dev/null and b/static/img/blog/2026/10/landing-prefect.webp differ diff --git a/static/img/blog/2026/10/landing-semarchy.webp b/static/img/blog/2026/10/landing-semarchy.webp new file mode 100644 index 00000000..64daa87c Binary files /dev/null and b/static/img/blog/2026/10/landing-semarchy.webp differ diff --git a/static/img/blog/2026/10/landing-soda.webp b/static/img/blog/2026/10/landing-soda.webp new file mode 100644 index 00000000..005108dc Binary files /dev/null and b/static/img/blog/2026/10/landing-soda.webp differ diff --git a/static/img/blog/2026/10/mysql-atomic-ddl-not-transactional.webp b/static/img/blog/2026/10/mysql-atomic-ddl-not-transactional.webp new file mode 100644 index 00000000..db97cbd7 Binary files /dev/null and b/static/img/blog/2026/10/mysql-atomic-ddl-not-transactional.webp differ diff --git a/static/img/blog/2026/10/mysql-faq-no-materialized-views.webp b/static/img/blog/2026/10/mysql-faq-no-materialized-views.webp new file mode 100644 index 00000000..9e0900bb Binary files /dev/null and b/static/img/blog/2026/10/mysql-faq-no-materialized-views.webp differ diff --git a/static/img/blog/2026/10/oltp-vs-olap--microsoft-olap-d.webp b/static/img/blog/2026/10/oltp-vs-olap--microsoft-olap-d.webp new file mode 100644 index 00000000..c748ee25 Binary files /dev/null and b/static/img/blog/2026/10/oltp-vs-olap--microsoft-olap-d.webp differ diff --git a/static/img/blog/2026/10/oltp-vs-olap--microsoft-oltp-d.webp b/static/img/blog/2026/10/oltp-vs-olap--microsoft-oltp-d.webp new file mode 100644 index 00000000..22055585 Binary files /dev/null and b/static/img/blog/2026/10/oltp-vs-olap--microsoft-oltp-d.webp differ diff --git a/static/img/blog/2026/10/oltp-vs-olap--snowflake-hybrid-a.webp b/static/img/blog/2026/10/oltp-vs-olap--snowflake-hybrid-a.webp new file mode 100644 index 00000000..5c4dd873 Binary files /dev/null and b/static/img/blog/2026/10/oltp-vs-olap--snowflake-hybrid-a.webp differ diff --git a/static/img/blog/2026/10/oltp-vs-olap-two-systems.webp b/static/img/blog/2026/10/oltp-vs-olap-two-systems.webp new file mode 100644 index 00000000..daa1301d Binary files /dev/null and b/static/img/blog/2026/10/oltp-vs-olap-two-systems.webp differ diff --git a/static/img/blog/2026/10/oltp-vs-olap-which-fits.webp b/static/img/blog/2026/10/oltp-vs-olap-which-fits.webp new file mode 100644 index 00000000..ac723ac7 Binary files /dev/null and b/static/img/blog/2026/10/oltp-vs-olap-which-fits.webp differ diff --git a/static/img/blog/2026/10/postgres-index-types-list.webp b/static/img/blog/2026/10/postgres-index-types-list.webp new file mode 100644 index 00000000..5e2866e6 Binary files /dev/null and b/static/img/blog/2026/10/postgres-index-types-list.webp differ diff --git a/static/img/blog/2026/10/postgres-jsonb-preferred.webp b/static/img/blog/2026/10/postgres-jsonb-preferred.webp new file mode 100644 index 00000000..c1358107 Binary files /dev/null and b/static/img/blog/2026/10/postgres-jsonb-preferred.webp differ diff --git a/static/img/blog/2026/10/postgres-sql-conformance.webp b/static/img/blog/2026/10/postgres-sql-conformance.webp new file mode 100644 index 00000000..0a817226 Binary files /dev/null and b/static/img/blog/2026/10/postgres-sql-conformance.webp differ diff --git a/static/img/blog/2026/10/postgres-vs-mysql-ddl.webp b/static/img/blog/2026/10/postgres-vs-mysql-ddl.webp new file mode 100644 index 00000000..a0ecc9cc Binary files /dev/null and b/static/img/blog/2026/10/postgres-vs-mysql-ddl.webp differ diff --git a/static/img/blog/2026/10/postgres-vs-mysql-which-fits.webp b/static/img/blog/2026/10/postgres-vs-mysql-which-fits.webp new file mode 100644 index 00000000..d83ffaba Binary files /dev/null and b/static/img/blog/2026/10/postgres-vs-mysql-which-fits.webp differ diff --git a/static/img/blog/cover/best-data-management-platforms-cover.webp b/static/img/blog/cover/best-data-management-platforms-cover.webp new file mode 100644 index 00000000..1958eb9e Binary files /dev/null and b/static/img/blog/cover/best-data-management-platforms-cover.webp differ diff --git a/static/img/blog/cover/best-data-pipeline-tools-cover.webp b/static/img/blog/cover/best-data-pipeline-tools-cover.webp new file mode 100644 index 00000000..ffebcc84 Binary files /dev/null and b/static/img/blog/cover/best-data-pipeline-tools-cover.webp differ diff --git a/static/img/blog/cover/best-data-quality-tools-cover.webp b/static/img/blog/cover/best-data-quality-tools-cover.webp new file mode 100644 index 00000000..5f47ad0e Binary files /dev/null and b/static/img/blog/cover/best-data-quality-tools-cover.webp differ diff --git a/static/img/blog/cover/oltp-vs-olap-cover.webp b/static/img/blog/cover/oltp-vs-olap-cover.webp new file mode 100644 index 00000000..73ba0f53 Binary files /dev/null and b/static/img/blog/cover/oltp-vs-olap-cover.webp differ diff --git a/static/img/blog/cover/postgres-vs-mysql-cover.webp b/static/img/blog/cover/postgres-vs-mysql-cover.webp new file mode 100644 index 00000000..fb08fcac Binary files /dev/null and b/static/img/blog/cover/postgres-vs-mysql-cover.webp differ diff --git a/static/img/og/blog/cover/best-data-management-platforms-cover.jpg b/static/img/og/blog/cover/best-data-management-platforms-cover.jpg new file mode 100644 index 00000000..e795d1f2 Binary files /dev/null and b/static/img/og/blog/cover/best-data-management-platforms-cover.jpg differ diff --git a/static/img/og/blog/cover/best-data-pipeline-tools-cover.jpg b/static/img/og/blog/cover/best-data-pipeline-tools-cover.jpg new file mode 100644 index 00000000..3b42abe1 Binary files /dev/null and b/static/img/og/blog/cover/best-data-pipeline-tools-cover.jpg differ diff --git a/static/img/og/blog/cover/best-data-quality-tools-cover.jpg b/static/img/og/blog/cover/best-data-quality-tools-cover.jpg new file mode 100644 index 00000000..63575a2f Binary files /dev/null and b/static/img/og/blog/cover/best-data-quality-tools-cover.jpg differ diff --git a/static/img/og/blog/cover/oltp-vs-olap-cover.jpg b/static/img/og/blog/cover/oltp-vs-olap-cover.jpg new file mode 100644 index 00000000..a68d2c52 Binary files /dev/null and b/static/img/og/blog/cover/oltp-vs-olap-cover.jpg differ diff --git a/static/img/og/blog/cover/postgres-vs-mysql-cover.jpg b/static/img/og/blog/cover/postgres-vs-mysql-cover.jpg new file mode 100644 index 00000000..f2cbb559 Binary files /dev/null and b/static/img/og/blog/cover/postgres-vs-mysql-cover.jpg differ