【问题标题】:How can I partition a table with HIVE?如何使用 HIVE 对表进行分区?
【发布时间】:2013-08-29 03:24:55
【问题描述】:

我已经玩 Hive 几天了,但我仍然很难分区。

几个月来,我一直在 Hadoop 中记录 Apache 日志(组合格式)。它们以行文本格式存储,按日期分区(通过水槽): /logs/yyyy/mm/dd/hh/*

例子:

/logs/2012/02/10/00/Part01xx (02/10/2012 12:00 am)
/logs/2012/02/10/00/Part02xx
/logs/2012/02/10/13/Part0xxx (02/10/2012 01:00 pm)

combined log 文件中的日期遵循此格式 [10/Feb/2012:00:00:00 -0800]

如何在 Hive 中使用我的物理分区创建带有分区的外部表。我在 Hive 分区上找不到任何好的文档。我发现了相关的问题,例如:

如果我使用 Hive 将日志加载到外部表中,我无法按时间分区,因为它不是好的格式(2 月 02)。即使它的格式很好,我如何将字符串“10/02/2012:00:00:00 -0800”转换为多个目录“/2012/02/10/00”?

我最终可以使用 pig 脚本将原始日志转换为 hive 表,但此时我应该只使用 pig 而不是 hive 来进行报告。

【问题讨论】:

    标签: hadoop mapreduce hive apache-pig


    【解决方案1】:

    如果我理解正确,您在目录日志的第 4 级文件夹中有文件。在这种情况下,您将表定义为具有路径“日志”的外部表,并按 4 个虚拟字段进行分区:年、月、日_月、小时_日。

    分区基本上是由 Flume 为你完成的。

    编辑 3/9: 很多细节取决于 Flume 如何准确地写入文件。但总的来说,您的 DDL 应该如下所示:

    CREATE TABLE table_name(fields...)
    PARTITIONED BY(log_year STRING, log_month STRING, 
        log_day_of_month STRING, log_hour_of_day STRING)
    format description
    STORED AS TEXTFILE
    LOCATION '/your user path/logs';
    

    编辑 3/15: 根据 zzarbi 请求,我添加了一条注释,即在创建表后,需要通知 Hive 已创建分区。只要 Flume 或其他进程创建新分区,就需要重复执行此操作。请参阅我对Create external with Partition 问题的回答。

    【讨论】:

    • 那么我会创建表格的样子吗?我会做一个查询来使用那些分区吗?
    • 我必须测试一下,我会尽快回复你
    • Olaf 我尝试了您的解决方案pastebin.com/TkLCzWdv,但是如果我从 raw_datastore 查询 Select count(*) where year = '2012' and month = '02';它启动了一个 map/reduce 作业,但没有结果。
    • 如果不查看数据和系统设置,很难诊断出此类问题。加上回答 SO 问题并没有那么好;-) 我建议您将文件从 Flume 创建的目录之一复制到一个单独的目录中,定义一个新的未分区外部 Hive 表并确保 select count(*) 返回良好价值。之后,您就可以开始对分区进行故障排除了。
    • 其实我的问题很简单......我必须一个一个地添加我的分区......我尝试并失败了,直到我理解了正确的语法:ALTER TABLE raw_datastore ADD PARTITION (year = ' 2011', 月='05', 日='05', 小时='14') LOCATION '/logs/2011/05/05/14';如果我现在这样做,我可以选择 count(*) 并且它可以工作。因此,我将批准您的答案,但如果您可以编辑答案以添加您需要自己添加分区的事实,那就太酷了。
    猜你喜欢
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多