天天看點

HiveDML表資料操作

DML ( Database Manipulation Lanuage ) 資料庫操作語言,如 load、select 、update 、insert。主要用來對資料庫的資料進行一些操作。

目錄

1. load 資料加載

1. 導入HDFS資料 ( 移動 )

2. 導入伺服器本地資料 ( 複制 )

2. insert 資料插入

1. 單條資料插入

2. 多條資料插入

3. 多重插入

4. 分區表資料插入

1. 靜态分區方式

2. 動态分區

5. 分桶表資料插入

3. insert 資料導出

單表導出

多重導出

4. join 連接配接

1. 内連接配接

1. 隻支援等值連接配接

2. 隻支援and連接配接,不支援or

3. 支援多表連接配接

2. 外連接配接

1. 左外連接配接

2. 右外連接配接

3. 全外連接配接

3. 半連接配接

5. 查詢

查詢文法

1. CLUSTER BY​​

2. DISTRIBUTE BY​

3. SORT BY​

4. ORDER BY

另:分桶的作用

load data

公共表。建外部表,會加載到hive的指定路徑下,不能有兩個完全同名檔案,第二次傳入的資料會重命名_copy_01。

先建立臨時表,再将臨時表中資料拷貝到指定表中,效率低。

從一個表中查詢,将結果全部插入到指定表中,一次隻能一個表。

一次插入多個表,但對基表值掃描一次。

分區表隻是建表時不同,使用時跟普通字段沒差別。

添加前手動指定分區,不建議。

多條資料插入

分區個數不确定,根據資料自動分區。設定動态分區模式為非嚴格模式。

hive-1.2.2需設定開啟動态分區。動态分區字段必須放在最後,最後一個字段預設為分區字段。

多字段分區,目錄結構按分區字段順序劃分。hive1.2中進行動态分區如果是多字段分區,必須手動指定第一級分區。

建立分桶表

加載資料

不能使用 load 方式,隻能使用 insert。

local 導出到本地 ,導出到hdfs不需要local

兩表中都有的才會連接配接。

左表為基表,右表有的字段會關聯,沒有的null顯示,右表中有左表中沒有的資料不會關聯。

左右表取并集,兩個表關聯字段合并。

為了解決 select id from a where id in (1,2,4,5) 的情況

一般用左半連接配接,查找左半邊表中id在右半邊表中存在的資料,隻顯示左表存在的資料。

注意: hive中一定要盡量避免select * from 全表掃描。

隻能查詢使用

既分組又排序。

注意:

1. cluster by 與 sort by 不能同時使用

2. 當分組字段和排序字段是同一個字段時 cluster by id = distribute by id + sort by id

隻分不排。類似于分桶,按照指定 distribute by 字段和設定的 reducetask個數進行取餘分組,不排序。

局部排序 ( 隻排不分 )。每個reducetask中排序,一個reducetask時與order by效果相同。

指定的字段隻是用于排序的字段,不用于分reducetask輸出結果,最終的輸出檔案是随機生成的。

全局排序,預設升序。

建表語句            隻能建表使用 clustered by       指定分桶 sorted by            指定分組 partitioned by    指定分區

分桶的作用

hive中的表都是大表,會出現大表1關聯大表2,大表1的每一個資料都要去全表掃描大表2中的每個資料,效率低。 将兩個表都進行分桶,分桶規則一緻,桶數成倍數。 1. 提高join的效率 2. 提高抽樣的性能

繼續閱讀