博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hive小tips(各种解析)
阅读量:4948 次
发布时间:2019-06-11

本文共 2065 字,大约阅读时间需要 6 分钟。

1.hive查询中sum数据精度丢失问题

公司大数据组把线上数据库表的类型简单粗暴的设置为string类型了,而我们在hive上做算数运算时出现精度丢失现象。

处理方案:使用cast(table.column_name as decimal(38,2)) 将string类型转换成decimal(38,2)为保留两位小数。

 

2.hive正则表达式regexp_extract 

下面这个链接比价详细了

https://blog.csdn.net/jv_rookie/article/details/55211955

我再根据我的数据举一个实例:

如字段exts={id=11,name=xunying,type=1,flag=0}

我们要截取id字段:

regexp_extract(exts,'id([^,]+),',1)

返回结果:11

3.hive 取json格式的属性值

Select  get_json_object(attrs, '$.d') as attr_d, 

{"id":"0","name":"13","d":"","age":"13","weight":"32.3","high":"32.3"}

 3-1 hive中表结构为Map类型

表中数据类型:map<string,string>

数据样例:{"id":"0","name":"13","d":"","age":"13","weight":"32.3","high":"32.3"}

解析:select  attrs['name']  from

3-2 hive中表结构为String类型

表中数据类型:string

数据样例:{"id":"0","name":"13","d":"","age":"13","weight":"32.3","high":"32.3"}

解析:(解析了两个)

select a*,b.id,b.name   from table1 a lateral view json_tuple(a.attrs,'id','name') b as id,name

或者正则方法

 3-3 hive中表结构为Struct类型

表中数据类型:struct<id:string,weight:double>

数据样例:{"id":"0","weight":"32.3"}

解析:select  attrs.weight  from

4.hive选取一些连续的某些字段

LAG:

LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值

第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

LEAD:

与LAG相反

LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值
第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)

FIRST_VALUE

取分组内排序后,截止到当前行,第一个值

LAST_VALUE

取分组内排序后,截止到当前行,最后一个值(和lead有区别)

5.正则匹配REGEXP_REPLACE

REGEXP_REPLACE(source_string, pattern[, replace_string [, position[,occurrence, [match_parameter]]]])

 eg:REGEXP_REPLACE('ksjdhk23ekfdskj4334','[^a-z]' ,'')   -------ksjdhkekfdskj   只保留字符

REGEXP_REPLACE('ksjdhk23ekfdskj4334','[^0-9]' ,'') ----------234334 只保留数字

regexp_replace('湖北省,   阳新县,      东方明珠','\n|\r|`|\\||','') 

6.trunc()函数用法处理日期、数字类型数据

一、日期

TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:date 一个日期值
      fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去

二、数字

TRUNC(number,num_digits)
Number 需要截尾取整的数字。
Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
TRUNC()函数截取时不进行四舍五入

7 Array类型数据

访问arr[index]

行转多列:select table1 .B from table1 a1 LATERAL VIEW explode(service_prod_code)  table1 as B

转载于:https://www.cnblogs.com/xunyingFree/p/9541947.html

你可能感兴趣的文章
关于渲染引擎设计,Scene Management的文章
查看>>
oracle 使用leading, use_nl, rownum调优
查看>>
客户数据库出现大量cache buffer chains latch
查看>>
Linux文件权限
查看>>
機械の総合病院 [MISSION LEVEL: C]
查看>>
Delphi通用的序列化代码
查看>>
Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays 二分
查看>>
设计模式:职责链模式(Chain Of Responsibility)
查看>>
stm32f429i disc usb cdc vcp 虚拟串口 example project (CubeMX Hal)
查看>>
Robust PCA via Outlier Pursuit
查看>>
实战练习细节(分行/拼接字符串/字符串转int/weak和copy)
查看>>
wddm 部署问题解决
查看>>
Strict Standards: Only variables should be passed by reference
查看>>
Slab-based Intersection
查看>>
将输入流转为字符串工具类
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
高斯消元
查看>>
AngularJs表单验证
查看>>
regasm.exe 注册dll
查看>>
什么是死锁,简述死锁发生的四个必要条件,如何避免与预防死锁
查看>>