场景描述:

公司埋点项目,数据从接口服务写入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'='',

'parquet.compression'='SNAPPY',

'transient_lastDdlTime'='')

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'='',

'parquet.compression'='SNAPPY',

'transient_lastDdlTime'='')

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表中增加字段后,向分区表中写入数据(包含新增字段),查询分区表数据发现新增字段值均为“NULL”!

原因分析:表结构新增字段与创建分区表的顺序不同,导致查询结果不同

1.创建分区在修改表结构之后(能获取新增字段值)

2.创建分区在修改表结构之前(不能获取新增字段值)

对于第二种情况,因为分区表在修改表结构之前已经存在,所有在修改表结构的时候,新增字段并没有被加到分区表中。

而第一种情况在创建分区表的时候,直接使用了最新的表结构,所有分区表中包含所有的字段。

解决办法:

对应第二种情况,在执行完修改表结构语句 alter table table_name add columns(column_name string)后,接着需要执行

语句 alter table table_name partition(partition_name='分区值') add columns(column_name string); 【假设分区表名‘分区值’】

Sql动态添加字段的正确姿势

如何给指定表动态添加字段? 一.创建一张表[Tbl_AutoFileds] (tableName表名,fieldName字段名,dataType数据类型,length长度  isnull 是否允许为n ...

关于boostrapValidator动态添加字段(addField)验证的bug

每次码博客,都觉得自己怀才不遇,哎~脑袋有瑕疵,文笔拿不粗手,就直接上干货吧. 在使用boostrapValidator这个验证插件的时候,如果某一个字段是动态添加来的,我们需要调用方法:addFie ...

Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作

一.Hive分区表新增字段 参考博客:https://blog.csdn.net/yeweiouyang/article/details/44851459 二.Hive修改表名,列名,列注释,表注释, ...

Hive分区表创建,增加及删除

1.创建Hive分区表,按字段分区 CREATE TABLE test1 ( id bigint , create_time timestamp , user_id string) partition ...

【解决】hive动态添加partitions不能超过100的问题

Author: kwu [解决]hive动态添加partitions不能超过100的问题,全量动态生成partitions超过100会出现例如以下异常: The maximum number of d ...

Hadoop: the definitive guide 第三版 拾遗 第十二章 之Hive分区表、桶

Hive分区表 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念.分区表指的是在创建表时指 ...

Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)

首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...

Hive的动态分区

关系型数据库(如Oracle)中,对分区表Insert数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive中也提供了类似的机制,即动态分区(Dynamic Partition), ...

Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...

随机推荐

windows系统时间(SYSTEMTIME)

GetSystemTime函数获得当前的UTC时间,GetLocalTime获得当前的本地时间 UTC是协调世界时(Universal Time Coordinated)英文缩写,是由国际无线电咨询委 ...

css+div解决文字溢出控制显示字数

一.一般的文字截断(适用于内联与块):  Example Source Code [www.mb5u.com] .text-overflow {display:block;/*内联对象需加*/widt ...

JavaWeb 学习005-4个页面,5条sql语句(添加、查看、修改、删除)

今天完成了的事: = 1.班级模块,list页面的添加班级信息操作,中文乱码问题 尚待解决 这俩天做得工作是: 首先搭建好main页面:是由top.left.right三个部分构成的,拼接到一起. 流 ...

UnWind Segue

iOS 6 和 Xcode 4.5 中添加了一个新特性叫做“Unwind Segue”. 使用Unwind Segue,可以方便的在Navigation Controller的Controllers之 ...

treecnt

treecnt  ﹡    LH (命题人)   基准时间限制:1 秒 空间限制:131072 KB 分值: 40 给定一棵n个节点的树,从1到n标号.选择k个点,你需要选择一些边使得这k个点通过选择 ...

Java设计模式总汇二(小白也要飞)

PS:上一篇我介绍了适配器设计模式.单例设计模式.静态代理设计模式.简单工厂设计模式,如果没有看过第一篇的小火鸡可以点这个看看http://www.cnblogs.com/cmusketeer/p/8 ...

Python爬取指定重量的快递价格

目录 一.获取查询接口 二.获取相关数据 三.编写爬虫脚本 四.查看查询效果 背景:现在这个时代,快递横飞.我们想寄一个快递,给出的选择也是多种多样的(根据快递的大小.送达的时间.寄送的距离及价格.公 ...

iptables防火墙设置

ubuntu系统: apt-get install iptables #如果默认没有安装,请运行此命令安装防火墙 # whereis iptables #查看系统是否安装防火墙可以看到:iptable ...

foreach 引发的值类型与引用类型思考

用都知道的一句话概括:“引用类型在堆上,栈上只保存引用:值类型即可存放于栈上也可存放于堆上,值类型变量直接存储值本身”. class Program { static void Main(string ...

分布式爬虫之elasticsearch基础6(bluk)

上篇文章介绍了在es里面批量读取数据的方法mget,本篇我们来看下关于批量写入的方法bulk. bulk api可以在单个请求中一次执行多个索引或者删除操作,使用这种方式可以极大的提升索引性能. bu ...

hive 添加字段_Hive分区表动态添加字段相关推荐

  1. js动态添加样式和jQuery动态添加样式

    0.style方式添加样式 DOM对象.style.color = 'red'DOM对象.style.display = 'block/none' //让元素显示/隐藏 1.js动态添加样式 1.添加 ...

  2. php动态添加div,jq如何动态添加动态css样式

    jq动态添加动态css样式的方法:首先准备jquery库文件,并声明一个class样式:然后准备一个事件加载初始化的方法,并直接用匿名函数:接着addClass方法给div元素添加class:最后通过 ...

  3. neo4j 添加属性_Neo4j:动态添加属性/设置动态属性

    neo4j 添加属性 我一直在研究一个具有英国国家铁路时刻表的数据集,它们以文本格式为您提供每列火车的出发和到达时间. 例如,可以这样创建代表停止的节点: CREATE (stop:Stop {arr ...

  4. python 给类添加属性_python – 如何动态添加属性到类中?

    我想我应该扩大这个答案,现在我年纪大了,更聪明,知道发生了什么.迟到总比不到好. 您可以动态地向类添加属性.但是这是catch:你必须将它添加到类. >>> class Foo(ob ...

  5. android relativelayout动态添加视图,android RelativeLayout 动态添加子View

    在很多时候xml里面的布局并不能满足我们的需求.这时候就需要用代码进行动态布局,前些天在对RelativeLayout 进行动态布局时遇到了些问题,现在解决了,分享下. 我现在在RelativeLay ...

  6. android 在指定位置添加布局,Android 如何动态添加 View 并显示在指定位置。

    引子 最近,在做产品的需求的时候,遇到 PM 要求在某个按钮上添加一个新手引导动画,引导用户去点击.作为 RD,我哗啦啦的就写好相关逻辑了.自测完成后,提测,PM Review 效果. 看完后,PM ...

  7. layui 动态添加 表格数据

    静态表格: <table class="layui-table" id="table" lay-filter="table">& ...

  8. java 动态加载ztree_JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建...

    1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...

  9. JS 数组动态添加键值对

    // 方法 // 数组.push({[动态添加的键]:动态添加的值this.form.colors.push({['value']:this.inputValue})//一次传两个键值对arr.pus ...

  10. Krpano全景:在javascript中动态添加/删除/修改(位置)热点(向后端写入)

    目录 接下来看在JS中的方法: 1.手动添加热点(点击图上添加点) 2.查找热点 3.修改热点 4.删除热点 其他方法 作为管理员,在管理全景时会涉及到各个标签的操作,本篇文章介绍在JS中对热点的操作 ...

最新文章

  1. 这所985大学宣布调查结果:抄袭事实成立!撤销其硕士学位!
  2. 关于SDC沙盒源代码加密
  3. 收集常用的正则表达式
  4. ubuntu下搭建android开发环境(转载)
  5. 【Python】Python3编码规范
  6. java 遍历所有内部类_JAVA-内部类
  7. thinkphp5 open_basedir 补充
  8. linux通过网关挂在nfs,NFS 网络文件系统挂载在A8板子上
  9. AlphaGo Zero你也来造一只,PyTorch实现五脏俱全| 附代码
  10. php中的全局变量$GLOBALS与global的区别
  11. 。。。。看毛片算法_(:з」∠)_ /FZU - 2275
  12. BT文件分享服务器,bt是什么意思服务(bt资源库)
  13. 微软网盘SkyDrive简单一步获取mp3外链的方法
  14. Tensorflow2中load_weights的一些研究
  15. php生成云图,教程:用Python生成词云图
  16. 高效线性氮化镓射频功放芯片模组研究
  17. app测试之--安卓手机安装测试包
  18. 微信小程序商城搭建二手交易网站购物+后台管理系统|前后分离VUE.js
  19. Selenium 之订制启动Chrome的选项(Options)
  20. The class file xxx contains a signature 'xxx;' ill-formed at position 6 问题的解决

热门文章

  1. 今日头条 h5 源码 php,今日头条H5移动端APP页面
  2. JQuery版本下载链接
  3. What is Dymola?---Dymola的特点和架构
  4. JavaScript基础之语法
  5. Magisk 安装说明
  6. 求教务排课系统(eclipes和MSQL)!
  7. TextCNN(文本分类)
  8. linux 搭建FTP服务器
  9. 3dmax2020通道图怎么渲染
  10. 激光打标程序 c语言,激光打标机 - 20160516labview - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...