关于hive中如何创建外部分区表并且自动指定相应分区?

关于hive中如何创建外部分区表并且自动指定相应分区?,第1张

直接用hive load data 把天的数据导入月分区,导入时指定分区,不用提前创建。

Syntax

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

具体可以参考官方文档,了解HIVS SQL DML *** 作:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-InsertingdataintoHiveTablesfromqueries

即需求场景应该是:按照天为目录生成了多个数据文件,但想要在HIVE中通过月来建立分区以便进行统计分析;

我们有一批日志数据存储在hdfs上,按天创建目录,如2018-07-31的日志hdfs路径为:/data/logs/gateway/20180731。

现在要用hive分析数据,同时要保证这些数据目录不能改变,就需要hive用外表的方式与这些数据进行关联。

示例:

但是,看下文件列表

一共108个待添加的目录,这样一个个添加太累人,有没有批量添加的方法呢?

Hive有个MSCK命令,可以扫描数据分区目录,修复元信息,目录与元信息不一致时,能自动更新。

但是,数据目录必须是Hive习惯路径格式:

同时,建表时指定LOCATION为分区目录的父目录:

这时,用命令

即可自动把所有的数据按dt分区,添加到gateway_analysis中。

由于我们的目录格式不符合,只能用ADD PARTITION的方式了。

为减少工作量,写了个shell脚本,自动添加 /data/logs/gateway 目录下所有的分区目录到gateway_analysis表中:

Hive只能每15分钟到1小时添加。

许多用户都有ApacheFlume、ApacheStorm或ApacheKafka这样的工具,他们使用这些工具将数据流传输到Hadoop集群中。虽然这些工具可以以每秒数百行或更多行的速度写入数据,但Hive只能每15分钟到1小时添加一次分区。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11871581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存