Sign in

Julian Hyde

@julianhyde.bsky.social
558 followers 69 following 263 posts

On a mission to tame data. (Ex-Google, always ASF, working on something new.)

PostsRepliesMedia
Julian Hyde @julianhyde.bsky.social · 25/08/2026
Pleased to announce release 0.9.0 of Morel Rust! Feature-parity with last week's Morel Java 0.9.0, plus WebAssembly. github.com/hydromatic/m...
020
Julian Hyde @julianhyde.bsky.social · 20/08/2026
Sometimes everything just clicks. I'm prototyping checked types in Morel (the new "check" keyword) and I was able to declare a schema and relations with unique, foreign key and other constraints. The constraints just worked. Morel is behaving like a database!
170
Julian Hyde @julianhyde.bsky.social · 13/08/2026
Announcing Morel Java version 0.9.0! There's too much good new stuff to squeeze into one sentence, so please go read the release notes... github.com/hydromatic/m...
120
Julian Hyde @julianhyde.bsky.social · 05/08/2026
Announcing morel-go v0.8.0! This is the first release of Morel implemented in Go. It's very easy to install.
160
Julian Hyde @julianhyde.bsky.social · 03/08/2026
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...
121
Julian Hyde @julianhyde.bsky.social · 24/07/2026
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.
060
Julian Hyde @julianhyde.bsky.social · 15/07/2026
And then there were three.
120
Julian Hyde @julianhyde.bsky.social · 15/07/2026
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.
070
Julian Hyde @julianhyde.bsky.social · 27/06/2026
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...
150
Julian Hyde @julianhyde.bsky.social · 23/10/2025
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...
Morel Rust
1112
Julian Hyde @julianhyde.bsky.social · 22/06/2025
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...
github.com
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 ...
140
Julian Hyde @julianhyde.bsky.social · 21/06/2025
How we simplified the syntax of Morel's "order" step blog.hydromatic.net/2025/06/20/s...
blog.hydromatic.net
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...
120
Julian Hyde @julianhyde.bsky.social · 09/06/2025
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...
blog.hydromatic.net
Morel release 0.7.0
I am pleased to announce Morel release 0.7.0, just one month after release 0.6.0.
030
Julian Hyde @julianhyde.bsky.social · 07/06/2025
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...
blog.hydromatic.net
Ordered and unordered data
Despite what the relational model says, some data is ordered.
1114
Julian Hyde @julianhyde.bsky.social · 04/06/2025
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...
blog.hydromatic.net
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...
033
Julian Hyde @julianhyde.bsky.social · 03/06/2025
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.
052
Julian Hyde @julianhyde.bsky.social · 03/06/2025
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...
youtube.com
More Than Query Future Directions of Query Languages, from SQL to Morel
YouTube video by Data Council
062
Julian Hyde @julianhyde.bsky.social · 23/05/2025
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.
021
Julian Hyde @julianhyde.bsky.social · 21/05/2025
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...
github.com
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...
010
Julian Hyde @julianhyde.bsky.social · 19/05/2025
I started a discussion about supporting SQL Pipe syntax in Apache Calcite. Please chime in. lists.apache.org/thread/1ggd3...
lists.apache.org
051
Julian Hyde @julianhyde.bsky.social · 12/05/2025
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...
blog.hydromatic.net
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...
051
Julian Hyde @julianhyde.bsky.social · 03/05/2025
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
142
Julian Hyde @julianhyde.bsky.social · 01/05/2025
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#...)
381
Julian Hyde @julianhyde.bsky.social · 01/05/2025
"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...
youtube.com
More than Query - Future Directions of Query Languages, from SQL to Morel
YouTube video by Julian Hyde
1114
Julian Hyde @julianhyde.bsky.social · 28/04/2025
Announcing Quidem release 0.12! A query recorder, multi-line strings in "!set" commands, and upgraded dependencies. github.com/hydromatic/q...
github.com
000
Julian Hyde @julianhyde.bsky.social · 24/04/2025
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...
0216
Julian Hyde @julianhyde.bsky.social · 23/04/2025
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?
182
Julian Hyde @julianhyde.bsky.social · 22/04/2025
Who's in Oakland this week for Data Council?
More than Query: Future Directions of Query Languages, from SQL to Morel, a talk by Julian Hyde at Data Council 2025.
160
Julian Hyde @julianhyde.bsky.social · 15/04/2025
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...
blog.hydromatic.net
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.
021
Julian Hyde @julianhyde.bsky.social · 28/03/2025
I've created a VSCode plugin for Morel. Very basic at this point, but I'd welcome any improvements. github.com/hydromatic/v...
VSCode language extension for Morel
030
Julian Hyde @julianhyde.bsky.social · 20/03/2025
Wordle 1,370 6/6* 🟨🟨🟨🟨⬜ ⬜🟩🟩🟩🟩 ⬜🟩🟩🟩🟩 ⬜🟩🟩🟩🟩 ⬜🟩🟩🟩🟩 🟩🟩🟩🟩🟩 Ugh
110
Julian Hyde @julianhyde.bsky.social · 20/03/2025
We’ve been wrong about the shape of the universe. www.scientificamerican.com/article/froz...
scientificamerican.com
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
020
Julian Hyde @julianhyde.bsky.social · 17/03/2025
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".
330
Julian Hyde @julianhyde.bsky.social · 12/03/2025
In Morel you can browse the type system, and create data frames from the files in it, as if it were statically typed. What's the trick? Progressive types. blog.hydromatic.net/2023/12/31/f...
blog.hydromatic.net
File reader and progressive types in Morel version 0.4
<!– This post started as a script for a screencast.
001
Julian Hyde @julianhyde.bsky.social · 11/03/2025
Verbose descriptions for boolean methods bug me. I'd just write 'Returns whether the driver should stop.' We don't enumerate every possible return value for any other data type.
  interface TrafficLight {
    /** Returns true if the driver should stop,
     * otherwise false. */
    boolean shouldStop();

    /** Returns RED if the light is red,
     * AMBER if the light is amber,
     * otherwise GREEN. */
    Color getColor();

    enum Color {
      RED,
      AMBER,
      GREEN
    }
  }
120
Julian Hyde @julianhyde.bsky.social · 05/03/2025
I am pleased to announce release 0.5 of Morel, 14 months after release 0.4. There are several syntax extensions to make the language more powerful and convenient, including 'into', 'through' and 'distinct'. blog.hydromatic.net/2025/03/04/m...
blog.hydromatic.net
Morel release 0.5.0
I am pleased to announce Morel release 0.5.0. Coming fourteen months after release 0.4.0, this release contains various extensions to syntax to make the language more powerful and easy to use.
020
Julian Hyde @julianhyde.bsky.social · 04/03/2025
Today was my last day at Google. It's time to create something new. In the next few months, I intend to evolve the Morel language, realize the SQL semantic layer, improve Calcite, and play more Beethoven piano sonatas! Read the blog post: blog.hydromatic.net/2025/03/03/i...
blog.hydromatic.net
Into the Wilderness
Today was my last day at Google.
3392
Julian Hyde @julianhyde.bsky.social · 03/03/2025
If I upload an image that captures a block of text, the alt text should just be the text. Or am I missing something?
A self-descriptive block of text.
010
Julian Hyde @julianhyde.bsky.social · 03/03/2025
The father of relational databases understood semantic data models.
This activity is sometimes called semantic data modeling. Actually, the task of capturing the meaning of data is a never-ending one. So the label “semantic” must not be interpreted in any absolute sense. – E.F. Codd, 1979
1151
Julian Hyde @julianhyde.bsky.social · 28/02/2025
I'm adding existential and universal quantifiers, and constrained types, to Morel and would love to hear what people think of the syntax. Is 'check' the right keyword to follow 'forall'? 'exists' and 'implies' are also new keywords.
(*) Every supplier in London has status 20.
forall s in suppliers
  check s.city = 'London' implies s.status = 20;

(*) If there are any parts, at least one of them is blue.
(exists p in parts)
  implies (exists p in parts where p.color = "Blue");

(*) Every shipment involves an existing supplier.
forall sp in shipments
  check (exists s in suppliers where s.key = sp.skey);

(*) Define a type that accepts even integers.
type even = int
  check i => i mod 2 = 0;
320
Julian Hyde @julianhyde.bsky.social · 27/02/2025
So, Jeff, let’s get this straight. You think the internet isn’t already full of “personal liberties and free markets” opinions? Next you’re going to tell me you just discovered Ayn Rand and, no really, you should read her, she really gets it.
150
Julian Hyde @julianhyde.bsky.social · 27/02/2025
I canceled my Washington Post subscription today. Regretfully, we’re now a NYT household. I feel sorry for the many good journalists at WaPo. I love your work. The problem is, your owner is a dick.
070
Julian Hyde @julianhyde.bsky.social · 27/02/2025
Every couple of years I have to upgrade or fix Jekyll, which brings me into contact with Ruby, gems, bundler and rvm. Several hours later I am doubting my sanity, and pledging never to touch Jekyll again.
340
Julian Hyde @julianhyde.bsky.social · 24/02/2025
How to create data frames in a statically typed language? Morel's answer is progressive typing. www.youtube.com/watch?v=uybU...
youtube.com
File reader and progressive types in Morel version 0.3
YouTube video by Julian Hyde
140
Julian Hyde @julianhyde.bsky.social · 19/02/2025
For some reason we all stopped doing meetups for a few years. Let's fix that. See you in Santa Clara on Thursday. www.meetup.com/futureofdata...
meetup.com
Apache Calcite Hybrid Meetup February 2025, Thu, Feb 20, 2025, 4:30 PM | Meetup
**Apache Calcite Hybrid Meetup - February 2025** 📅 **Date:** February 20, 2025 📍 **Location:** Cloudera- 5470 Great America Pkwy, Santa Clara, CA 95054, United States **
073
Reposted by Julian Hyde
Molly White @molly.wiki · 13/02/2025
This excellent post identifies some huge flaws in a "study" by the MRC which doesn't interrogate why right-wing sources like OANN and Newsmax are deprecated (not banned) as sources on Wikipedia, and ignored right-leaning sources that are considered reliable and are widely used.
535483
Julian Hyde @julianhyde.bsky.social · 12/02/2025
"In the future, terminals will be so wide that we won't have to worry about line length" We'll have flying cars before that one comes true. In the mean time, let's start teaching coders how to split lines for legibility.
050
Julian Hyde @julianhyde.bsky.social · 09/02/2025
I’m spending a lot of time reading about overloading. If Morel queries are to accept both lists and bags, and simple queries with only lists are ordered, type derivation gets complicated. The solution may be an internal “join” function overloaded for lists and bags. dl.acm.org/doi/pdf/10.1...
dl.acm.org
040
Julian Hyde @julianhyde.bsky.social · 06/02/2025
I just spent a couple of days rebasing an incomplete PR that I wrote in a couple of hours last year.
070
Julian Hyde @julianhyde.bsky.social · 05/02/2025
Introducing the “Cheese Jar”. Now I can keep my Taleggio or Gorgonzola in the fridge, and let it sit on the counter for an hour before lunch coming to room temperature, without repulsing the family. Consider it my contribution to western civilization.
010