gpt4 book ai didi

hadoop - 如何使用 HIVE 对表进行分区?

转载 作者:可可西里 更新时间:2023-11-01 14:16:55 30 4
gpt4 key购买 nike

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

几个月来,我一直在 Hadoop 中记录 Apache 日志(Combine 格式)。它们以行文本格式存储,按日期分区(通过水槽):/日志/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 将我的日志加载到一个外部表中,我就无法对时间进行分区,因为它不是好的格式 (Feb <=> 02)。即使它的格式很好,我如何将字符串“10/02/2012:00:00:00 -0800”转换为多个目录“/2012/02/10/00”?

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

最佳答案

如果我没理解错的话,你的文件在目录 logs 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 的回答问题。

关于hadoop - 如何使用 HIVE 对表进行分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9626789/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com