我的問題主要是理論上的,但是我有一些已經遵循某種磁區方案的表,比如說我的表是按天磁區的,但是在使用資料一段時間后,我們想修改為按月磁區,我可以很容易地用新的磁區定義重新創建表,然后重新插入資料,這是最好的方法嗎? 當資料很大時,聽起來很慢,我看到hive中有多個改變磁區的命令,是否有一個可以幫助我實作我需要的?
也許還有另一種選擇,那就是把檔案連接起來,然后用新的磁區重新創建表?
ALTER TABLE table table_name [PARTITION (partition_key = 'partition_value'[, ...])] . CONCATENATE。
如果有任何相關的參考資料,我們也很感激。
uj5u.com熱心網友回復:
如果檔案在每日檔案夾中,你不能把許多每日檔案夾裝入單個月的磁區,對于每個月,檔案需要被移到每月的檔案夾中。 你不能只做元資料的操作。
如果你擅長shell腳本,你可以在hadoop fs -ls <table location> | sort中撰寫回圈,在回圈中把路徑保存到變數中,檢查包括yyyy-MM的子串是否與之前的不同,然后創建yyyy-MM檔案夾。對于回圈中的每一行,將所有內容復制到月份位置(hadoop fs -cp daily_location/* month_location/),所有這些都可以在單個回圈中完成。
如果你是在S3上并且使用AWS-CLI命令,則不需要創建檔案夾,只需復制即可。
如果有太多的小檔案,你可能想在每月的檔案夾中串聯它們,如果是ORC,你可以執行ALTER TABLE PARTITION CONCATENATE。如果不是ORC,那么最好使用Hive的INSERT OVERWRITE,它將為你做這一切,你可以配置合并任務,最后你的檔案將達到最佳大小。此外,如果你添加distribute by partition_col sort by <key used in filters/joins>,你可以提高壓縮效率,并使使用Bloom過濾器和內部索引成為可能(如果是ORC/Parquet),這將大大減少表的大小,提高查詢性能。
因此,最好使用Hive來完成這項任務,因為它為你提供了改善資料存盤的機會:改變存盤格式、串聯檔案、排序以減少壓縮的大小,并使索引和Bloom過濾器真正有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318980.html
標籤:
上一篇:Hive。由于最后一個Reducer作業,行內查詢一直在執行
下一篇:如何模糊控制元件背后的背景
