字段 新增hive_Hive分区表 | 每日五分钟学大数据
數據分區的一般概念存在已久。其可以有多種形式,但是通常使用分區來水平分散壓力,將數據從物理上轉移到和使用最頻繁的用戶更近的地方,以及實現其他目的。
Hive中有分區表的概念。我們可以看到分區表具有重要的性能優勢,而且分區表還可以將數據以一種符合邏輯的方式進行組織,比如分層存儲。
來看看這張分區表:
CREATE TABLE ods.ods_login(`uuid` string,`event` string,`time` string)partitioned by (dt string)分區表改變了 Hive對數據存儲的組織方式。如果我們是在ods庫中創建的這個 表,那么對于這個表只會有一個ods_login目錄與之對應:
hdfs://hadooopcluster/user/hive/warehouse/ods.db/ods_login如果我們加一個分區
ALTER TABLE ods.ods_login add PARTITION (dt='2020-03-01');那么存儲路徑會發生這樣的變化
hdfs://hadoopcluster/user/hive/warehouse/ods.db/ods_login/dt=2020-03-01/是的,分區名就是實際的目錄名稱。表下將會包含有零個文件或者多個文件,這些文件中存放著那些你新增的分區名稱。
分區字段(這個例子中就是dt) 一旦創建好,表現得就和普通的字段一樣。 事實上,除非需要優化查詢性能,否則使用這些表的用戶不需要關心這些“字段”是否是分區字段。
例如,下面這個查詢語句將會查找出用戶在2020-03-01的所有行為數據:
SELECT * FROM ods.ods_loginWHERE dt='2020-03-01'需要注意的是,分區使這張表擁有了額外的一個時間字段,所以實際數據中可以省略類似含義的字段,避免冗余了。
對數據進行分區,最重要的原因就是為了更快地查詢。在前面那個將結果范圍限制在'2020-03-01'這一天的查詢中,僅僅需要掃描一個目錄下的內容即可。即使我們可能有好幾百個目錄,除了這一個目錄其他的都可以忽略不計。對于非常大的數據集,分區可以顯著地提高查詢性能。
當我們在WHERE子句中增加謂詞來按照分區值進行過濾時,這些謂詞被稱為分區過濾器。
為了避免查詢的數據量太大,一個高度建議的安全措施就是將Hive 設置為“strict(嚴格)”模式,這樣如果對分區表進行查詢而WHERE子句沒有加分區過濾的話,將會禁止提交這個任務。
用戶也可以按照下面的語句將屬性值設置為
hive> set hive.mapred.mode=strict;hive> SELECT * FROM ods.ods_login LIMIT 100;FAILED: Error in semantic analysis: No partition predicate found forAlias nen Table "ods.ods_login"如果設置為nonstrict;則可以正常查詢
hive> set hive.mapred.mode=nonstrict;hive> SELECT * FROM ods.ods_login LIMIT 100;aaa bbb ccc 2020-03-01同時,可以通過SHOW PARTITIONS命令查看表中存在的所有分區:
hive> SHOW PARTITIONS ods.ods_logindt=2020-03-01參考資料:
1.《Hive編程指南》?
2. Hive官方wiki:
https://cwiki.apache.org/confluence/display/HIVE
>>??想學大數據?點擊找老蒙!<<智能人工推薦:
從面試官的角度談談大數據面試??
你是否能被輕易地取代?
>>? 點擊查看更多覺得有價值請關注▼總結
以上是生活随笔為你收集整理的字段 新增hive_Hive分区表 | 每日五分钟学大数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 散列表查找失败平均查找长度_Python
- 下一篇: macbook 移动硬盘无法写入_如何升