首先说明,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字符串的比较也可以直接用 "="。
本文详细介绍了如何在Hive中使用SQL语句将数据从一个表插入到另一个分区表中,并讨论了静态分区与动态分区的实现方法。此外还提供了关于如何避免常见错误的建议。

被折叠的 条评论
为什么被折叠?



