hive导入数据到分区表/动态导入

首先说明,insert into tab_name (clumn1,…) values (…) 这种格式hive是不支持的
从A表中查询数据插入到B分区表中
hive> insert into table B

> partition (分区1 = '',分区2 = '')

 > select id, name

 > from A

 > where ...;

如果使用

  >insert into table B select id,name from A where ... 
  >partition (分区1 = '',分区2 = '');

会报错 :parseexception,解释是hive自己软件的问题,需要在子查询中添加别名解决问题。

动态分区:
hive > set hive.exec.dynamic.partition.mode=nonstrict;

 >set hive.exec.dynamic.partition=true;//前两步修改默认设置,支持动态分区

> insert into table B

 > partition (date,age)

 > select id, name,

 > date, age

 > from A

 > where ...;


分区表简单来说就是对一张大表根据不同的条件进行分区,加快查询速度,而分区目录中,多个字段代表着不同的层级关系,写在最前面的分区是优先级最高的。

PARTITIONED BY子句中定义列,是表中正式的列,成为分区列。但是数据文件中并没有这些值,仅代表目录。 

partition (dt='2001-01-01',country='GB'); 上传数据时,把数据分别上传到不同分区,也就是不同子目录下。

查询分区表使用where条件查询,不多做描述。


多说两句,建表的时候一定要指定字符分割方式,"\t"等,否则在导入数据后,查询会出现很多null,如果是自己创建的文件进行导入,那每一个tab键都需要手动输入,如果是复制粘贴在导入数据的时候可能会出现问题。
hql字符串的比较也可以直接用 "="。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值