我理解Hive表中的分區和分區的概念。但我想知道的是「我們什麼時候分區,什麼時候分區?」 什麼是可以說適用於分區和分區的理想方案?我們應該什麼時候在蜂巢中進行分區和分區?
回答
在Hive中進行分區: - 如果我們正在處理一個大表,並且經常使用WHERE子句運行查詢,以將結果限制到特定的分區列/列,那麼我們應該利用hive的分區概念。對於更快的查詢響應,Hive表可以是PARTITIONED BY(partition_cols_name)。它有助於以邏輯方式組織數據,並且當我們使用分區列查詢分區表時,它允許配置單元跳過所有相關的子目錄和文件,所以如果分區正確完成,掃描變得容易。當基數(一個字段可能的值的數量)不高時應該完成。否則,如果分區太多,那麼它是namenode上的開銷。
Hive中的Bucketing: - 如果要分隔具有高基數(字段可能具有的值的數量)的字段上的數據,那麼我們應該使用分段。如果我們只需要根據某些特定領域的數據而不是整個數據,那麼分段可能是一個不錯的選擇。如果涉及一些地圖邊連接,那麼bucketed表是一個不錯的選擇。
分區有助於消除數據,如果在WHERE子句中使用,分段有助於將每個分區中的數據組織成多個文件,因此同一組數據總是寫入同一個分區。幫助加入專欄。 Hive Buckets不過是另一種分解數據或將數據減少爲更易於管理的部分或同等部分的技術。例如,我們的表格中包含日期,employee_name,employee_id,薪水,樹葉等列。在此表中,只使用日期列作爲頂級分區,而employee_id作爲第二級分區導致太多的小分區。我們可以使用HASH值作爲bucketing或範圍來存儲數據。
Hive分區和Bucketing是當我們進行分區時,我們爲每個唯一的列值創建一個分區。但是可能會出現我們需要創建大量小分區的情況。但是,如果您使用分段功能,則可以將其限制爲您選擇的數字並將數據分解到這些分段中。在配置單元中,分區是一個目錄,但存儲桶是一個文件。
在配置單元中,默認情況下分段不起作用。您必須設置以下變量才能啓用分段。設置hive.enforce.bucketing = true;
使用分區和分區的主要原因。
分區:
表數據的分區是用於水平地分配負載來完成。
示例:如果我們有一個非常大的表名稱作爲「零件」,並且經常運行「where」查詢將結果限制爲特定的零件類型。
有關更快的查詢響應,該表可以按(PART_TYPE STRING)進行分區。一旦你的分區表它改變了蜂巢結構中的數據存儲和現在蜂巢將創建子目錄,這將反映類似的分區結構:
.../Parts/PART_TYPE = Engine-Part
.../Parts/Part_Type = Brakes
所以,現在如果你在表上運行查詢「零件「與WHERE PART_TYPE ='引擎零件' ,它只會掃描一個目錄的內容PART_TYPE ='引擎零件'
分區功能在Hive中非常有用。但同時執行其他查詢可能需要很長時間。
另一個缺點是,如果我們創建了太多的分區,而這又會創建大量不必要的Hadoop文件和目錄,並且由於NameNode必須將文件系統的所有metdata文件保留在內存中,所以它成爲NameNode的開銷。
桶裝:
桶裝是可使用的數據,以進一步劃分成更容易管理的形式的另一種技術。
示例:假設表「part_sale」有「SALE_DATE」的頂部水平分區,它被進一步劃分成「零件類型」作爲第二級分區。
這將導致太多的小分區。
.../part_sale/sale-date = 2017-04-18/part_type = engine_part1
.../part_sale/sale-date = 2017-04-18/part_type = engine_part2
.../part_sale/sale-date = 2017-04-18/part_type = engine_part3
.../part_sale/sale-date = 2017-04-18/part_type = engine_part4
如果我們鬥「part_sale」表,並使用「零件類型」作爲我們此列的table.The價值的桶裝列將通過用戶定義的號碼被散列到buckets.Records具有相同「零件類型」將總是被存儲在相同的bucket.You可以在創建表時指定桶的數量,從而桶的該數目是固定的,存在與數據沒有波動。當有在列幾個唯一值
PARTITIONING
將使用 - 你想加載您所需的WHERE子句
BUCKETING
會在出現在where子句
- 1. 蜂巢中的分區和分層
- 2. 蜂巢桶vs分區
- 3. 查詢蜂巢分區表
- 4. 蜂巢:動態分區
- 5. 蜂巢動態分區
- 6. 蜂巢:創建表和分區通過
- 7. 爲什麼分區可以在蜂巢表中媲美?
- 8. 蜂巢中的範圍分區
- 9. 如何創建分區在HBase的表像蜂巢表分區
- 10. 我應該對錶格進行分區/子分區嗎?
- 11. 蜂巢描述分區,以顯示分區網址
- 12. 通過減少分區的數量改變蜂巢表分區
- 13. 蜂巢改變分區表上聲明
- 14. 下降蜂巢分區動態
- 15. 蜂巢,桶裝的分區表
- 16. 蜂巢:從現有的分區表
- 17. 蜂巢:試圖建立動態分區
- 18. 添加文件蜂巢分區
- 19. 插入到蜂巢分區表錯誤
- 20. 在Hive中對錶進行分區和分區有什麼區別?
- 21. 我們可以製作一個在蜂巢中既有分區又有分區的表格嗎?
- 22. 分組蜂巢行
- 23. 豬和蜂巢中Chararray和Bytearray的區別究竟是什麼?
- 24. 我們什麼時候應該上課,什麼時候不應該上課
- 25. 雖然我嘗試使用分區蜂巢上,
- 26. 蜂箱 - 分區表
- 27. 當我們不應該在蜂巢中使用bucketing?
- 28. PHP mysql_close()和mysql_free_result() - 我應該在什麼時候使用它們?
- 29. .build,.create和.create之間的區別!什麼時候應該使用它們?
- 30. 什麼是使用位置的同時,我們在蜂巢