hive实战---动态分区
来源:互联网 发布:编程游戏软件 编辑:程序博客网 时间:2024/05/22 10:30
动态分区的含义:
当一个分区表创建之后,其分区的值是可以动态修改的(先创建分区值,再插入数据;或者是在插入数据的时候指定一个新的分区值),这两种方式都是需要手动的去指定分区值。
当分区变的非常多的时候(比如气象站的气温记录数据,根据年份分区之后,还有根据月份分区,下面可能还有根据日期分区),当要上传数据到这样的表中的时候,手动去指定分区显然是不现实的。
这个时候,就需要使用到动态分区,动态分区可以在往表中插入数据的时候,动态的根据值来选择数据进入的分区。
动态分区使用场景
假设在HDFS上已经存在一个宽表(例如,职员表,这个表的字段非常多,并且数据量也很大),我们想要根据国家和省份把这些数据放到不同的分区中,使用动态分区是十分合适的。
1.首先创建一个分区表,指定两级分区,国家和省份
create table emp(name string,age int) partitioned by (country string,state string) row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile;
2.从宽表中查询出所需要的字段加载到分区表中
insert into table emp partition(country,state) select name,age,country,state from t1;
这里就是动态分区的关键:
在指定分区的时候,不指定其值,而只是指定分区的名称,在后面的查询语句中,所查询的最后两个字段就会被对应到这两个分区上,也就是说,前面分区不指定值的话,就会到后面的查询语句中去动态的寻找值,这时可以想象,后面的查询语句的字段必须是大于等于前面的分区数;
如果动态分区创建失败,可能是检查项被设置为严格模式,严格模式下,不允许所有的分区都被动态指定,目的是为了防止生成太多的目录,此时可以通过将检查选项设置为非严格模式就可以了。
3.到HDFS上去查看生成的动态分区结构
/user/hive/warehouse/base1.db/emp/user/hive/warehouse/base1.db/emp/country=hebei/user/hive/warehouse/base1.db/emp/country=hebei/state=tangshang/user/hive/warehouse/base1.db/emp/country=hebei/state=tangshang/000000_0/user/hive/warehouse/base1.db/emp/country=wang/user/hive/warehouse/base1.db/emp/country=wang/state=wang/user/hive/warehouse/base1.db/emp/country=wang/state=wang/000000_0
源表中只有两条数据,所以只生成了两个country分区,相同的country分区下也只有一个数据,可以往源表中放入不同的数据用来测试。
4.半动态分区
所谓半动态分区就是并不是所有的分区值都是动态指定的,其中有一部分是固定值,另一部分需要在查询列中动态赋值,例如:
insert into table emp partition(country = 'US',state) select name,age,country,state from t1;
上述语句中,分区country就是一个固定的值US,state的值没有指定,而是动态赋值,半分区模式需要注意的是,动态分区必须放在最后。
- HIVE动态分区实战
- hive实战---动态分区
- Hive 动态分区 & 静态分区
- hive动态分区
- Hive动态分区
- Hive动态分区
- Hive动态分区
- Hive动态分区
- hive 动态分区
- 05-Hive动态分区
- hive动态分区
- Hive动态分区
- hive动态分区
- Hive动态分区
- hive 动态分区使用
- Hive动态分区配置
- Hive动态分区
- hive 动态分区
- Windows7 安装TensorFlow
- C++ vector用法
- 【南阳OJ 6】 喷水装置 一(贪心)
- 判断字符串是JSONObject还是JSONArray
- Javaweb项目开发学习(一)——登录界面servlet
- hive实战---动态分区
- ORA-00257归档日志写满的解决方法 背景: 在前一篇博客中我们提到了如何启动或关闭oracle的归档(ARCHIVELOG)模式,在我成功设定数据库为归档模式以后, 第二天再次尝试连接数据库,
- 欧几里德算法 & 扩展欧几里德算法
- POJ3321(dfs序+树状数组)
- string find
- Mocha ES6学习记录
- 学习笔记1
- 算法之度度熊回家
- Spring MVC简单实例,含所有代码,Mark之后可运行