2016-02-29 45 views
0

我是新來蜂巢。我有按日期存儲在文件夾中的日誌:logs/2016/02/15/log-xxx.json。我想對最後一天的日誌進行日常分析。我不想在最後2-3個文件夾上運行hiveQL(時區差異)。如何有效地做到這一點?配置單元:固定的日誌結構和日常分析

  1. 我不能告訴配置單元自動發現新日誌並將它們添加爲新分區,對嗎?
  2. 我必須在每個查詢之前創建外部表並稍後刪除它嗎?
  3. 有沒有什麼辦法告訴配置單元只在指定的文件夾上運行查詢而不創建任何表?

回答

0

您可以使用基於日期的分區創建數據庫。

CREATE EXTERNAL TABLE user (
    userId BIGINT, 
    type INT, 
    level TINYINT, 
    date String 
) 
PARTITIONED BY (date String) 

蜂房使用模式上閱讀 - 這意味着如果您稍後將手動添加文件到HDFS它會自動考慮這些SELECT語句的執行過程中。 只是把它們放到正確的位置,根據日期

,但你應該考慮到一個時刻:

因爲當被聲明爲外部表,默認表的路徑是 改爲指定位置蜂巢元其中包含 metastore,但是關於分區,沒有什麼改變,所以,我們必須手動添加這些元數據 。

ALTER TABLE user ADD PARTITION(date='2010-02-22'); 

在這裏閱讀更多:該職位的http://blog.zhengdong.me/2012/02/22/hive-external-table-with-partitions/

作者還提供了腳本來自動添加分區。

+0

但文件夾結構是固定且只讀的。我不想在每次分析前複製千兆字節。我可以添加一個任意的現有目錄作爲分區嗎? – piotrek

+0

東西像 ALTER TABLE測試ADD PARTITION(dt ='2014-03-05')location/user/admin/log/2014/3/5' 應該工作 – Viktor