Hive外表批量添加分区

Hive外表批量添加分区,第1张

我们有一批日志数据存储在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表中:

1、hive 创建外部表

create external table t_ods_test (

uid string COMMENT '用户id',

terminal string COMMENT '终端类型',

adslotid string COMMENT '广告位id',

cid string COMMENT 'cid',

amount string COMMENT '库存量',

local string COMMENT '地域',

tags string COMMENT '标签' )

partitioned by (year string,month string,day string) row format delimited fields  terminated by '\t'

STORED AS TEXTFILE location '/user/qgw/hh/app/usertagview'

2、hive 外部表,增加分区

alter table t_ods_test add partition (year='2017', month='10', day='18') location '2017/10/18'

建表:create table T_user(id int, name string)  partitioned by  (country string ) row format  delimited fieleds terminated by ',' 

导入数据:load data local inpath 'xx/xx/xx.txt' into table T_user  partition(country = 'USA')

建表:

create table T_user(id int, name string)  partitioned by (dt string,   hour string) 

row format  delimited fieleds terminated by ',' ——指定分隔符

注:

1、创建一个表,字段之间用 \t 分隔(也可以用其他字符分割,自定义默认‘\001’);

        hive>create  table  student (id  int,  name  string) row  format  delimited  fields  terminated  by '\t'

2、将本地一个数据提交到hive里去

        hive>load data local inpath '/home/student.txt' into  table  student

      2.1 增加分区表数据

      alter table ZHIYOUBAO.CHECK_RECORD add  partition (years='xxxx',months='xx',days='xx') location                        '/ZYB/CHECK_RECORD/yy=xxxx/mm=xx/dd=xx/'

3、查询表里的数据:

        hive>select  *  from  student


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存