hive 增加表字段语录_Hive改表结构的两个坑|避坑指南
Hive在大数据中可能是数据工程师使用的最多的组件,常见的数据仓库一般都是基于Hive搭建的,在使用Hive时候,遇到了两个奇怪的现象,今天给大家聊一下,以后遇到此类问题知道如何避坑!
坑一:改变字段类型后更新数据不成功
关于hive插入数据的一个小坑,今天插入一个表中数据,插入时写的是常数,比如0.01 ,表中的字段也是DECIMAL(5,2),按照常理插入的应该是0.01,但是插入后查询是0,为甚!
遇到问题,咱也不能退缩!就分析呀,看语句没问题啊!还是上网查查有没有坑友。查了一圈发现还是观望最靠谱!上hive官网查,呀~ 发现了原因!
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-Decimals
根据官网描述,发现在插入分区表时会出现这种情况,此时需要对之前的分区处理下~:
那就测试一下 按照官网的说法:
先建表:
CREATE TABLE `tb_dw_test`( `a` int COMMENT '微信服务量')PARTITIONED BY ( `statis_date` varchar(8))ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' ;
然后插入数据:
insert overwrite table tb_dw_test partition (statis_date=20160501) values(1.02);
然后查询:
hive> select * from tb_dw_test;OK1 20160501
发现结果跟想象中的一样~
然后修改表字段:
ALTER TABLE tb_dw_test REPLACE COLUMNS (a DECIMAL(5,2))
然后再次插入数据:
insert overwrite table tb_dw_test partition (statis_date=20160501) values(1.02);
查询:
hive> select * from tb_dw_test;OK1 20160501
发现有问题啦!
那么按照官网处理:
Determine what precision/scale you would like to set for the decimal column in the table. For each decimal column in the table, update the column definition to the desired precision/scale using the ALTER TABLE command:
ALTER TABLE foo CHANGE COLUMN dec_column_name dec_column_name DECIMAL(38,18);
If the table is a partitioned table, then find the list of partitions for the table:If the table is not a partitioned table, then you are done. If the table has partitions, then go on to step 3
SHOW PARTITIONS foo; ds=2008-04-08/hr=11ds=2008-04-08/hr=12...
This can be done with a single ALTER TABLE CHANGE COLUMN by using dynamic partitioning (available for ALTER TABLE CHANGE COLUMN in Hive 0.14 or later, with HIVE-8411):Each existing partition in the table must also have its DECIMAL column changed to add the desired precision/scale.
SET hive.exec.dynamic.partition = true; -- hive.exec.dynamic.partition needs to be set to true to enable dynamic partitioning with ALTER PARTITION-- This will alter all existing partitions of the table - be sure you know what you are doing!ALTER TABLE foo PARTITION (ds, hr) CHANGE COLUMN dec_column_name dec_column_name DECIMAL(38,18);
所以参照官网,这里对表作如下处理:
ALTER TABLE tb_dw_test PARTITION (statis_date) CHANGE COLUMN a a DECIMAL(5,2);
再次插入数据:
insert overwrite table tb_dw_test partition (statis_date=20160501) values(1.02);
然后查询:
hive> select * from tb_dw_test;OK1.02 20160501Time taken: 0.066 seconds, Fetched: 1 row(s)
发现结果跟想象中的一样了。这个坑算是过去了~
坑二:增加字段后更新数据不成功
还是上面的例子那张表,再增加一个字段:
alter table tb_dw_test add COLUMNS (b varchar(5))
然后查询
hive> select * from tb_dw_test;OK1.02 NULL 20160501Time taken: 0.082 seconds, Fetched: 1 row(s)
发现新增的字段默认的值是NULL,现在我重新覆盖一下元数据,给增加的字段一个值:
insert overwrite table tb_dw_test partition(statis_date=20160501) values (2.01,0371);
然后查询:
hive> select * from tb_dw_test;OK2.01 NULL 20160501
不是我们想象的结果,查看一下官方文档说明发现了问题的所在:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Add/ReplaceColumns
靠谱的官网用红色框框提示我们!那就这样处理:
alter table tb_dw_test replace COLUMNS (a decimal(5,2),b varchar(5)) CASCADE;
直接查询,发现数据显示的数据已经发生了变化了~
hive> select * from tb_dw_etst;OK2.01 0371 20160501
避坑指南
官方文档!!官方文档!!官方文档!!
综上发现,我们是按照Oracle这样的标准在考虑HiveSQL,但是通过阅读官方文档发现二者之间还是有很大不同的,底层原理差别还是有点大!通过这两次踩坑发现,仔细阅读官方文档的重要性!!!
所以,以后大家遇到大数据开源组件的报错问题,第一就是去找官方文档,然后就去找社区,总能发现惊喜!
历史好文推荐
数据挖掘(一):线性回归和逻辑回归
数据挖掘(二):决策树
数据挖掘(三):朴素贝叶斯
数据挖掘(四):手撕(绘)关联规则挖掘算法
数据挖掘(五)seaborn 的数据可视化
数据挖掘(六):K-means 聚类
数据挖掘(七):TensorFlow和keras实现线性回归LinearRegression
hive 增加表字段语录_Hive改表结构的两个坑|避坑指南相关推荐
- oracle表字段获取,获取oracle表结构的字段信息
获取oracle表结构的字段信息 select a.column_id as 列号, a.column_name as 列名, a.data_type as 类型, decode(a.data_typ ...
- sqlserver增加表字段 给report_smart这个表增加a50 a51 a52‘‘‘‘ a59几个字段
declare @i int; declare @a varchar(10); set @i =50; while(@i<60) begin set @a = 'a'+cast(@i as va ...
- hive改表结构的两个坑
坑一:改变字段类型后更新数据不成功 关于Hive插入数据的一个小坑,今天插入一个表中数据,插入时写的是常数,比如0.01 ,表中的字段也是DECIMAL(5,2) 按照常理插入的应该是0.01,但 ...
- oralce 增加表字段命令|oralce 增加表字段类型命令
oralce 增加表字段命令 语法 alter table 表明 add 字段名 类型 alter table aqcuser add email varchar(36) 转载于:https://ww ...
- hadoop元数据mysql中表字段_Hive 元数据表结构详解
元数据是基础,这篇文章值得一读. 本文介绍Hive元数据库中一些重要的表结构及用途,方便Impala.SparkSQL.Hive等组件访问元数据库的理解. 1.存储Hive版本的元数据表(VERSIO ...
- 数据库表(字段类型、约束、截断表、修改表字段、重命名表)
字段类型: 在这里只列举一些常用的字段类型: 整数类型:int(Integer):普通大小的整数 小数类型: float(m,d):单精度浮点数,m表示数字长度,d表示小数位数,例如float(5,2 ...
- hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据
上一篇说的是外部表,当把EXTERNAL关键字去掉的时候就是内部表了.为什么叫内部表,因为这种表,Hive会(或多或少地)控制着数据的生命周期. 如果你熟悉Hive那你一定知道,Hive默认情况下会将 ...
- oracle 建表字段设置,Oracle创建表、删除表、修改表(添加字段、修改字段、删除字段)语句总结...
关于Oracle创建表.删除表.修改表(添加字段.修改字段.删除字段)语句的简短总结. Oracle创建表: create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字 ...
- oracle修改表字段约束条件,Oracle创建表、修改表、删除表、约束条件语法
三.删除表 truncate table 表名 //删除表中的所有数据,速度比delete快很多,截断表 delete from table 条件 // 删除表中的数据 drop table 表名 ...
最新文章
- mysql的natural join_MySQL基础之Natural Join用法
- 置信区间估计 预测区间估计_估计,预测和预测
- 轻量化网络MobileNet解析
- 操作系统—多生产者多消费者问题
- “迷失自我”,请记住下面5个网站,让你受益终身
- 安装ie9提示未能完成安装_ie11/ie10/ie9安装程序无法验证安装文件
- 今天开始写博客记录程序媛成长过程
- 图像处理在医学方面的应用
- java方法的通用格式,【学习笔记】使用Java读取、写入Excel全版本(包含xls、xslx格式)通用方法及代码展示(POI)...
- mysql动态ip域名连接_用本地动态IP连接本地mysql
- linux intel wifi驱动,ubuntu 8.04下面 Intel WIFI link 5100无线网卡驱动安装
- RuntimeWarning: Mean of empty slice
- python自动化运维:python环境的安装
- rman怎么恢复数据文件
- Red Hat Enterprise Linux Server 7.4 安装方法
- HttpClient 实现 socks 代理
- 计算几何-求球冠体积
- 华为三层交换机 配置
- Qt 绝对要收藏的网站QTCN Qt绘图工具
- 工业防火墙架构与技术【第一节:概述】
热门文章
- Python花式编程案例集锦(8):判断吉祥数字
- 在python中设置密码登录_在python中生成密码
- C++ 你想要的C++面经都在这(附答案 | 持续更新)
- 我们用计算机做什么大餐英语怎么说,感恩用英语怎么说
- 华为鸿蒙系统英语报纸_华为鸿蒙英文不是Hongmeng OS?余承东解释
- kettlejava脚本的api_[翻译]KETTLE JAVA API :编程定制自己的Kettle转换(transformation)...
- java digests.generatesalt_Java DigestUtils.sha1Hex方法代碼示例
- C++之new和delete探究
- python alter_GitHub - sealter/LearnPython: 以撸代码的形式学习Python
- git安装 tor_Tortoisegit图文使用教程