使用技巧
當我們書寫一些比較結構複雜,用的表也很多的sql時,可以用with as。
with as 是子查詢部分,並不是真正的臨時表,查詢結果儲存在記憶體中。定義乙個sql片段,該片段在整個sql都可以被利用,可以提高**的可讀性以及減少重複讀,減少效能成本。
with table1 as
select one,tow,thire
from a
table2 as
select one,five
from b
insert overwrite table ab partition
(dt=)
select one,tow,thire,four,five
from a left
join b on a.one = b.one
注意:後面必須直接緊跟使用cte的sql語句,否則失效
資料庫臨時表和永久表類似,儲存在磁碟的臨時區中,只有資料庫連線斷開,或者drop掉,才會消失。
drop
table
ifexists tmp.table1;
create
table tmp.table1 stored as orc as
select one,tow,thire
from a
drop
table
ifexists tmp.table2;
create
table tmp.table2 stored as orc as
select one,five
from b
insert overwrite table ab partition
(dt=)
select one,tow,thire,four,five
from a left
join b on a.one = b.one
1.**於一張表的不同維度的資料,也傾向於在一次with as中收集齊全,命更高層次上抽象主題。避免同一張底表在多個with as中存在。
2.在數倉開發之前,先理清楚需要用到的表以及字段,思考清楚以什麼結構去開發,思考效能瓶頸是**。最好用白紙寫清楚。磨刀不誤砍柴工。
3.表的連線:
3.1優先彙總之後再連線
3.2彙總維度相同,巧用union,不用join。取各個臨時表所需的字段,收集齊全後,一次group by。
36 臨時表和臨時表
臨時表特點 建表語法是create temporary table乙個臨時表只能被建立它的session訪問,對其他執行緒不可見。臨時表和普通表可以同名。同乙個session內有臨時表和普通表的時候,show crete語句 增刪改查訪問的是臨時表。show tabls命令不顯示臨時表。由於臨時表只...
臨時表使用
臨時表語法 會話型的,會話結束資料清空 create global temporary table test tmp id number,name varchar2 10 on commit preserve rows 事務型的,事務結束資料清空 create global temporary ta...
Oracle的臨時表和MySQL的臨時表
最近在oracle遷移mysql過程中遇到了一些關於with as 語法的問題,但是在mysql中是沒有這樣的語法的,因為我使用了臨時表代替了 因此今天做了一些小總結,歡迎各位大佬指導。一 oracle with as語法 with tablename as select select 它在查詢之前...