hive 和資料庫除了擁有類似的查詢語言,再無類似之處。 1
)資料儲存位置
hive 儲存在 hdfs 。資料庫將資料儲存在塊裝置或者本地檔案系統中。 2
)資料更新
hive中不
建議對資料的改寫。而資料庫中的資料通常是需要經常進行修改的, 3
)執行延遲
hive
執行延遲較高。資料庫的執行延遲較低。當然,這個是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時候,hive的平行計算顯然能體現出優勢。 4
)資料規模
hive支援很大規模的資料
計算;資料庫可以支援的資料規模較小。
元資料、原始資料 1
)刪除資料時:
內部表:元資料、原始資料,全刪除
外部表:元資料 只刪除
2)在公司生產環境下,什麼時候建立內部表,什麼時候建立外部表?
在公司中絕大多數場景都是外部表。
自己使用的臨時表,才會建立內部表;1)
order by:全域性排序,只有乙個reducer; 2
)sort by:
分區內有序; 3
)distrbute by:類似mr中partition,進行分割槽,結合sort by使用。 4
)cluster by:當distribute by和sorts by欄位相同時,可以使用cluster by方式。cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是
公升序排序,不能指定排序規則為asc或者desc。
在生產環境中
order by
用的比較少,容易導致oom。
在生產環境中
sort by+ distrbute by
用的多。
1)date_add、
date_sub
函式(加減日期)
2)next_day
函式(周指標相關) 3
)date_format函式(
根據格式整理日期)
4)last_day
函式(求當月最後一天日期)
5)collect_set函式 6)
get_json_object
解析json函式
7)nvl(表示式1,表示式2)
如果表示式1為空值,nvl返回值為表示式2的值,否則返回表示式1的值。
1)在專案中是否
自定義過udf
、udtf函式
,以及用他們
處理了什麼問題
,及自定義
步驟?
(1)用
udf函式解析公共字段;用udtf函式解析事件字段。
(2)自定義
udf:
繼承udf
,重寫evaluate方法
(3)自定義
udtf
:繼承自genericudtf,重寫3個方法:initialize(自定義輸出的列名和型別),process(將結果返回forward(result)),close
2)為什麼要自定義
udf/udtf?
因為自定義函式,可以自己埋點log列印日誌,出錯或者資料異常,方便除錯。
1)rank
(1)rank
() 排序相同時會重複,總數不會變
(2)dense_rank
() 排序相同時會重複,總數會減少
(3)row_number
() 會根據順序計算 2)
over():指定分析函式工作的資料視窗大小,這個資料視窗大小可能會隨著行的變而變化
(1)current row:當前行
(2)n preceding:往前n行資料
(3)n following:往後n行資料
(4)unbounded:起點,unbounded preceding 表示從前面的起點, unbounded following表示到後面的終點
(5)lag(col,n):往前第n行資料
(6)lead(col,n):往後第n行資料
(7)ntile(n):把有序分割槽中的行分發到指定資料的組中,各個組有編號,編號從1開始,對於每一行,ntile返回此行所屬的組的編號。注意:n必須為int型別。
3)手寫top
n
C 高頻面試題
malloc free是c語言的標準庫函式,new delete是c 的運算子。由於malloc free是庫函式而不是運算子,不在編譯器控制許可權之內。對於使用者自定義的物件而言,用maloc free無法滿足動態管理物件的要求。廢話 new是型別安全的,malloc不是。int a new fl...
C 高頻面試題
字首式可以返回物件的引用,而字尾式必須返回物件的值所以導致在大物件產生時產生了較大的複製開銷,因此處理自定義型別的時候盡量使用字首式。a b b a a b 相對於c,c 多了過載 內聯函式 異常處理,擴充套件了物件導向的設計內容 類 繼承 虛函式 模板。c 並不是完全的物件導向,它也可以寫出面向過...
STL高頻面試題
vector的內部是使用動態陣列的方式來實現的,如果動態陣列的內部實現不夠用,就要動態的重新分配記憶體。然後把原陣列的內容拷貝過去。vector和陣列類似,擁有連續的記憶體空間,支援隨機的訪問,在中間進行元素的插入和刪除的操作時間複雜度是o n list是由雙向鍊錶實現的,只能通過陣列指標來進行資料...