2016-02-29 65 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