HIVE優(yōu)化場景九--減少IO次數(shù)

場景九.減少IO次數(shù)

1)通過多表插入 FROM A INSERT B SELECT A,.... INSERT C SELECT A ...

2)一次輸入,多次使用 WITH TABLE AS (....)

1)通過多表插入 FROM A INSERT B SELECT A,.... INSERT C SELECT A ...

Hive支持多表插入,可以在同一個(gè)查詢中使用多個(gè)insert子句,這樣的好處是我們只需要掃描一遍源表就可以生成多個(gè)不相交的輸出!

例子 :

from test1

insert overwrite table test2

?partition (age)

select name,address,school,age

insert overwrite table test3

select name,address

多表插入的關(guān)鍵點(diǎn)在于將所要執(zhí)行查詢的表語句 "from 表名",放在最開頭位置。

注意 :

? ?這是一個(gè)優(yōu)化,可以減少表的掃描,從而減少 JOB 中 MR的 STAGE 數(shù)量,達(dá)到優(yōu)化的目的。

2)一次輸入,多次使用 WITH TABLE AS (....)


with介紹:

with as?也叫做子查詢部分,首先定義一個(gè)sql片段,該sql片段會被整個(gè)sql語句所用到,為了讓sql語句的可讀性更高些,作為提供數(shù)據(jù)的部分,也常常用在union等集合操作中。

with as就類似于一個(gè)視圖或臨時(shí)表,可以用來存儲一部分的sql語句作為別名,不同的是with as 屬于一次性的,而且必須要和其他sql一起使用才可以!

其最大的好處就是適當(dāng)?shù)奶岣叽a可讀性,而且如果with子句在后面要多次使用到,這可以大大的簡化SQL;更重要的是:一次分析,多次使用,這也是為什么會提供性能的地方,達(dá)到了“少讀”的目標(biāo)。

with使用:

WITH

t1 ?AS (

SELECT ?* ??FROM ? carinfo? ),?

t2 ?AS (

SELECT *?FROM car_blacklis? ? )

SELECT*

FROMt1, t2

注意:這里必須要整體作為一條sql查詢,即with as語句后不能加分號,不然會報(bào)錯(cuò)

with使用注意事項(xiàng):

1.、with子句必須在引用的select語句之前定義,同級with關(guān)鍵字只能使用一次,多個(gè)只能用逗號分割;最后一個(gè)with 子句與下面的查詢之間不能有逗號,只通過右括號分割,with 子句的查詢必須用括號括起來.

2、如果定義了with子句,但其后沒有跟select查詢,則會報(bào)錯(cuò)!

3、前面的with子句定義的查詢在后面的with子句中可以使用。但是一個(gè)with子句內(nèi)部不能嵌套with子句!

正確寫法:

with ?t1 ?as ?( ?select ?* ?from carinfo),

t2 ?as ( select ?t1.id ?from t1 )

select * from t2

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容