2026-04-01

DuckDB spricht jetzt Niederländisch!

Daniël ten Wolde

Historisch gesehen wurden SQL-Abfragen immer auf Englisch formuliert. Der ursprüngliche Name der Sprache war sogar Structured English Query Language (SEQUEL), bevor daraus SQL wurde. Was wäre gewesen, wenn die Niederländer Nieuw Amsterdam (das heutige New York) nicht verkauft hätten? Würden wir alle SQL auf Niederländisch schreiben?

Sie müssen sich das nicht länger fragen. Heute veröffentlichen wir EendDB: eine DuckDB-Erweiterung, die Ihnen die Gestructureerde Zoektaal bringt, kurz GZT.

Joins gefällig? Wir haben SAMENVOEGEN. Aggregationen? GROEP PER. Window-Funktionen? Die funktionieren auch – die niederländischen Schlüsselwörter müssen Sie allerdings selbst im Repository nachschlagen.

Sie können es sofort in DuckDB v1.5.1 ausprobieren:

INSTALL eenddb FROM community;
LOAD eenddb;
CALL enable_dutch_parser();
MAAK TABEL eend (
id GEHEEL_GETAL,
naam TEKST,
leeftijd GEHEEL_GETAL,
gewicht KOMMAGETAL,
soort TEKST
);
TOEVOEGEN AAN eend WAARDEN
(1, 'Donald', 29, 1.2, 'Wilde eend'),
(2, 'Daffy', 35, 1.5, 'Zwarte eend'),
(3, 'Daisy', 27, 1.1, 'Wilde eend'),
(4, 'Scrooge', 75, 1.8, 'Wilde eend');
SELECTEER *
VAN eend
WAARBIJ gewicht > 1.2 EN naam ZOALS '%D%'
VOLGORDE PER leeftijd;
┌───────┬─────────┬──────────┬─────────┬─────────────┐
│ id │ naam │ leeftijd │ gewicht │ soort │
│ int32 │ varchar │ int32 │ float │ varchar │
├───────┼─────────┼──────────┼─────────┼─────────────┤
│ 2 │ Daffy │ 35 │ 1.5 │ Zwarte eend │
└───────┴─────────┴──────────┴─────────┴─────────────┘

Natürlich ist keine Abfragesprache vollständig ohne Joins und Aggregationen. Legen wir eine zweite Tabelle an und zählen die Enten pro soort:

MAAK TABEL soorten (soort TEKST, leefgebied TEKST);
TOEVOEGEN AAN soorten WAARDEN
('Wilde eend', 'Meren en rivieren'),
('Zwarte eend', 'Kustgebieden');
SELECTEER s.leefgebied, count(*) ALS aantal_eenden
VAN eend ALS e
LINKS SAMENVOEGEN soorten ALS s OP e.soort = s.soort
GROEP PER s.leefgebied
VOLGORDE PER aantal_eenden AFLOPEND;
┌───────────────────┬───────────────┐
│ leefgebied │ aantal_eenden │
│ varchar │ int64 │
├───────────────────┼───────────────┤
│ Meren en rivieren │ 3 │
│ Kustgebieden │ 1 │
└───────────────────┴───────────────┘

Wenn wir fertig gespielt haben, müssen wir natürlich aufräumen. Statt eine Tabelle zu DROPpen, werfen wir sie auf Niederländisch lieber weg („weggooien“):

GOOI_WEG TABEL eend;
GOOI_WEG TABEL soorten;

Unter der Haube nutzt der Parser DuckDBs neuen experimentellen Parser, der auf einer Parsing Expression Grammar basiert.

Weitere Beispiele finden Sie im Repository auf GitHub.