hive常用基礎面試

2021-09-14 03:29:04 字數 2909 閱讀 8288

1.hive內外表的區別?

內部表:建表時會在 hdfs 建立乙個表的儲存目錄,增加分割槽的時候,會將資料複製到此

location 下,刪除資料的時候,將表的資料和元資料一起刪除。

外部表:一般會建立分割槽,增加分割槽的時候不會將資料移到此表的 location下,刪除資料的時候,只刪除了表的元資料資訊,表的資料不會刪除。

2.hive是如何實現分割槽的?

建表語句:

create table tablename (id) partitioned by (dt string)

增加分割槽:

alter table tablenname add partition (dt = 『2016-03-06』)

刪除分割槽:

alter table tablename drop partition (dt = 『2016-03-06』)

3.hive支援not in 嗎?

不支援,可以用 left join 實現此功能

4.hive有哪些方式儲存元資料,各有哪些優缺點。

1)儲存於derby

資料庫,此方法只能開啟乙個 hive 客戶端,不推薦使用

。2)儲存於 my

sql資料庫中,可以多客戶端連線,推薦使用。

5.hive如何優化

1)join優化,盡

量將小表放在 join 的左邊,如果乙個表很小可以採用 mapjoin

2)排序優化,order by 乙個 reduce效率低,distirbute

by+sort by也可以實現全域性排序

3)使用分割槽,查詢時可減少資料的檢索,從而節省時間

6.hive能像關係型資料庫那樣,建多個庫嗎?

可以建立多個庫,多庫多表都支援。

7.hive 式 中的壓縮格式 rcfile、 、 textfile、 、 sequencefile  各有什麼區別?

textfile:預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大

sequencefile:

hadoop

api提供的一種二進位制檔案支援,使用方便,可分割,可壓縮,支援三種壓縮,none,record,block

rcfile 是一種行列儲存相結合的方式。首先,將資料按行分塊,保證同乙個 record 在同

乙個塊上,避免讀乙個記錄讀取多個 block。其次,塊資料列式儲存,有利於資料壓縮和快速的列訪問。資料載入的時候效能消耗大,但具有較好的壓縮比和查詢響應。

8.hive相對於oracle 來說有那些優點?

1)儲存,hive 儲存在 hdfs 上,oracle 儲存在本地檔案系統

2)擴充套件性,hive 可以擴充套件到數

千節點,oracle 理論上只可擴充套件到 100 臺左右

3)單錶儲存,資料量大 hive 可以分區分桶,oracle 資料量大只能分表。

9.hive資料倉儲於資料庫的異同

(1)由於hive採用了sql的查詢語言hql,因此很容易將hive理解為資料庫。其實從結構上來看,hive和資料庫除了擁有類似的查詢語言,

再無類似之處。

(2)資料儲存位置。  hdfs   raw local fs

(3)資料格式。 分隔符

(4)資料更新。hive讀多寫少。hive中不支援對資料的改寫和新增,所有的資料都是在載入的時候中確定好的。

insert into … values新增資料,使用update … set修改資料  不支援的

hdfs 一次寫入多次讀取

(5) 執行。hive通過mapreduce來實現的  而資料庫通常有自己的執行引擎。 

(6)執行延遲。由於沒有索引,需要掃瞄整個表,因此延遲較高。另外乙個導致hive執行延遲高的因素是mapreduce框架

(7)可擴充套件性

(8)資料規模。

10.hive4種排序

order by //可以指定desc 降序 asc 公升序

order by會對輸入做全域性排序,因此只有乙個reducer(多個reducer無法保證全域性有序),然而只有乙個reducer,會導致當輸入規模較大時,消耗較長的計算時間。

sort by 【對分區內的資料進行排序】

sort by不是全域性排序,其在資料進入reducer前完成排序,因此,如果用sort by進行排序,並且設定mapred.reduce.tasks>1,則sort by只會保證每個reducer的輸出有序,並不保證全域性有序。sort by不同於order by,它不受hive.mapred.mode屬性的影響,sort by的資料只能保證在同乙個reduce中的資料可以按指定字段排序。使用sort by你可以指定執行的reduce個數(通過set mapred.reduce.tasks=n來指定),對輸出的資料再執行歸併排序,即可得到全部結果。

distribute by 【對map輸出進行分割槽】

distribute by是控制在map端如何拆分資料給reduce端的。hive會根據distribute by後面列,對應reduce的個數進行分發,預設是採用hash演算法。sort by為每個reduce產生乙個排序檔案。在有些情況下,你需要控制某個特定行應該到哪個reducer,這通常是為了進行後續的聚集操作。distribute by剛好可以做這件事。因此,distribute by經常和sort by配合使用。

cluster by

cluster by除了具有distribute by的功能外還兼具sort by的功能。當distribute by和sort by 是同乙個欄位的時候可以使用cluster by替代。但是排序只能是倒敘排序,不能指定排序規則為asc或者desc。

Hive面試總結

一 order by order by會對輸入做全域性排序,因此只有乙個reducer 多個reducer無法保證全域性有序 然而只有乙個reducer,會導致當輸入規模較大時,消耗較長的計算時間。set hive.mapred.mode預設為nonstrict,在strict模式下使用order ...

hive 解密 Hive 常用函式

2.concat str1,sep,str2,sep,str3,和 concat ws sep,str1,str2,str3,字串連線函式,需要是 string型字段。如果4個字段,想得到如下結果,看下兩個函式的區別 eg 1 select concat 江蘇省 南京市 玄武區 徐莊軟體園 2 se...

Hive知識之Hive基礎

5 hive的基本操作 5.2 資料表相關操作 6 資料的匯入和匯出 1 hive簡介 2 hive與傳統關係型資料庫的比較 專案hive rdbms 查詢語言 hqlsql 資料儲存 hdfs raw device or local fs 執行mapreduce excuter 執行延遲高低 處理...