iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
AI/ ML & Data

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

Day17 -- DuckDB Style SQL (11) ?

  • 分享至 

  • xImage
  •  

相信我親愛的讀者,已經能體會用 DuckDB SQL 的 lambda 花式操作 list (a.k.a array 在 duckdb 可以想成是大致上一樣的東西)。

其實 duckdb 的 lambda 在一個地方也非常好用。那就是 column function
這應該是借鏡 clickhouse 的功能 !?

column() 函數,讓我們可以有方法動態的 SELECT 出需要的 col。
假設我們有一個有 300 col 的 table ,我們要挑出 code_review 跟 col name 有包含 op4dude
並且這些 row 中有包含 op4ladies 的 col 值都要大於 2

基本上這在 Postgres 要手動找出那些 col,在手動寫上去,想到就豆頁痛。

但是在 DuckDB 可以輕鬆的用 column() 函數加上 lambda 輕鬆的辦到拉,是不是非常方便。

SELECT
    code_review
    COLUMNS(col -> col LIKE '%op4dude%')
FROM community
WHERE
    COLUMNS(col -> col LIKE '%op4ladies%') >= 2;

颱風天就先簡單介紹一下 column() 函數 ,明天在好好介紹 DuckDB column() 函數的其他花式技巧。

附錄來寫一下 Postgres 要做相同的事情要花多少功夫

SELECT column_name 
FROM information_schema.columns 
WHERE table_name = 'community' AND column_name LIKE '%op4dude%';
SELECT column_name 
FROM information_schema.columns 
WHERE table_name = 'community' AND column_name LIKE '%op4ladies%';
SELECT 
    code_review,
    <步驟 1 的所有 column name>
FROM community
WHERE 
    <步驟 2 的第一個 column name> >=2
    AND 
    <步驟 2 的第二個 column name> >=2
    AND 
    .
    .
    .
     <步驟 2 的最後一個 column name> >=2

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

尚未有邦友留言

立即登入留言