
面試題01、 請說下Hive和資料庫的區別
Hive 和資料庫除了擁有類似的查詢語言,再無類似之處,
1)資料存盤位置
Hive 存盤在 HDFS ,資料庫將資料保存在塊設備或者本地檔案系統中,
2)資料更新
Hive中不建議對資料的改寫,而資料庫中的資料通常是需要經常進行修改的,
3)執行延遲
Hive 執行延遲較高,資料庫的執行延遲較低,當然,這個是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時候,Hive的并行計算顯然能體現出優勢,
4)資料規模
Hive支持很大規模的資料計算;資料庫可以支持的資料規模較小,
面試題02、 內部表和外部表
1)內部表又叫管理表:當我們洗掉一個管理表時,Hive也會洗掉這個表資料,管理表不適合和其他工具共享資料,
2)外部表:洗掉該表并不會洗掉掉原始資料,洗掉的是表的元資料
詳答版:
未被 external 修飾的是內部表(managed table),被 external 修飾的為外部表 (external table)
區別:
內部表資料由 Hive 自身管理,外部表資料由 HDFS 管理;
內部表資料存盤的位置是hive.metastore.warehouse.dir(默認:/user/hive/warehouse),外部表資料的存盤位置由自己制定(如果沒有 LOCATION, Hive 將在HDFS上的/user/hive/warehouse 檔案夾下以外部表的表名創建一個檔案夾,并將屬于這個表的資料存放在這里);
洗掉內部表會直接洗掉元資料(metadata)及存盤資料;洗掉外部表僅僅會洗掉元資料,HDFS 上的檔案并不會被洗掉;
面試題03、Hive中order by,sort by,distribute by和cluster by的區別
Sort By:在同一個磁區內排序
Order By:全域排序,只有一個Reducer;
Distrbute By:類似 MapReduce 中Partition,進行磁區,一般結合sort by使用,
Cluster By:當 Distribute by 和 Sort by 欄位相同時,可以使用Cluster by方式,
Cluster by 除了具有 Distribute by 的功能外還兼具 Sort by 的功能,但是只能升序排序,不能指定排序規則為ASC或者DESC,
面試題04、UDF、UDAF、UDTF的區別
當Hive自帶的函式無法滿足我們的業務處理需求時,hive允許我們自定義函式來滿足需求,
根據自定義函式的類別分為以下三種:
UDF:User-Defined-Function,用戶自定義函式,資料是一進一出,功能類似于大多數數學函式或者字串處理函式;
UDAF:User-Defined Aggregation Function,用戶自定義聚合函式,資料是多進一出,功能類似于 count/max/min;
UDTF:User-Defined Table-Generating Functions,用戶自定義表生成函式,資料是一進多處,功能類似于lateral view explore();
面試題05、Rank排名函式
1.RANK() 排序相同時會重復,總數不會變;
2.DENSE_RANK() 排序相同時會重復,總數會減少;
3.ROW_NUMBER() 根據順序計算排名,
在實際開發中,以上三個rank函式通常是和開窗函式一起使用的,
面試題 06、 視窗函式(開窗函式)
OVER():用于指定分析函式作業時的資料視窗大小,這個資料視窗大小可能會隨著行的變而變化;
CURRENT ROW:當前行;
n PRECEDING:往前n行資料;
n FOLLOWING:往后n行資料;
UNBOUNDED:起點,UNBOUNDED PRECEDING 表示從前面的起點
UNBOUNDED FOLLOWING表示到后面的終點;
LAG(col,n,default_val):往前第n行資料;
LEAD(col,n, default_val):往后第n行資料;
NTILE(n):把有序磁區中的行分發到指定資料的組中,各個組有編號,編號從1開始,對于每一行,NTILE回傳此行所屬的組的編號,這個函式需要注意:n必須為int型別,
面試題 07、 行轉列函式
CONCAT(string A/col, string B/col…):回傳輸入字串連接后的結果,支持任意個輸入字串,
例如:concat( aa, ‘:’, bb) 就相當于把aa列和bb列用冒號連接起來了,aa:bb,
CONCAT_WS(separator, str1, str2,…):CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式,第一個引數是其它引數的分隔符,分隔符的位置放在要連接的兩個字串之間,分隔符可以是一個字串,也可以是其它引數,如果分隔符為 NULL,則結果為 NULL,函式會忽略任何分隔符引數后的 NULL 值,但是CONCAT_WS()不會忽略任何空字串,(然而會忽略所有的 NULL),
COLLECT_SET(col):函式只接受基本資料型別,它的主要作用是將某欄位的值進行去重匯總,產生array型別欄位,
面試題08、列轉行函式
EXPLODE(col):將hive某列中復雜的array或者map結構拆分成多行,
LATERAL VIEW:常和UDTF函式一起使用,
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解釋:用于和split, explode等UDTF一 起使用,它能夠將一列資料拆成多行資料,在此基礎上可以對拆分后的資料進行聚合,
面試題09、Hive的資料檔案存盤格式
texfile:默認的存盤格式:普通的文本檔案,資料不壓縮,磁盤的開銷比較大,分析開銷大,
sequencefile:提供的一種二進制存盤格式,可以切割,天生壓縮,
rcfile:提供的是一種行列混合存盤方式,該方式會把相近的行和列資料放在一塊兒,存盤比較耗時,查詢效率高,也天生壓縮,
orc:是rcfile的一種優化存盤,
parquet:自定義輸入輸出格式
面試題10、Hive中常用的系統函式有哪些
date_add(str,n)、date_sub(str,n) 加減時間
next_day(to_date(str),’MO’) 周指標相關,獲取str下周一日期
date_format(str,’yyyy’) 根據格式整理日期
last_day(to_date(str)) 求當月最后一天日期
collect_set(col) 收集資料回傳一個以逗號分割的字串陣列 get_json_object(jsondata,object) 決議json,使用object獲取物件值 NVL(str,replace) 空欄位賦值,str為慷訓傳replace值;兩個都為空則回傳null
轉自https://manor.blog.csdn.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292663.html
標籤:其他
