【发布时间】:2015-05-25 21:12:53
【问题描述】:
我的日志文件在文件名中包含日期和小时。有没有办法从文件名中提取日期和小时以在 hive 中添加额外的列,文件的一个示例是 weblogs-20150101-010000.gz。
我知道的方法是使用仅地图作业将日期和小时顺序附加到每一行,但我正在尝试通过 hadoop 流查看是否有更简单的方法。
【问题讨论】:
标签: java hadoop hive hadoop-streaming hadoop-partitioning
我的日志文件在文件名中包含日期和小时。有没有办法从文件名中提取日期和小时以在 hive 中添加额外的列,文件的一个示例是 weblogs-20150101-010000.gz。
我知道的方法是使用仅地图作业将日期和小时顺序附加到每一行,但我正在尝试通过 hadoop 流查看是否有更简单的方法。
【问题讨论】:
标签: java hadoop hive hadoop-streaming hadoop-partitioning
如果查询性能很重要并且您将按日期/小时进行过滤,您可以通过将文件放在包含日期属性的文件夹中来partition 数据,例如/path/to/your/data/year=2015/month=05/day=25/hour=14/,然后将这些分区添加到 Hive 表中。
另一种方法是使用 Hive 的 INPUT__FILE__NAME 虚拟列并使用它进行过滤,例如
SELECT * FROM WEBLOGS WHERE INPUT__FILE__NAME LIKE '%20150101-010000.gz'
【讨论】: