日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hive相对于oracle的优点,【Hive】Hive面试题

發布時間:2025/3/21 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。