码迷,mamicode.com
首页 > 其他好文 > 详细

Hive分区表动态添加字段

时间:2018-03-02 22:17:48      阅读:906      评论:0      收藏:0      [点我收藏+]

标签:create   for   orm   login   cat   body   必须   odi   mapr   

场景描述

  公司埋点项目,数据从接口服务写入kafka集群kafka集群消费写入HDFS文件系统,最后通过Hive进行查询输出。这其中存在一个问题就是:埋点接口中的数据字段是变化,后续会有少量字段添加进来。这导Hive表结构也需要跟着变化,否则无法通过Hive查询到最新添加字段的数据。

 

解决办法

  为数据表添加字段,字段必须添加到已有字段的最后面。因为已经存在的数据是按照之前的表结构写入到HDFS文件中的,当添加新字段为了能兼容前面已经存在的数据。在新增的字段加到分区表后,之前已经存在分区表中的数据会为这些新增的字段赋予默认值NULL。

具体操作

hive> show databases; //查询当前所有数据库
OK
db_hive_test
default
Time taken: 0.014 seconds, Fetched: 2 row(s)

Hive> use default;

hive> show create table bp_rec_session; //显示表结构及相关配置信息
OK
CREATE TABLE `bp_rec_session`(
  `appversion` string, 
  ……
  `cpucs` string)
PARTITIONED BY ( 
  `idate` string)
ROW FORMAT SERDE 
  org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe 
STORED AS INPUTFORMAT 
  org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat 
OUTPUTFORMAT 
  org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
LOCATION
  hdfs://x.x.x.x:9000/bp/rec_session
TBLPROPERTIES (
  last_modified_by=os, 
  last_modified_time=1519977809, 
  parquet.compression=SNAPPY, 
  transient_lastDdlTime=1519977809)
Time taken: 0.024 seconds, Fetched: 65 row(s)

hive> alter table bp_rec_session add columns(language string, loginType string); //为分区表添加language和loginType字段

hive> show create table bp_rec_session; //查看修改后的表结构
OK
CREATE TABLE `bp_rec_session`(
  `appversion` string, 
   …… 
  `cpucs` string, 
  `language` string, 
  `logintype` string)
PARTITIONED BY ( 
  `idate` string)
ROW FORMAT SERDE 
  org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe 
STORED AS INPUTFORMAT 
  org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat 
OUTPUTFORMAT 
  org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
LOCATION
  hdfs://x.x.x.x:9000/bp/rec_session
TBLPROPERTIES (
  last_modified_by=os, 
  last_modified_time=1519977809, 
  parquet.compression=SNAPPY, 
  transient_lastDdlTime=1519977809)

hive> select * from bp_rec_session limit 1; //查询表数据,检验对表结构修改后是否还能查询已经存在的数据
OK
7.2    …… Y0MDY2OA=e5d3=    8    NULL    NULL    20180105
Time taken: 0.139 seconds, Fetched: 1 row(s)

上述查询结果中的两个"NULL"即为后面添加字段赋予的默认值!

 

Hive分区表动态添加字段

标签:create   for   orm   login   cat   body   必须   odi   mapr   

原文地址:https://www.cnblogs.com/congzhong/p/8494991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!