hiveSql冷门但好用函数 --持续更新
创始人
2024-03-04 02:09:56

hiveSql常用函数

    • 字符串函数
      • to_json
      • json_tuple
      • translate
    • 日期函数
      • next_day

字符串函数

to_json

  • 将STRUCT类型的数据转化为json格式字符串,此处需要另外学习一个named_struct()函数:自定义结构化数据的KV
  • named_struct(k1,v1,k2,v2…)
  • 示例:
select named_struct("name","csdn","addr","beijing","age",12)
  • 结果
    在这里插入图片描述
  • to_json(结构化参数)
  • 示例
select to_json(named_struct("name","csdn","addr","beijing","age",12))
  • 结果
    在这里插入图片描述
  • 注意
    1、需要注意的是,当结构化数据K-V中Value有null值时,有null值的K-V对在to_json中丢失
    在这里插入图片描述
    2、当结构化数据K-V中Key有null值时,named_struct函数报错
    在这里插入图片描述

json_tuple

上面说了如何生成json数据,接下来学习一个解析使用json数据的函数,例如遇到json数据中有多对kv值,想取出每个key,你还在写多个
select get_json_object(json_str,$.key1) as v1, get_json_object(json_str,$.key2) as v2
这样吗?漏漏漏!快使用json_tuple()函数,非常的哇塞!

  • 作用:快速解析出json中多个key值
  • 语法:json_tuple(json格式字符串, key1, key2, key3…)
  • 示例:
select json_tuple('{"name":"i_mycode","age":18,"addr":"beijing"}','name','age','addr') 

在这里插入图片描述

  • 与lateral view配合使用:
with tmp as (select 'test' as flag, '{"name":"i_mycode","age":18,"addr":"beijing"}' as json_str union all select 'test1' as flag, '{"name":"i_mycode1","age":181,"addr":"beijing1"}' as json_str 
)
select a.*,b.* from tmp a 
lateral view json_tuple(json_str,'name','age','addr') b as name, age, addr;
  • 结果:
    在这里插入图片描述
  • 注意:
    区别于explode()、posexplode()函数,不会与原字段产生笛卡尔积效果
with tmp as (select 'test' as flag, '{"name":"i_mycode","age":18,"addr":"beijing"}' as json_str union all select 'test1' as flag, '{"name":"i_mycode1","age":181,"addr":"beijing1"}' as json_str 
)
select a.*,b.*,c.* from tmp a 
lateral view json_tuple(json_str,'name','age','addr') b as name, age, addr
lateral view posexplode(split(json_str,',')) c as num,json_s;

在这里插入图片描述

translate

对于字符串的替换需求,你是否还在replace(),regexp_replace()。替换多个目标的时候,是否还在嵌套使用regexp_replace(regexp_replace(srcStr, ‘A’,‘a’), ‘B’,‘b’)这样吗?
漏漏漏!快使用translate()函数,非常的奈斯!

  • 作用:按照替换字符与被替换字符位置 一一替换 源字符中匹配到的被替换字符(有点难以理解,看举例)
  • 语法:translate(input, from, to)
    input:输入字符串【集是要被替换的字符串】
    from:需要匹配的字符【即需要被替换的字符】,这里一定要注意是字符不是字符串
    to :用哪些字符来替换被匹配到的字符
    注意点:这里from的字符与to字符在位置上存在一 一对应关系,也就是from中每个位置上的字符用to中对应位置的字符替换。
  • 示例:
select translate("abcdef abcdef","abcdef","123456");
  • 结果为:123456 123456

  • 解释:替换不是说把"abcdef"替换成"123456",而是把a替换成1,把b替换成2,把c替换成3,把d替换成4,e替换成5,f替换成6,一一对应位置的去替换源字符串中匹配到的字符

  • 注意:这时候就很容易想到,from长度等于to长度很好理解,一一对应字符去替换即可。
    但是当from与to的长度不相等时,会怎么样呢?让我们逐一来看

  • 1、当from长度 大于 to长度

示例:

select translate("abcdef abcdef","abcdef","1234");

结果:1234 1234
解释:还是一一对应 ,a对应1,b对应2,c对应3,d对应4,e和f在"to"中没有字符可对应,则源字符串中匹配上ef时会被删除,其实也可以理解为对应的是空字符。

  • 2、当from长度 小于 to长度
    示例:
select translate("abcdef abcdef","abcd","123456");

结果:1234ef 1234ef
解释:还是一 一对应 ,a对应1,b对应2,c对应3,d对应4,"to"中的56在"from"中无字符对应,相当于没用,不用管它。

  • 3、其实还能想到,如果from中有重复字符,to中对应的字符又不一样怎么办?
    示例:
select translate("abcdef abcdef","aacd","1234");

结果:1b34ef 1b34ef
解释:可以看到from是’aacd’,to是’1234’。其中a有对应1 也对应2。这种情况只需要看第一个对应即可,后续对应皆不生效,但是占to中的一个字符位置。
因为占一个to中的位置,所以对应
不是:a对应1,c对应2,d对应3
而是:a对应1,c对应3,d对应4

日期函数

next_day

这个函数属于是冷知识系列了,感觉很少能用上。

  • 作用:返回指定日期的下一个最近的指定星期几的日期,返回的格式为yyyy-mm-dd。
  • 语法:next_day(指定日期, 星期N):
    参数“星期N”可以是:
    Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday

    Mo,Tu,We,Th,Fr,Sa,Su
  • 示例
select next_day('2022-07-28','Monday') as c1,next_day('2022-07-28','Mo') as c2 union all
select next_day('2022-07-28','Tuesday') as c1,next_day('2022-07-28','Tu') as c2 union all
select next_day('2022-07-28','Wednesday') as c1,next_day('2022-07-28','We') as c2 union all
select next_day('2022-07-28','Thursday') as c1,next_day('2022-07-28','Th') as c2 union all
select next_day('2022-07-28','Friday') as c1,next_day('2022-07-28','Fr') as c2 union all
select next_day('2022-07-28','Saturday') as c1,next_day('2022-07-28','Sa') as c2 union all
select next_day('2022-07-28','Sunday') as c1,next_day('2022-07-28','Su') as c2;
  • 结果
    在这里插入图片描述

相关内容

热门资讯

demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...