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 執行延遲高低 處理...