🍓
DuckDB の prefix aliases が見た目キモいけど便利そう
DuckDB v1.2.0 で、prefix aliases という新しい SQL の文法が入りました。これがどういうものかというと、
SELECT
col1 AS value1,
col1 + col2 AS value2,
col1 + col2 + col3 AS value3,
FROM tbl
と書くところを[1]、
SELECT
value1: col1,
value2: col1 + col2,
value3: col1 + col2 + col3,
FROM tbl
というように alias を前に持ってこれます[2]。これは、いくら DuckDB のSQL は斬新だと知っていても、これまでの SQL を見慣れた目にとってはちょっと刺激的すぎるというか、さすがにキモすぎない...?と思ってしまうのですが、まあでも可能性を感じます。
何がいいかと言うと、SQL でいろいろな統計量を計算しようと思う時、書いた行をコピーしてちょっと変える、みたいな作業がよくあって、そういう時はその行の後ろの方からいじるので、AS <alias>
が邪魔になります。例えば、後ろから足したりとか、
col1 + col2 + col3 AS value3,
+ col1 + col2 + col3 + col4 AS value4,
後ろから割ったりとかします。
col1 + col2 + col3 AS value3,
+ (col1 + col2 + col3) / sum(col1 + col2 + col3) over (partition by category) AS "%",
このとき、カーソルを動かすのに、行末にあるのが AS <alias>,
よりも ,
だけの方が圧倒的に楽じゃないですか? しかも私は AS
の位置を揃えたいとか思っちゃうタイプなので、実際にはこんな感じで書くんですけど、クエリの中身と AS
が離れていて読みづらいです。
SELECT
col1 AS value1,
col1 + col2 AS value2,
col1 + col2 + col3 AS value3,
(col1 + col2 + col3) / sum(col1 + col2 + col3) over (partition by category) AS "%",
FROM tbl
こっちの方が読みやすくないですか? しかもスペースで位置を調整しなくていいので楽だし。
SELECT
value1: col1,
value2: col1 + col2,
value3: col1 + col2 + col3,
"%": (col1 + col2 + col3) / sum(col1 + col2 + col3) over (partition by category),
FROM tbl
DuckDB がこれをどれくらい本気ではやらせようとしてるのかはわからないのですが、ブログを読むとまんざらでもない感じするので、このまま SQL 新文法界のトップランナーであり続けてほしいです。
Discussion