hive相对于oracle的优点,【Hive】Hive面试题
1、hive的join有幾種方式,怎么實現join的?
left join
--以左表為基準,不符合的值以null值顯示
--工作中以left join 居多,大表加載小表的形式
select empno,ename,emp.deptno,dname from emp left join dept on
emp.deptno=dept.deptno;
right join
--以右表為基準,不符合的值以null值顯示
select empno,ename,emp.deptno,dept.deptno from emp right join
dept on emp.deptno=dept.deptno;
full join
select empno,ename,emp.deptno,dept.deptno from emp full join
dept on emp.deptno=dept.deptno;
===============================================
2、hive內部表與外部表的區別
Hive
創建內部表時,會將數據移動到數據倉庫指向的路徑;若創建外部表,僅記錄數據所在的路徑,不對數據的位置做任何改變。
在刪除表的時候,內部表的元數據和數據會被一起刪除,而外部表只刪除元數據,不刪除數據。這樣外部表相對來說更加安全些,數據組織也更加靈活,方便共享源數據。
1、在導入數據到外部表,數據并沒有移動到自己的數據倉庫目錄下,也就是說外部表中的數據并不是由它自己來管理的!而表則不一樣;
2、在刪除表的時候,Hive將會把屬于表的元數據和數據全部刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的!
===========================================================
3、hive表關聯要注意什么,任意兩張表都可以關聯么?
===========================================================
4、hive是如何實現分區的?
Hive中的分區就是分目錄,把一個大的數據集根據業務需要分割成更小的數據集。
===========================================================
5、hive支持not in 么?
hive在0.13版本后已經支持in和not in了!hive已經越來越像我們平時使用的關系型數據庫了!
===============================================
6、 Hive有那些方式保存元數據的,各有那些特點。
1) 內存數據庫derby,較小,不常用
2) 本地mysql,較常用
3) 遠程mysql,不常用
===============================================
7、hive如何優化,列舉說明
hive查詢操作優化
-------group by 優化---------
set hive.groupby.skewindata=true 如果是group
by過程出現傾斜應該設置為true;
set hive.groupby.mapaggr.checkintenval=1000000;
這個是group的鍵對應的記錄條數超過這個值則會進行優化
-----------join優化-------------------
set
hive.optimize.skewjoin=true;如果是join過程出現傾斜 應該設置為true
set
hive.skewjoin.key=1000000;--這個是join的鍵對應的記錄條數超過這個值則會進行優化
-----------mapjoin-----------------
當表小于25mb的時候,小表自動注入內存
set hive.auto.convert.join=true;
set
hive.mapjoin.smalltable.filesize=25mb;?默認值是25mb
===========================================================
8、hive底層與數據庫交互原理
Hive的查詢功能是由hdfs + mapreduce結合起來實現的
Hive與mysql的關系:只是借用mysql來存儲hive中的表的元數據信息,稱為metastore
===========================================================
9、hive如何權限控制?
Hive從0.10版本(包含0.10版本)以后可以通過元數據來控制權限,Hive-0.10之前的版本對權限的控制主要是通過Linux的用戶和用戶組來控制,不能對Hive表的CREATE、SELECT、DROP等操作進行控制,當然Hive基于元數據來控制權限也不是完全安全的,目的就是為了防止用戶不小心做了不該做的操作
===========================================================
10、hive能像關系型數據庫那樣,建多個庫么?
===========================================================
11、hive中sort by和order by的區別?
使用order by會引發全局排序
使用distribute和sort進行分組排序
===========================================================
12、hive中的壓縮格式各有什么區別?
RCFile
RCFile是Hive推出的一種專門面向列的數據格式。
它遵循“先按列劃分,再垂直劃分”的設計理念。當查詢過程中,針對它并不關心的列時,它會在IO上跳過這些列。需要說明的是,RCFile在map階段從
遠端拷貝仍然是拷貝整個數據塊,并且拷貝到本地目錄后RCFile并不是真正直接跳過不需要的列,并跳到需要讀取的列,
而是通過掃描每一個row group的頭部定義來實現的,但是在整個HDFS Block 級別的頭部并沒有定義每個列從哪個row
group起始到哪個row
group結束。所以在讀取所有列的情況下,RCFile的性能反而沒有SequenceFile高。
TextFile:
Hive默認格式,數據不做壓縮,磁盤開銷大,數據解析開銷大。
可結合Gzip、Bzip2、Snappy等使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive不會對數據進行切分,從而無法對數據進行并行操作。
SequenceFile:
SequenceFile是Hadoop API
提供的一種二進制文件,它將數據以的形式序列化到文件中。這種二進制文件內部使用Hadoop 的標準的Writable
接口實現序列化和反序列化。它與Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile
繼承自Hadoop API 的SequenceFile,不過它的key為空,使用value 存放實際的值, 這樣是為了避免MR
在運行map 階段的排序過程
===========================================================
13、hive的兩張表關聯,使用mapreduce是怎么寫的?
===========================================================
14、hive相對于Oracle來說有哪些優點?
hive 是數據倉庫,oracle是數據庫,hive
能夠存儲海量數據,hive還有更重要的作用就是數據分析,最主要的是免費。
1
hive表關聯查詢,如何解決數據傾斜的問題?
傾斜原因:
map輸出數據按key
Hash的分配到reduce中,由于key分布不均勻、業務數據本身的特、建表時考慮不周、等原因造成的reduce
上的數據量差異過大。
1)、key分布不均勻;
2)、業務數據本身的特性;
3)、建表時考慮不周;
4)、某些SQL語句本身就有數據傾斜;
如何避免:對于key為空產生的數據傾斜,可以對其賦予一個隨機值。
解決方案
1>.參數調節:
hive.map.aggr = true
hive.groupby.skewindata=true
有數據傾斜的時候進行負載均衡,當選項設定位true,生成的查詢計劃會有兩個MR Job。第一個MR
Job中,Map的輸出結果集合會隨機分布到Reduce中,每個Reduce做部分聚合操作,并輸出結果,這樣處理的結果是相同的Group
By Key有可能被分發到不同的Reduce中,從而達到負載均衡的目的;第二個MR Job再根據預處理的數據結果按照Group By
Key 分布到 Reduce 中(這個過程可以保證相同的 Group By Key
被分布到同一個Reduce中),最后完成最終的聚合操作。
2>.SQL 語句調節:
1)、選用join key分布最均勻的表作為驅動表。做好列裁剪和filter操作,以達到兩表做join
的時候,數據量相對變小的效果。
2)、大小表Join:
使用map join讓小的維度表(1000 條以下的記錄條數)先進內存。在map端完成reduce.
4)、大表Join大表:
把空值的key變成一個字符串加上隨機數,把傾斜的數據分到不同的reduce上,由于null
值關聯不上,處理后并不影響最終結果。
5)、count distinct大量相同特殊值:
count distinct 時,將值為空的情況單獨處理,如果是計算count
distinct,可以不用處理,直接過濾,在最后結果中加1。如果還有其他計算,需要進行group
by,可以先將值為空的記錄單獨處理,再和其他計算結果進行union。
2.
請談一下hive的特點是什么?hive和RDBMS有什么異同?
hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
3. 請把下一語句用hive方式實現?
SELECT a.key,a.value
FROM a
WHERE a.key not in (SELECT b.key FROM b)
答案:
select a.key,a.value from a where a.key not exists (select b.key
from b)
4. Multi-group by
是hive的一個非常好的特性,請舉例說明
from A
insert overwrite table B
select A.a, count(distinct A.b) group by A.a
insert overwrite table C
select A.c, count(distinct A.b) group by A.c
5. 請說明hive中 Sort By,Order By,Cluster
By,Distrbute By各代表什么意思。
order
by:會對輸入做全局排序,因此只有一個reducer(多個reducer無法保證全局有序)。只有一個reducer,會導致當輸入規模較大時,需要較長的計算時間。
sort by:不是全局排序,其在數據進入reducer前完成排序。
distribute by:按照指定的字段對數據進行劃分輸出到不同的reduce中。
cluster by:除了具有 distribute by 的功能外還兼具 sort by 的功能。
6.簡要描述數據庫中的
null,說出null在hive底層如何存儲,并解釋selecta.* from t1 a left outer join t2 b
on a.id=b.id where b.id is null; 語句的含義
null與任何值運算的結果都是null, 可以使用is null、is not null函數指定在其值為null情況下的取值。
null在hive底層默認是用'\N'來存儲的,可以通過alter table test SET
SERDEPROPERTIES('serialization.null.format' = 'a');來修改。
查詢出t1表中與t2表中id相等的所有信息。
7.寫出hive中split、coalesce及collect_list函數的用法(可舉例)。
Split將字符串轉化為數組。
split('a,b,c,d' , ',') ==> ["a","b","c","d"]
COALESCE(T v1, T v2, …) 返回參數中的第一個非空值;如果所有值都為 NULL,那么返回NULL。
collect_list列出該字段所有的值,不去重?select collect_list(id)
from table;
8.寫出將 text.txt 文件放入 hive 中 test
表‘2016-10-10’ 分區的語句,test 的分區字段是 l_date。
LOAD DATA LOCAL INPATH '/your/path/test.txt' OVERWRITE INTO TABLE
test PARTITION (l_date='2016-10-10')
總結
以上是生活随笔為你收集整理的hive相对于oracle的优点,【Hive】Hive面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 替换 乱码,php文字替换出现乱
- 下一篇: oracle原始数据类型,Oracle基