iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
AI/ ML & Data

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

Day10 -- DuckDB Style SQL (4) ?

  • 分享至 

  • xImage
  •  

除了在寫 aggragate query 時,常常可以派上用場的 ORDER BY ALL GROUP BY ALL
另一個 analytic query 常見的 pattern 是 SELECT 某個 TABLE 中大部分的 col

e.g 一個 employee table 有

employee_id ┆ first_name ┆ last_name ┆ department ┆ salary

五個 col , 但是 employee_id 對我目前的 query 沒有幫助

SELECT first_name , last_name , department ,salary 
FROM 'https://ironman24.douenergy.com/employees.parquet'

必須要手動列出所有 col 名稱,非常麻煩

DuckDB 很貼心的提供兩個 clause 簡化這種情境

EXCLUDE Clause

有時候可能並不需要某些 col。在傳統的 SQL 查詢中,我們必須手動列出所有需要的列,除非使用 * 選擇所有列,但這往往會導致不必要的數據加載和處理。

這時,EXCLUDE 語句就顯得格外有用。它允許我們在使用 * 選擇所有列時,排除一些不需要的列。

SELECT * EXCLUDE (employee_id)
FROM 'https://ironman24.douenergy.com/employees.parquet'

EXCLUDE 的使用讓我們的 SQL 查詢更為簡潔,我們可以方便地選擇除了少數幾個不需要的列之外的所有列,這樣就無需繁瑣地列出所有其他欄位。

REPLACE Clause

在進行數據分析時,經常會遇到需要對某些列進行運算或替換的情況。比如說,我們可能需要將金額由元轉換為千元。在傳統的 SQL 中,這需要在 SELECT 子句中顯式書寫新的運算表達式,但這可能會使 SQL 查詢顯得過於冗長且重複。

REPLACE 語句就是在這裡發揮作用的,它允許我們在使用 * 選擇所有列的同時,直接替換特定的列。

SELECT * REPLACE (salary/1000 as salary)
FROM 'https://ironman24.douenergy.com/employees.parquet'

更棒的事情是兩個 clause 可以合起來一起用喔 !!!

SELECT * EXCLUDE(first_name)  REPLACE (salary/1000 as salary)
FROM 'https://ironman24.douenergy.com/employees.parquet';

以上兩種語句的使用不僅使 SQL 查詢更為直觀,還能提升編寫效率和查詢效率。它們讓我們能夠更加靈活地處理數據,使數據分析工作變得更為簡單。

趕快到 DuckDB WASM 或 Colab 試試看吧!


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

尚未有邦友留言

立即登入留言