hive分区表分为静态表和动态表,静态表就是插入数据时指定分区,动态分区不用指定分区,根据数据动态的写入不同的分区。关于动态分区表的建立也比较特殊。下面举一个例子,阐述动态分区表的创建。
- 首先在hive shell中设置开启动态分区功能
set hive.exec.dynamic.partition =true;
set hive.exec.dynamic.partition.mode=nonstrict;
- 创建动态分区表
CREATE TABLE `event_car_pass_partition`(
`xxzjbh` string COMMENT '信息主键编号',
`jdchp` string COMMENT '机动车号牌号码',
`jcsd` string COMMENT '检测速度',
`sbbh` string COMMENT '视频设备编码',
`tdmc` string COMMENT '通道名称',
`ztrq` string COMMENT '抓图日期',
`zgxzsd` string COMMENT '最高限制速度',
`zdxzsd` string COMMENT '最低限制速度',
`sbjwd` string COMMENT '视频设备经纬度',
`xxrksj` string COMMENT '入库时间',
`sjgsdwdm` string COMMENT '数据归属单位代码',
`sjgsdwnc` string COMMENT '数据归属单位名称',
`gctp` string)
COMMENT '卡口过车事件数据'
partitioned by (cdbh string comment '车道编号');
其中cdbh是分区字段,不用再表中显示的定义分区字段,只用在partition中定义分区字段,表schema生成后,分区字段会自动变为表的字段之一。
- 插入数据到分区表
insert overwrite table event_car_pass_partition partition(cdbh) select
`xxzjbh`,
`jdchp`,
`jcsd`,
`sbbh`,
`tdmc`,
`ztrq`,
`zgxzsd`,
`zdxzsd`,
`sbjwd`,
`xxrksj`,
`sjgsdwdm`,
`sjgsdwnc`,
`gctp`,
`cdbh`
from event_car_pass;
使用已经存在的表数据来插入分区表,select 后面需要显示的指定字段,不能使用*,否则插入的数据会存在问题,不会按照数据来分区。
版权声明:本文为u012601009原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。