今天介紹一個 DuckDB 在 1.1.0 版本推出的 *COLUMNS
Unpacked Columns function, 前幾天我們已經看到了 COLUMNS
的方便之處, *COLUMNS
要做的事情是讓水平運算這件事更方便。
看例子會比較快
這是普通的 columns function
SELECT coalesce(COLUMNS(['a', 'b', 'c'])) AS result
FROM (SELECT NULL a, 42 b, true c);
代表的是
SELECT coalesce(a), coalesce(b) , coalesce(c) AS result
FROM (SELECT NULL a, 42 b, true c);
result | result | result |
---|---|---|
NULL | 42 | true |
這是 *columns function
SELECT coalesce(*COLUMNS(['a', 'b', 'c'])) AS result
FROM (SELECT NULL a, 42 b, true c);
代表的是
SELECT coalesce(a,b,c) AS result
FROM (SELECT NULL a, 42 b, true c);
result |
---|
42 |
主要區別:
COLUMNS 會為每一 col 單獨應用 coalesce 函數。
*COLUMNS 會將所有 col 作為參數傳遞給單個 coalesce 函數。
我個人也還在探索除了 coalesce 以外的用法,但是體感這會一個水平運算的好工具。
我真的不知道 Postgres 要怎麼辦到這件事情, chatGPT 跟 Claude 一直給我牛頭不對馬嘴的答案 lol