r/ETL • • 4h ago

I benchmarked importing 1 million CSV rows with Scriptella, JDBC, csvsql, and PostgreSQL COPY

3 Upvotes

I maintain Scriptella, an open-source Java ETL tool, and wanted to establish a reproducible performance baseline for CSV imports.

I compared 11 import configurations using PostgreSQL and MariaDB, with 1 million rows per test.

Some results from the latest CI run:

Method PostgreSQL MariaDB
Scriptella (batched) 12.36s 7.40s
Handwritten JDBC (batched) 9.24s 4.72s
csvsql (chunked) 400.68s 389.35s
PostgreSQL COPY 1.33s N/A

Native COPY was fastest for PostgreSQL, as expected. Handwritten JDBC also outperformed Scriptella, while both were substantially faster than the tested csvsql workflow.

These are end-to-end timings, not isolated framework overhead measurements. The comparison uses one workload and one CI run, with different import mechanisms.

I've published the source code, Docker Compose setup, raw measurements, charts, and reproduction instructions:

https://github.com/scriptella/scriptella-benchmarks

I'd be interested in feedback from people working with ETL pipelines, particularly on which additional workloads would make this comparison more useful.


r/ETL • • 19h ago

Rewrite a slow Spark job or change the infrastructure?

7 Upvotes

Got a slow Spark pipeline with two very believable explanations. The code has grown for years and has joins/transforms that probably deserve a hard look. But data volume has also gone up a lot while the underlying setup has basically stayed put.

A rewrite might pay off, but it is risky and eats engineering time we do not really have. Changing the compute path is quicker to test, but it will not magically save a bad data model. Both arguments sound sensible on their own, which is annoying.

How do you call this? What tells you the job design is the problem versus the infrastructure just being tapped out..


r/ETL • • 21h ago

Long term retention | Grafana OSS Historical dashboard data for archive purposes

1 Upvotes

I use Grafana OSS for dashboards, I want to maintain historical dashboard data for archive purposes, beyond our data source's (Prometheus) retention period.

Mimir and Thanos feel like overkill for this. Add infrastructure, storage costs, but all i need is to look back at historical data.

Any lighter approaches that is working for you?


r/ETL • • 1d ago

ETL pricing is one thing. Getting help when something breaks is another

Thumbnail hevodata.com
0 Upvotes

One thing I've noticed in ETL discussions is how often people talk about rising bills, unexpected usage costs, and the time spent troubleshooting pipelines when something goes wrong.

The pricing can look fine when you're setting things up, but once the data volume grows, you need to understand what you're actually being charged for. And when a pipeline breaks in production, getting useful help matters a lot more than it did during setup.

Full disclosure, I work at Hevo, so I'm obviously biased. But I don't see it mentioned much in these discussions, and I thought it might be useful for people comparing tools.

A couple of things worth knowing about Hevo:

  • Pricing: It's consumption-based, using credits tied to data events. Historical data loading is free, and the pricing page has a calculator to estimate costs based on your usage.
  • Support: live chat on the Free plan to priority 24x7 support on small companies or big enterprise.
  • Pipeline troubleshooting: You can monitor pipelines, inspect failed events, and replay events after fixing the underlying issue.

It's not automatically the cheapest option for every workload, and usage still matters. I'd recommend checking the actual numbers for your data volume and looking at the support coverage you'd get before comparing it with another tool.

Here's the pricing page for anyone who wants to look at the details:

Hevo pricing and plans

Curious what matters more when you're evaluating an ETL tool: keeping the bill under control, or knowing you can get help when a production pipeline breaks?
Also would love to understand what other problems you guys face, maybe Hevo has a solution?


r/ETL • • 1d ago

We built an OLAP layer to use ClickHouse from Excel PivotTables

2 Upvotes

Hi! I’m Natella, a data analyst on the XLTable team.

We work a lot with reporting and analytics, and we kept noticing the same thing: even when companies already had their data in ClickHouse and BI dashboards, people still wanted Excel. It’s familiar and convenient for checking numbers or building PivotTables.

The problem is that exporting large datasets to Excel isn’t practical, and the exported data quickly gets outdated. That’s why we built XLTable, an OLAP layer that connects Excel directly to ClickHouse using XMLA.

Instead of exporting data, Excel sends queries through XLTable, which translates them into SQL and runs them in ClickHouse. Only the results come back to Excel. There’s also a semantic layer where you define measures, dimensions, and hierarchies once and reuse them.

We tested it on a ClickHouse table with over 2 billion rows: simple measures took 1–3 seconds, distinct counts 3–8 seconds, and more complex calculations 8–20 seconds.

We also recently added MCP support, so AI clients can use the same semantic model as Excel. Snowflake and BigQuery are supported too.

You can try XLTable Desktop here: https://xltable.com/

I’d love to hear what you think, especially if you’ve worked with OLAP tools on top of ClickHouse. What would you test first?


r/ETL • • 2d ago

Running Pyspark or Databricks code locally

Thumbnail
marketplace.visualstudio.com
1 Upvotes

r/ETL • • 2d ago

Building a Fact-Extraction Pipeline w/ Jev

Thumbnail
honestmedium.substack.com
1 Upvotes

Friends,

I am working on improving some of my substack's publication pipeline and figured I would share with you some of the work I have been doing.

To provide some reading aides to my substack readers I created a tool for generating clean information dense infographic cards from Markdown, JSON, YAML and Jsonnet.

Then I thought about ways to automate the process of generating them, which led me to try experimenting w/ Jev.

I wanted something that was deterministic, reproducible, auditible and easy to create.

Jev's role here is to classify fact from long-form prose and rank the facts so i can extract them and present them in the infographic cards.

You can find the infographic compiler on my GitHub here: https://github.com/s0cks/docker-chromium-screenshot

And you can find the jev (tev1) classifier discussed in this article here: https://github.com/s0cks/tev1-datapoint-extractor

They are slightly vibe coded with Claude so I can experiment with the idea quickly.

I plan on more updates just figured folks might be interested.

I also have plans to adapt some of this work into my prose -> audiobook pipeline down the road, and maybe eventually fine tune a jev model specifically for this kind of classification.

Thoughts, questions, comments, concerns are welcome.

Best,

~ Tazz


r/ETL • • 2d ago

What is the best way to build reusable etl pipelines for different file formats??

15 Upvotes

how to handle every file format during ingestion without rewriting the entire pipeline.


r/ETL • • 2d ago

I asked a bunch of hotel price APIs for the same Rome room and got answers 16% apart - turns out it was the tax all along

Post image
2 Upvotes

I spent an afternoon sending the same Lisbon search and the same Rome hotel to seven hotel price APIs, mine included. I run FlightPowers, a Booking.com rates API, so take my row with that in mind.

I went in thinking the story would be speed, but what stuck with me was one room. Hotel Artemide's Basic Double for three nights in November came back as $915 from some of them and $1,057 from others.

It's the same rate underneath. Booking shows US visitors the room before tax and adds the VAT and the Rome city tax at the very end. The German view folds them into the price. So the number you get depends on which field an API calls the price and which market it reads from. One of them even flips the meaning of its own total_price by country, though its docs warn about it and its tax breakdown tells you which way it went.

If you're pulling hotel rates into a warehouse and comparing sources or countries, normalise to the tax-inclusive total first. Otherwise you'll report a 16% price gap that's really just accounting.

A couple of smaller things from the table. The two cheapest Lisbon rows on two different APIs were the same hostel bunk. One scraper's cheapest result was a single dorm bed priced for one person on a search for two adults. Mine was the slowest of them apart from the scraper, which I knew going in (mine drives a real browser for every call).

Right now this is one afternoon from one server with three runs a query, so I'm treating it as a first pass and I'll rerun it next month. Mine is free for 10 calls a month and 10$ for 2,000 after that, if you want to poke at my row yourself.

What do you store as the price in your own pipelines, the before-tax number with tax in its own column or the total? :)


r/ETL • • 3d ago

How would you detect changes in thousands of provider XML feeds without treating every job as new?

Thumbnail
2 Upvotes

r/ETL • • 3d ago

Your pipeline works perfectly in dev. Then production happens. What would you check first?

2 Upvotes

I’ve noticed something while learning and working with data systems.

Building a pipeline is one thing. Figuring out why it’s behaving differently in production is a completely different skill.

For example, imagine you’ve built a PySpark pipeline. It works fine with sample data, your transformations are correct, and everything looks good.

Then a few things start happening:

A job that used to finish in 20 minutes now takes 2 hours.

An Airflow task retries after a failure and processes the same records again.

The pipeline succeeds, but the dashboard shows incorrect numbers.

A source API changes its response, and downstream tasks start failing.

I’ve been thinking about how I’d approach these situations rather than immediately searching for another tool or rewriting the code.

Here’s how I’d start debugging them.

1. If a Spark job suddenly becomes slow

I’d open the Spark UI first.

I’d compare stage duration, task distribution, shuffle read/write, and spill metrics against a previous successful run.

If most tasks finish quickly but a few take much longer, I’d investigate data skew. If the input volume has increased significantly, I’d check whether the workload itself has changed.

Adding executors without understanding the bottleneck can just increase the cost.

2. If a pipeline processes the same records twice

I’d check how the pipeline handles retries and writes data.

Is it appending everything on every run? Is there a reliable business key? Is the write operation designed to be idempotent?

For example, a carefully designed MERGE operation can make repeated processing safer, provided the matching logic and transaction behavior are correct.

Retries aren’t the problem by themselves. Retrying a task without accounting for what it already wrote can be.

3. If the pipeline succeeds but the data is wrong

I’d stop treating a successful task status as proof that the output is correct.

I’d compare source and target record counts, check duplicates and nulls in important fields, validate business rules, and look for missing or late-arriving records.

A job can execute exactly as written and still produce the wrong business result.

4. If an API change breaks the pipeline

I’d inspect the actual response, status code, authentication errors, rate limits, and schema differences.

The Python or Airflow code might be fine. The assumptions it makes about the source system might no longer be valid.

The common thread here is that each problem needs a different investigation.

You don’t need to memorize every failure scenario. You need to know where to look, what evidence to collect, and how to narrow down the cause before changing things.

This is also why I think rebuilding the same project with failure scenarios is often more useful than starting another project from scratch.

Take a pipeline you’ve already built and deliberately test what happens when:

The input volume increases.

A task fails after partially writing data.

The same batch arrives twice.

A required field disappears from the source.

The downstream database becomes unavailable.

You’ll learn a lot about your design from the results.

For people working with Spark, Airflow, or other data pipelines: what’s the first thing you usually investigate when a pipeline that worked yesterday suddenly breaks today?

I’d be interested in hearing actual debugging experiences, especially cases where the initial assumption turned out to be wrong.


r/ETL • • 3d ago

what data integration tools are people using to get real time data into snowflake?

14 Upvotes

we've reached the point where our python scripts are causing more problems than they're solving

everything lands in snowflake eventually, but bw scheduled CSV exports and snowpipe we've accepted more latency than the business wants, oracle is the main source, so i'm looking for data integration tools that handle the full CDC pipeline instead of stitching together separate pieces.

what are people happy with these days?


r/ETL • • 3d ago

Airflow OSS vs MWAA (re-evaluating given access to LLMs)

3 Upvotes

After combing through many posts in this sub, and speaking to colleagues who has stood up airflow, the consensus is to use MWAA. The cost pays for itself in the required staff overhead needed to manage OSS.

Does that statement remain valid with the help of LLMs? Teams who have access to Claude can spin up the framework much quicker and debug much faster. The time spent troubleshooting an OSS setup should be smaller with the help of LLMs.

Can anyone speak to this personally?


r/ETL • • 3d ago

How do you handle deletes when a source only provides snapshots?

8 Upvotes

I've been thinking about a problem with sources that only provide periodic snapshots instead of CDC or a reliable updated_at field.

If a record is missing from today's extract, it could mean the record was deleted. But it could also be an incomplete export or a pagination issue. Treating every missing record as a delete can mess up the data downstream.

How do you usually handle this? Do you compare snapshots, wait until a record is missing from multiple extracts, or use another approach before marking it as deleted?

what has worked well for people running these pipelines in production??


r/ETL • • 3d ago

Mind the Gap - How to Calculate Time Between Events in Peakboard

Thumbnail
2 Upvotes

r/ETL • • 4d ago

Can anyone suggest me a good course/post/book to learn streaming data pipelines?

3 Upvotes

I’m new to data engineering and have mostly worked in analytics engineering. I’m curious about how streaming pipelines work in practice, especially with Kafka, Flink, and Iceberg.

I’d love to hear from people who’ve built or operated these systems: What concepts should I learn first? How do you handle watermarks and late-arriving events, quarantine bad data, and manage schema evolution or unexpected schema drift?

Any practical examples, learning resources, or advice on what’s most useful to understand would be appreciated.


r/ETL • • 3d ago

Beginner Data Engineer — Looking for the Best Learning Resources and Best Practices for Talend & Cloudera

Thumbnail
1 Upvotes

r/ETL • • 4d ago

As a data engineering student learning Airflow: What tools and languages do you actually use in your day-to-day work?

Thumbnail
2 Upvotes

r/ETL • • 4d ago

Showcasing det: A lightweight Rust/Polars ETL engine with an embedded data catalog (looking for architecture reviews & contributors)

Thumbnail
github.com
10 Upvotes

Hi everyone,

I started building `det` (https://github.com/det-Labs/det), an open-source ETL and data engineering framework designed around high-performance native execution, with an embedded data catalog module built directly into the engine core.

### The Problem

In modern data engineering workflows, ETL/transformation engines and data catalogs are treated as completely detached layers. Catalogs (DataHub, OpenMetadata) typically require separate, heavy distributed infrastructure (Elasticsearch, Kafka, JVM services), while transformation engines (dbt, Spark) execute transformations blind to metadata until an external crawler reconciles the state.

`det` combines both: an execution engine where schema detection, metadata cataloging, and data transformation share the same zero-copy Arrow/Polars foundation.

### Current Implementation (Catalog Core Working)

The foundation is ~25% complete, with the data catalog module functional today:

- Ingestion and inspection of storage layouts to extract schema/metadata directly.

- Local metadata indexing with zero background daemon overhead.

- Rust-native performance designed to feed directly into analytical transformation pipelines.

### Roadmap: Transformation & Execution Layer

The next phase expands `det` into a full execution engine:

  1. In-memory data transformations leveraging Polars and Apache Arrow zero-copy memory layouts.

  2. Direct pipeline execution driven by the cataloged metadata contracts.

  3. Plug-and-play connector interfaces for source/sink abstractions.

### Seeking Review & Contributors

Rather than designing the execution engine in isolation, I am looking for feedback from data engineers on:

- **Engine contracts:** Designing the execution DAG to interact natively with the embedded catalog metadata.

- **Modularity:** Interface design for adding custom connectors and storage backends.

Issues are tagged with `good first issue` and `help wanted` for contributors interested in systems-level data engineering tooling.

Repository: https://github.com/det-Labs/det


r/ETL • • 4d ago

I built an NHANES Data Engineering Pipeline as a beginner — feedback appreciated!

8 Upvotes

Hey everyone! 👋

I'm a BCCA graduate learning Data Engineering, and I've been working on a project using real-world public health data from NHANES.

🔹 What does this project do?

The project focuses on building a data pipeline that processes public health survey data, cleans and transforms it, and prepares it for further analysis.

🔹 Why did I build this?

I wanted to move beyond just learning Python and SQL and start understanding how data engineering pipelines work in practice, including data ingestion, transformation, and project architecture.

🔹 GitHub Repository:

https://github.com/harshbuildss/nhanes-data-engineering-pipeline

I'm still learning, so I'd genuinely appreciate feedback from experienced Data Engineers and other developers.

A few things I'd love feedback on:

  • What could I improve in the pipeline architecture?
  • Does this project demonstrate practical Data Engineering concepts?
  • What would you add to make it more production-ready?

I'm open to constructive criticism. Thanks! 🙌


r/ETL • • 4d ago

Airflow said success. Finance said the numbers were wrong. Finance was right.

1 Upvotes

I build pipelines that process vendor invoices for a large retail company. Thousands of invoices, real money, a finance team downstream that trusts the numbers.

One day an upstream team changed a column in their source table. Nothing broke. The pipeline didn't fail. Airflow stayed green. Row counts matched. Every check we had passed.

But a join using that column quietly stopped matching a slice of records. Those invoices just fell out. The payment report came out lower than reality, and nobody noticed, because it looked normal. Just slightly wrong.

Finance caught it during month-end reconciliation. Not my pipeline. Not my alerts. A person with a calculator. And the culprit was me.

That week taught me the thing no course teaches:

Pipelines fail loudly. Data fails silently.

A pipeline crash is the good outcome. You get an alert, you fix it, you move on. The dangerous failures are the ones where everything runs and the output is wrong. Rows dropped after a join. Duplicates after a reprocess. Nulls that make a total smaller instead of throwing an error. Late data that simply never arrives.

"The DAG is green" and "the data is correct" are two completely different claims. Most people only ever test the first one.

What I do differently now:

Reconcile output totals against the source system, not just row counts.

Alert on distribution shifts. If today's total is way off the 30-day average, someone should get pinged.

Treat upstream schema changes as incidents, not surprises.

If you're preparing for DE interviews, this is also what separates candidates. Anyone can say "I built a pipeline." Very few can answer "how do you know your data is right?"

What's the silent failure that burned you? I'll trade stories in the comments.


r/ETL • • 5d ago

How much does dbt actually cost? We updated our breakdown

Thumbnail
0 Upvotes

r/ETL • • 6d ago

What's the most annoying thing you've dealt with in an ETL pipeline ?

8 Upvotes

Building an ETL pipeline sounds pretty straightforward until things start breaking in production lol.

Could be duplicate records, schema changes from the source, jobs failing halfway through, or source and target counts not matching.

Curious to know what gives you guys the most trouble in real projects.And how do you usually deal with it?

Is there any particular issue that took you way longer to fix than you expected?


r/ETL • • 6d ago

How can I get up to speed with dbt quickly before joining a new project?

Thumbnail
3 Upvotes

r/ETL • • 9d ago

When do People prefer ETL over ELT?

14 Upvotes

Im trying to understand why ppl still choose ETL when ELT seems simpler, especially for data migration. With platforms like databricks and snowflake, you can load the data first and then do the transformations in the target system.

From a migration and testing pov, ELT also seems easier because you can keep the raw data and apply or change the transformations later. So why would someone still choose ETL, where the data is transformed before it is loaded?

Is it mainly because of security, performance, the source or target system, or are there other reasons? I'd like to understand when ETL actually makes more sense.