zoukankan      html  css  js  c++  java
  • hive小tips(各种解析)

    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格式的属性值

    单个值:

    json object:

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

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

    jsonArray(json数组):

    Select get_json_object(xjson,"$.[0].age")  --获取数组第1个条记录  (测试下这个:get_json_object(xjson,'$[0].age'))

    [{"id":"0","name":"13","d":"","age":"13","weight":"32.3","high":"32.3"},{"id":"1","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('湖北省,   阳新县,      东方明珠',' | |`|\||','') 

    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

  • 相关阅读:
    Lambert 光照模型
    向前兼容和向后兼容
    eclipse如何设置时常挂提示
    eclipse首次使用的基本设置
    eclipse如何设置UTF-8
    CSS中 清除浮动解决“包含问题”
    CSS一些设置用法
    浅谈CSS布局
    No.4小白的HTML+CSS心得篇
    No.3小白的HTML+CSS心得篇
  • 原文地址:https://www.cnblogs.com/xunyingFree/p/9541947.html
Copyright © 2011-2022 走看看