千億數倉的sql

2021-10-05 13:53:28 字數 2731 閱讀 6108

需求1

資料:

• 統計2023年期間每個季度的銷售訂單筆數、訂單總額

select case

when month(createtime) between 1 and 3 then 『一季度』

when month(createtime) between 4 and 6 then 『二季度』

when month(createtime) between 7 and 9 then 『三季度』

when month(createtime) between 10 and 12 then 『四季度』 end,count(orderid),sum(totalmoney)

from itcast_orders where year(createtime)=2019 group by case

when month(createtime) between 1 and 3 then 『一季度』

when month(createtime) between 4 and 6 then 『二季度』

when month(createtime) between 7 and 9 then 『三季度』

when month(createtime) between 10 and 12 then 『四季度』 end;

結果:

• 統計2023年期間每個月的銷售訂單筆數、訂單總額

select case when substr(createtime,6,2)=『01』 then 『1月』

when substr(createtime,6,2)=『02』 then 『2月』

when substr(createtime,6,2)=『03』 then 『3月』

when substr(createtime,6,2)=『04』 then 『4月』

when substr(createtime,6,2)=『05』 then 『5月』

when substr(createtime,6,2)=『06』 then 『6月』

when substr(createtime,6,2)=『07』 then 『7月』

when substr(createtime,6,2)=『08』 then 『8月』

when substr(createtime,6,2)=『09』 then 『9月』

when substr(createtime,6,2)=『10』 then 『10月』

when substr(createtime,6,2)=『11』 then 『11月』 else 『12』 end ,

count(orderid),sum(totalmoney) from itcast_orders

where createtime like 『%2019%』

group by

case when substr(createtime,6,2)=『01』 then 『1月』

when substr(createtime,6,2)=『02』 then 『2月』

when substr(createtime,6,2)=『03』 then 『3月』

when substr(createtime,6,2)=『04』 then 『4月』

when substr(createtime,6,2)=『05』 then 『5月』

when substr(createtime,6,2)=『06』 then 『6月』

when substr(createtime,6,2)=『07』 then 『7月』

when substr(createtime,6,2)=『08』 then 『8月』

when substr(createtime,6,2)=『09』 then 『9月』

when substr(createtime,6,2)=『10』 then 『10月』

when substr(createtime,6,2)=『11』 then 『11月』 else 『12』 end ;

結果:

• 統計2023年期間每週一到週日的銷售訂單筆數、訂單總額

// 2019-01-08 17:50:13

select

if( pmod(datediff(substr(createtime,1,10),『1920-01-01』) -3,7) =『0』, 7,pmod(datediff(substr(createtime,1,10),『1920-01-01』) -3,7)) as week,

count(distinct orderid),

sum(goodsprice*goodsnum)

from

itcast_order_goods

group by

if( pmod(datediff(substr(createtime,1,10),『1920-01-01』) -3,7) =『0』, 7,pmod(datediff(substr(createtime,1,10),『1920-01-01』) -3,7));

結果:

數倉sql小技巧(一)

ads層由於本身的資料很少,一天只有幾條或幾十條,並且資料匯出常常為全量匯出。所以沒有進行分割槽,也沒有才有壓縮和列式儲存。採用的資料裝載語句也是insert into,而不是insert override。但這樣就會帶來乙個在hdfs中非常嚴重的問題 小檔案過多。ads層每插入一條資料,就會生成乙...

數倉的分層

一 數倉為什麼要分層?1 分層解耦,可以讓開發思路更加清晰,複雜問題簡單化 出錯時,可以精確定位資料 2 節省重複開發 3 脫敏 二 數倉的分層 以5層數倉為例 ods層 原始資料層,原始資料原封不動的直接匯入!dwd層 基於ods層,將原始資料進行清洗,篩選後的資料,把其中的明細開啟 例如 啟動日...

數倉的分層

一 數倉為什麼要分層?1 分層解耦,可以讓開發思路更加清晰,複雜問題簡單化 出錯時,可以精確定位資料 2 節省重複開發 3 脫敏 二 數倉的分層 以5層數倉為例 ods層 原始資料層,原始資料原封不動的直接匯入!dwd層 基於ods層,將原始資料進行清洗,篩選後的資料,把其中的明細開啟 例如 啟動日...