You Showed Up: What We Learned from Asking “Does OLAP Need an ORM?”

Published Tue, August 19, 2025 ∙ ClickHouse, Product, Educational, Community ∙ by Johanan Ottensooser

Why we asked

Our ClickHouse guest post—Does OLAP Need an ORM?—was a call for dialogue, not a verdict. We wanted to hear from people building analytical backends every day. You delivered—on Hacker News, Reddit, and LinkedIn—so here’s what we learned and how it shapes the MooseStack (follow along on Github to see how this conversation affects development).

What we heard

1) Keep SQL first-class, add type-safety

Developers love the speed and clarity of plain SQL—especially for ad-hoc work. At the same time, teams want type-checked identifiers, safer composition, and linters that help both humans and LLM copilots avoid mistakes.

For raw SQL:

“I can’t imagine a faster way … than just writing some sql.”—bob1029, HN

For type-safe builders:

“It’s okay to lean into type-safe builders.”—DevRel engineer, LinkedIn; “…keeping our SQL up to date is tedious and somewhat error-prone.”—Fire_Arm_121, r/typescript

There was a split opinion about code or database as a source of truth:

“ORM provides an exact representation of your database in the codebase… huge plus for teams.”—ZwikHD, r/ClickHouse

c.f.

“The source of truth is the database itself… no one needs migrations to know the DB structure.”—angrynoah, r/ClickHouse

Our takeaway: MooseStack will continue to be SQL-first while strengthening type-safety and linting so queries are easy to write, review, and automate.

2) OLAP isn’t OLTP

The most consistent theme: OLAP benefits from dimensions, measures, time ops, rollups, pivots—not object-row mapping.

“For OLAP you … want rollups and drill downs … SQL isn’t wholly adequate.”—barrkel, HN.

Our takeaway: MooseStack is ORM-adjacent: we won’t hide SQL. We’re building up from typed SQL toward a dimensions/measures layer that better fits analytics.

“We’re progressively working our way up to the right level.”—timgdelisle, HN.

3) The sweet spot is in-app analytics

Most folks wouldn’t replace BI exploration with a builder today. But where OLAP powers user-facing features (dashboards, usage stats, agent feedback), the ergonomics matter a lot.

“Using OLAP behind features inside user-facing apps has been kicking off … That’s where something like this might come in handy.”—sdairs, HN.

Our takeaway: We’re optimizing MooseStack for embedded analytics and app backends—the place developers live.

4) Contracts & CI over brittle reports

Teams want to catch breaking schema changes before they ship.

“One-off reports are brittle … would love to test them at CI time.”—ElatedOwl, HN.

“They call this Data Contracts.”—datadrivenangel, HN.

Our takeaway: Expect CI-friendly checks, migration diffs, and contract-like validation to be first-class in MooseStack.

5) Don’t repeat ORM history

Plenty of scars: N+1s, leaky abstractions, performance cliffs.

“ORMs … are a very leaky abstraction … I … recommend … skip the ORM entirely.”—lucisferre, HN.

“Every time I reached for an ORM something ugly reached back—N+1… ‘can’t figure out what you updated so I’ll insert everything again.’”—mgalexray (r/dataengineering).

“Snowpark is literally an ORM. Spark is literally an ORM.”—mamaBiskothu (r/dataengineering).

“Oh good, we get N+1 in OLAP now too.”—LinkedIn commenter.

Our takeaway: We won’t hide the database or force object mapping. MooseStack will prioritize explicit SQL, predictable performance, and zero magic.

6) Real patterns to support

Teams report wide flat tables, heavy aggregation, and the need for type-safety across mixed sources.

“One giant flat table … ‘GROUP BY ALL’ … type-safety would be very welcome.”—michaelmarkell, HN.

Our takeaway: MooseStack’s type system and planner will focus on aggregation-heavy workloads and federated inputs.

7) What you asked us to add

  • Query profiling/optimization help (dev-first).

“Help with query profiling / optimisation?”—sdairs, HN. “On the roadmap.”—Callicles, HN.

  • Safer pipelines (contracts, CI tests).
  • Scale guidance at 50M–1B rows.

How this shapes MooseStack

  • SQL-first, typed: keep raw SQL power, add type-safe identifiers and linting.
  • Contracts & CI: make “fail-loud” analytics a default.
  • Perf tooling: bring profiling/optimization into the developer loop.

Thank you (and keep it coming)

This started as a call for dialogue. You showed up—with sharp critiques, real-world patterns, and concrete asks. We’re folding that into MooseStack right now.

Try MooseStack. Prefer a deep dive first? Read the original discussion starter on the ClickHouse blog: Does OLAP Need an ORM?.

Want to talk shop? Slack us or open a GitHub issue—we read every note.