iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
AI/ ML & Data

粗暴的資料處理 DuckDB系列 第 21

Day21 -- DuckDB Style SQL (15) ?

  • 分享至 

  • xImage
  •  

連續介紹了幾天 Postgres 的 SQL 沒辦法輕易辦到的 DuckDB query,我們可以來討論一個 Postgres 也有的強大 function, UNNEST

Postgres 的 unnest 行為

SELECT unnest(array[1, 2, 3]) as un;

如果我們有一個 array [1, 2, 3],可以使用 unnest 把 array 中的每個元素展開成一個 row

un
1
2
3

這個大家可能都很熟悉,不過當 array 是 2 維以上的 array, 你就沒辦法控制你的 unnest 層數, Postgres 會一口氣 unnest 所有 level

2 dim

SELECT unnest(ARRAY[[1, 2, 3], [4, 5, 6]]) AS un;
un
1
2
3
4
5
6

3 dim

SELECT unnest(ARRAY[
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
]) AS un;
un
1
2
3
4
5
6
7
8

DuckDB UNEST 對於多維 nested type 比較像我預期的,只解開一層,你想要多解開幾層必須由第二個參數指定

DuckDB 的 unnest 行為

SELECT unnest(ARRAY[
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
]) AS un;
un
[[1, 2], [3, 4]]
[[5, 6], [7, 8]]

解開兩層

SELECT unnest(ARRAY[
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
], max_depth := 2) AS un;
un
[1, 2]
[3, 4]
[5, 6]
[7, 8]

一口氣封印解除到底

SELECT unnest(ARRAY[
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
], recursive := true) AS un;
un
1
2
3
4
5
6
7
8

你比較喜歡 Postgres 的 unnest 行為還是 DuckDB 的 unnest 行為,留言告訴我!!!


上一篇
Day20 -- DuckDB Style SQL (14) ?
下一篇
Day22 -- DuckDB Style SQL (16) ?
系列文
粗暴的資料處理 DuckDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言