2021-01-20 hive-分区字段操作+double 转int

本文介绍了Hive中如何进行分区操作以及如何将Double类型数据转换为Int类型。通过创建分区表并使用INSERT OVERWRITE语句插入数据,实现了数据的便捷管理。在处理特定需求时,通过截取字符串并利用cast函数转换类型解决了Double到Int的转换问题,避免了小数点的出现。这种方法在大数据处理中具有实用性。
摘要由CSDN通过智能技术生成

hive 分区简单操作 + double 转int

目录

1、分区

2、double 转int


大数据难免要进行分区,这样可以方便针对性处理。

个人工作经历:我们将数据抽到hive后,会根据抽数日期对其进行分区,在建表时候就会添加分区字段

1、分区

create table if not exists 表名(
字段名 类型 comment'字段注释',
name string comment'姓名'
)
comment '表注释'
partitioned by (pt string) --分区字段 pt  类型string
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS orc     --格式

那么在导入数据的时候就会对一张表的指定分区插入数据

insert overwrite table 表名 partition(pt='${pt}')  --待插入表
select 
 字段名
,name
from 表名  --数据源表

分区的作用相当于加了一个pt字段,方便增量抽取、后期补数、指定分析等,优点很多的。

2、double 转int   类型转换函数 cast(字段,目标类型)

分区有这么多的优点,与之带来的便捷和承担的责任有关,后期实际操作中遇到会持续跟新;下面描述一个需求+解决办法

 产生需求的原因是新年的第一个月,需求部门会统计一些去年十二月数据录入源数据库并且这种操作不可避免,但是我们现有的补数任务是当天凌晨补前一天的数据,例如2021年1月1日会补2020年12月31日的数据,以此类推,所以这也导致在补数的时间后,对2020年12月31日添加的新数据就无法继续录入。所以我们将对牵扯的任务在每年的一月份对去年12月31日进行补数。

将需求归纳后,就是对上图导入的分区字段进行处理,对应关系

字段原始数据(string)需求字段(string)
pt2021010220201231
pt2021010320201231

 

思路:截取pt前四个字符获取当前年--a,a减去1得到去年--b,将b与1231拼接得需求字段,上测试代码

SELECT DISTINCT pt,concat(substr(pt,1,4)-1,1231)  from 表名;--测试用的都是真实表,所以就把表名隐藏了

           

相信大家也看到了异常,substr(pt,1,4)-1   直接加减已经将结果变成了double类型,这种情况在实际开发中很常见,这时候就需要借助类型转换函数cast()将小数给去掉

SELECT DISTINCT pt,concat(cast(substr(pt,1,4)-1 as int),1231)  from 表名;--可不要直接转string那样无法去掉小数点,换成术语讲就是将浮点型转换成整型就可去掉小数点
--cast(字段,数据类型)  将字段转换成后边的类型

          

这样就可实现我们想要的操作了,当然我们可以用时间函数来操作,但是对于这种是字符串的,来回转换比较耗费时间,上面的操作,简单粗暴硬道理!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值