2013-04-10 50 views
2

我在配置單元中有兩個表,這兩個表都由表示時間戳的字符串分區(我使用的是字符串而不是時間戳,因爲我在Cloudera Impala中使用的表不支持表按時間戳分區)。在配置單元中動態刪除分區

這些表格用於存儲特定時間片中的大量數據。 第一個表包含更高時間粒度的最新數據,比如說1分鐘時間片和第二個較低粒度的較舊數據,這裏說1小時時間片。

因此,我有一個查詢,總結比1分鐘時間片的特定時間量早的數據,以便我有1小時時間片的數據並將其插入到我的表中1小時時間片。

創建1小時時間片後,我想要刪除新1小時時間片中包含的所有1分鐘時間片。而且由於表格是用我的代表時間的字符串分區的,所以我可以刪除相應的分區。

知道我的實際問題:

是否有可能在蜂巢下降分區不知何故像

ALTER TABLE oneMinSlices DROP IF EXISTS PARTITION(time < 'YYYY-MM-DD HH:MM:SS') 

在此先感謝您的幫助。

ps:如果你想知道爲什麼我這樣做:數據是連續增長的,如果我們不刪除1分鐘的時間片,那麼包含它們的表格變得極端大,導致我們的查詢速度變慢並需要很大的空間。

回答

1

你必須爲此編寫一個shell腳本。

在.hql文件寫入

下面查詢

ALTER TABLE oneMinSlices DROP IF EXISTS PARTITION(time = '${hiveconf:timestamp}') 

現在通過分區作爲動態命令行參數。

hive -hiveconf timestamp=2013-04-22\ 05:12:20 -f hqlfilepath.hql 

最後一步是從shell中動態獲取時間戳。

運行上面的命令,直到滿足條件。