我知道分區表用於水平分佈負載,但它們的確切用途是什麼?有人可以用一個簡單的例子向我解釋嗎?什麼是在Hive中使用的分區表?
回答
分區允許Hive訪問您的數據的一個子集,而無需全部讀取它。這是一個爲什麼可能有用的具體例子。爲了使這一點很容易理解,我在解釋時非常簡化,如果你想要比我想提供的表面層理解更多的話,我推薦閱讀其他地方的Hive分區。
您正在以每天~1TB
的速率收到帶時間戳的數據。您有數據追溯到100天,總數據負載爲~100TB
。很多時候,您想在過去10天內彙總一些數據。如果不進行分區,即使Hive無論如何都會忽略大部分數據,因爲它不符合日期過濾器(位於WHERE子句中),所以您將不得不讀取數據的所有100TB
。如果按日期劃分,Hive會將數據拆分爲每天的數據塊,每個數據塊都有~1TBGB
。 Hive會查看您的WHERE子句,並提前指出哪些分區將通過過濾器並僅處理該數據。在這種情況下,我們只需要查看的數據,這將大大減少我們對集羣資源的使用並提高工作完成時間。現在即使我們有1000天的數據總計爲1PB
,我們仍然只需要查看數據的。
實際上,許多Hive查詢只關心定義好的全部數據量的子集是非常常見的。想想你經常在WHERE子句中爲哪些列指定範圍(或單個特定值)。你甚至可以在多個列上分區。例如,如果我們有一個包含10種可能顏色的顏色列,並且每種顏色每天負責大約100GB的數據,那麼我們可能會另外對顏色進行分區。那麼如果我們只關心過去10天內的red
數據,我們只需要處理1TB
的數據。
小心不要過度分區。從我的日期示例中,您可能會認爲如果按日期分區是好的,則將時間戳劃分爲第二個分區會更好。這在理論上可以讓你只吸引你關心的行。但是,如果你這樣做,你的分區將會變得非常小,Hive不能很好地處理非常小的文件。分區過多列也存在同樣的問題。還有一點需要注意的是,您的數據在您分區的列上的分佈情況如何。如果90%的數據的顏色爲black
,9%的顏色爲red
,其餘1%的顏色分爲其他8種顏色,那麼您將擁有一些不太理想的大型和小型分區。
分區還有其他一些好處,例如減少底層數據的文件大小。這是通過將該列從支持該表的文件中取出並將該列的值放入保存該分區的文件夾中來實現的。
從閱讀你的問題,似乎你正在尋找關於分區表的答案。管理vs外部表是一個完全獨立的問題,應該有自己的問題。
Hive託管表完全由Hive管理,Hive在其自己的數據倉庫中創建表(數據源)的副本,並在移除配置單元時自己負責從倉庫中刪除此文件。託管表的計數器, 外部表直接由配置單元在創建表時使用External關鍵字創建,並且不會複製倉庫中的任何數據。在下拉表數據將保持不變。
問題是關於分區表,而不是外部表。 – Priyesh
- 1. 分區和分區Hive表的優點是什麼?
- 2. 在Hive中對錶進行分區和分區有什麼區別?
- 3. 在HIVE中從HIVE管理的分區表中插入ORC分區表
- 4. Hive分區vs多個表,有什麼區別?
- 5. Hive分區和現有表的分區
- 6. 如何使用Hive HQL創建分區表'像'未分區表?
- 7. 什麼是表分區?
- 8. 表上的Hive分區
- 9. 是什麼HIVE
- 10. 在Hive中加入分區表
- 11. Sqoop導出分區Hive表
- 12. 分區表中的Hive加載
- 13. 什麼是使用分區與SQL 2005
- 14. Spark-Hive分區
- 15. 在Hive中使用分類表
- 16. Hive中用於百分比的數據類型是什麼?
- 17. 對於基於日期的Hive分區,爲什麼要使用字符串類型?爲什麼不是int?
- 18. Hive insert vs Hive Load:什麼是折衷?
- 19. 使用Oozie添加Hive分區
- 20. Sqoop導出分區的Hive表
- 21. Hive |無法創建分區表| ParseException的
- 22. 在SQL Server中分區大表的最佳方法是什麼?
- 23. 什麼是在社區服務器中使用的cs_PostViews表
- 24. HDFS vs HIVE分區
- 25. 使用分區列的Hive查詢不檢索所有記錄。爲什麼?
- 26. 在Hive中使用多個級別的分區
- 27. 什麼是Apache Helix中的「分區」
- 28. Hive - CLIDriver.java的用途是什麼?
- 29. Hive中的默認模式是什麼?
- 30. 如何使用列的值範圍對Hive表進行分區
檢查谷歌。有很好的答案。 –
此外,[Hive Wiki](https://cwiki.apache.org/confluence/display/Hive/LanguageManual)也是學習的好地方。 –