蜂巢:固定日志结构和日常分析

时间:2016-02-29 15:04:56

标签: hadoop hive bigdata

我是hive的新手。我有按日期存储在文件夹中的日志:logs/2016/02/15/log-xxx.json。我想对最后一天的日志进行日常分析。我不想在最后2-3个文件夹上运行hiveQL(时区差异)。如何有效地做到这一点?

  1. 我不能告诉配置单元自动发现新日志并将它们添加为新分区,对吗?
  2. 我必须在每个查询之前创建外部表,然后删除它吗?
  3. 有没有办法告诉配置单元只在指定文件夹上运行查询而不创建任何表?

1 个答案:

答案 0 :(得分:0)

您可以根据日期创建包含分区的数据库。

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

Hive使用架构读取 - 这意味着如果稍后手动将文件添加到HDFS,它将在SELECT语句执行期间自动将它们考虑在内。 只需根据日期将它们放入适当的位置

但有一刻你应该考虑到:

  

因为声明外部表时,默认表路径是   已更改为包含in的hive元数据中的指定位置   Metastore,但关于分区,没有任何改变,所以,我们必须   手动添加这些元数据。

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

在此处阅读更多内容:http://blog.zhengdong.me/2012/02/22/hive-external-table-with-partitions/

该帖子的作者还提供了自动添加分区的脚本。