【问题标题】:Filename as columns - hadoop文件名作为列 - hadoop
【发布时间】:2015-05-25 21:12:53
【问题描述】:

我的日志文件在文件名中包含日期和小时。有没有办法从文件名中提取日期和小时以在 hive 中添加额外的列,文件的一个示例是 weblogs-20150101-010000.gz。

我知道的方法是使用仅地图作业将日期和小时顺序附加到每一行,但我正在尝试通过 hadoop 流查看是否有更简单的方法。

【问题讨论】:

    标签: java hadoop hive hadoop-streaming hadoop-partitioning


    【解决方案1】:

    如果查询性能很重要并且您将按日期/小时进行过滤,您可以通过将文件放在包含日期属性的文件夹中来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'
    

    【讨论】:

    • 嗨,亚历克斯,感谢您的评论。我拥有的文件数量接近 10,000 个。有没有简单的方法将它们排列到文件夹中?
    • 您可以编写脚本将它们复制到相应的文件夹中。也许其他人有更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2012-08-27
    • 2012-09-30
    • 2013-12-10
    相关资源
    最近更新 更多