Announcing morel-go v0.8.0! This is the first release of Morel implemented in Go. It's very easy to install.
Julian Hyde
@julianhyde.bsky.social
On a mission to tame data. (Ex-Google, always ASF, working on something new.)
This week, we got Morel running on Go (following Java and Rust). But because Morel has the same specification wherever you run it, a new platform is not worth making much fuss about. blog.hydromatic.net/2026/08/01/m...
Some people seem utterly convinced that AI will replace major areas of human endeavor. I wonder if those people have experienced the profound beauty of a human artistic creation. I play Beethoven piano sonatas and Bach fugues, and AI creations are not on the same planet.
If you haven't tried the Rust version of Morel recently, give it a try. The language is close to parity with Morel-Java, and the shell now has highlighting, history, and command editing.
The proposal to add measures to Morel is taking shape. If you've followed my work on Mondrian-MDX, Looker and measures-in-SQL, you'll have been expecting this. github.com/hydromatic/m...
Morel is now in Rust! I just made the first release of the new Rust toolchain for Morel. Morel-Rust implements same language as Morel-Java. It's early days, but potentially performance will be much better. blog.hydromatic.net/2025/10/23/m...
I think I have found a way to remove aggregate functions from Morel. They become ordinary functions applied to the collection of elements gathered by the "group" operator (or a query on those elements if you want to pre-filter). github.com/hydromatic/m...
Syntax for aggregate functions · hydromatic morel · Discussion #292
In SQL, aggregate functions are not even functions. A function takes an argument and returns a result, and SQL's aggregate functions are applied to a collection that is implicitly created for each ...
github.com
How we simplified the syntax of Morel's "order" step blog.hydromatic.net/2025/06/20/s...
Sorting on expressions
Morel’s design philosophy of “everything is an expression” has transformed how we think about queries, making them more composable and flexible than traditional SQL. One stubborn holdout was the order...
blog.hydromatic.net
I'm pleased to announce release 0.7 of Morel! This is a huge release, adding support for ordered/unordered data, set operators, and revised order syntax. A major rework of Morel's type inference algorithm delivered function overloading. blog.hydromatic.net/2025/06/08/m...
Morel release 0.7.0
I am pleased to announce Morel release 0.7.0, just one month after release 0.6.0.
blog.hydromatic.net
Database tables are unordered, but functional programming languages work best over ordered lists. Which should Morel prefer? Both! We now have "list" and "bag" types, and full relational algebra over both. blog.hydromatic.net/2025/06/06/o...
Ordered and unordered data
Despite what the relational model says, some data is ordered.
blog.hydromatic.net
Be honest, did you ever find a real-world use for SQL's "INTERSECT ALL" operator? Now we did! This post explains how you can use Morel's "intersect" to compute GCD (greatest common divisor). blog.hydromatic.net/2025/06/03/i...
INTERSECT ALL, EXCEPT ALL, and the arithmetic of fractions
SQL’s INTERSECT ALL and EXCEPT ALL operators rarely get attention, but they elegantly solve a classic math problem. The problem is computing the greatest common divisor (GCD) and least common multiple...
blog.hydromatic.net
Am I the only one who uses this git trick? To split a commit (in this case a8aee880), include it twice in the rebase script with a b (break) step in the middle. When rebase pauses, revert the parts of the commit that you don't want. They will be applied in the next commit.
Is it possible to do serious programming (such as solving Wordle) in a query language? If not, what's missing? The video of my DataCouncil talk is posted. www.youtube.com/watch?v=xwFs...
More Than Query Future Directions of Query Languages, from SQL to Morel
YouTube video by Data Council
youtube.com
OK, I merged ordered/unordered queries. Next, an "unorder" step and an "ordinal" expression, so that you can more easily convert between lists and bags.
I'm getting ready to merge a big new feature to Morel - ability to query unordered data sets (bags, and database tables), ordered data sets (lists), and hybrid queries that mix the two. I'd appreciate feedback on whether the specification is clear. github.com/hydromatic/m...
I'm getting ready to merge a big new feature to Morel - ability to query unordered data sets (bags, and database tables), ordered data sets (lists), and hybrid queries that mix the two. I'd appreciate feedback on whether the specification is clear. github.com/hydromatic/m...
Ordered and unordered queries · Issue #273 · hydromatic/morel
In SQL, tables are inherently unordered, and query results remain unordered until explicitly sorted with an ORDER BY clause. In contrast, functional programming languages like Standard ML -- and by...
github.com
I started a discussion about supporting SQL Pipe syntax in Apache Calcite. Please chime in. lists.apache.org/thread/1ggd3...
lists.apache.org
Should Morel be rewritten in Rust? The Rust data community is compelling, but moving to Rust might cause us to lose focus on Morel's bigger goals. I ponder the question in a blog post. blog.hydromatic.net/2025/05/11/r...
Should Morel be rewritten in Rust?
There are many excellent and innovative projects happening in the Rust data ecosystem. I am frequently asked whether Morel should be one of them. Thinking about this question gave me some insights int...
blog.hydromatic.net
I'm pleased to announce release 0.6 of Morel, just 2 months after 0.5. The release adds 'forall', 'exists' and 'implies' keywords for logic programming, 'with' for easy record updates, and a tabular output mode to the shell. blog.hydromatic.net/2025/05/02/m...
blog.hydromatic.net
This query is supposed to find all employees in dept 10 who earn more than all programmers in dept 20, but it has a bug. The bug is caused by a fatal flaw in SQL. What is that flaw, and how does Morel fix it? (The answer is in my talk with @julien.ledem.net, youtu.be/zpdbEvhhne8#...)
"More than Query - Future Directions of Query Languages, from SQL to Morel", a conversation with @julien.ledem.net about Morel, based on the talk I gave at Data Council 2025. www.youtube.com/watch?v=zpdb...
More than Query - Future Directions of Query Languages, from SQL to Morel
YouTube video by Julian Hyde
youtube.com
Announcing Quidem release 0.12! A query recorder, multi-line strings in "!set" commands, and upgraded dependencies. github.com/hydromatic/q...
github.com
Thanks to all who came to the talk, and the great questions afterwards. As always at Data Council, the hallway conversations are interesting and inspiring. Here are my slides. (For best results, click 'download raw file', and then open the PDF.) github.com/julianhyde/s...
Tomorrow at Data Council I'll talk about how to solve optimization problems in Morel. If banana cakes sell for $4, chocolate cakes sell for $4.50, and you have a certain amount of ingredients, how many of each kind of cake do you make to maximize profit?
Until last week, I hadn’t thought much about DML in Morel. I assumed that we would just add commands analogous to SQL’s INSERT, UPDATE, DELETE commands. But I devised some language extensions that I think fit Morel and modern data engineering workflow better. blog.hydromatic.net/2025/04/14/d...
DML in Morel
Until last week, I hadn’t thought much about DML in Morel. I knew we would support DML, of course, but I had assumed that we would just add commands analogous to SQL’s INSERT, UPDATE, DELETE commands.
blog.hydromatic.net
I've created a VSCode plugin for Morel. Very basic at this point, but I'd welcome any improvements. github.com/hydromatic/v...
Wordle 1,370 6/6* 🟨🟨🟨🟨⬜ ⬜🟩🟩🟩🟩 ⬜🟩🟩🟩🟩 ⬜🟩🟩🟩🟩 ⬜🟩🟩🟩🟩 🟩🟩🟩🟩🟩 Ugh
We’ve been wrong about the shape of the universe. www.scientificamerican.com/article/froz...
Shocking Dark Energy Findings Challenge the Standard Model of the Universe
A new map of cosmic expansion suggests that dark energy evolves over time, hinting that the universe doesn’t work the way we thought it did
scientificamerican.com
When you start a project (say Maven or Gradle) do you start minimal and add enforcers (linters, code formatting, code coverage) later? Or enable all the enforcers on day one? Feel like I'm a grumpy old man saying "If you won't take your shoes off I don't want you in my house".