hiveSql冷门但好用函数 --持续更新

news2024/11/24 19:08:20

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;
  • 结果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吉时利2602A数字源表-安泰测试

吉时利Keithley2602A双通道系统数字电源 Keithley/吉时利2602A数字源表数字源表是吉时利新的I-V源测量仪器,可用作台式I-V特征分析工具或者构成多通道I-V测试系统的组成模块。作为台式仪器使用时,2600A系列仪器提供了一个嵌入式TSP Express软件工具&…

函数定义、this指向、闭包等

1、函数的定义和调用 1.1函数的定义方式 1、自定义函数(命名函数) 2、函数表达式(匿名函数) 3、利用 new Function (‘参数1’, ‘参数2’, ‘函数体’) 1、自定义函数(命名函数) function fn() {}2、函…

微服务框架 SpringCloud微服务架构 6 Nacos 配置管理 6.1 Nacos 实现配置管理

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构6 Nacos 配置管理6.1 Nacos 实现配置管理6.1.1 统一配置管理6.1.2 直接开干…

Chapter9.4:线性系统的状态空间分析与综合(下)

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选,仅包含部分经典习题,需要完整版习题答案请自行查找,本系列属于知识点巩固部分,搭配如下几个系列进行学习,可用于期末考试和考研复习。 自动控制原理(…

UG NX二次开发(C#)-CAM-获取所有的加工刀具表单

文章目录 1、前言2、加工模块的刀具2.1 进入加工模板2.2 创建加工刀具3、创建一个UI Styler程序3.1 创建一个UI Styler3.2 保存对话框4、创建GetMachiningToolList工程5、添加代码6、保存工程,生成dll7、配置工程8、测试效果1、前言 UG NX软件最擅长的就是生成加工程序,包括…

Express操作MongoDB

一、Express框架通过Mongoose模块操作MongoDB数据库 1、MongoDB数据库: ​ (1)存放数据的格式:key-value ​ (2)数据库(database) ——- 集合(collection) ——- 文档(document) ​ (3&…

数字逻辑·时序线路设计【原始状态表】

这一篇着重原始状态表 组合线路设计与时序线路设计的区别 组合线路设计方法: 确定输入和输出写真值表写表达式并化简根据题目给出的门或者其他要求进行变换(取反)画电路图 时序线路设计方法: 确定输入和输出,建立…

[Linux]------初识多线程

文章目录前言一、 Linux线程概念什么是线程线程理解证明C线程库二、页表三、线程的优点四、线程缺点五、线程异常六、线程的用途总结前言 本节重点!!! 了解线程概念,理解线程与进程的区别和联系。学会线程控制,线程创…

因子模型套利定价理论APT的应用

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 一、APT(套利定价理论)应用于计算投资组合的风险 某个投资组合由两个股票A和B组成,它们的暴露系数向量(exposure vector)分别为和。两个股票在投资组合中的比重为…

Turtlebot2简单控制

遥控 遥控前为了让turtlebot接受命令,需要启动 roslaunch turtlebot_bringup minimal.lauch 键盘操作命令: roslaunch turtlebot_teleop keyboard_teleop.launch 简单脚本控制: 首先输入命令 roslaunch turtlebot_bringup minimal.lau…

WebRTC学习笔记七 pion/webrtc

一、Usage用法 1.使用Go Modules Go Modules are mandatory for using Pion WebRTC. So make sure you set export GO111MODULEon, and explicitly specify /v2 or /v3 when importing. 2.常见示例 example applications contains code samples of common things people bu…

Web3.0带来天翻地覆的变化?全面科普!所谓的Web3.0到底是什么?

Web3.0在2021年尾声突然蹿红,在美国国会的听证会里,一句“我们如何确保web3革命发生在美国”引发了大家对于Web3.0的关注,而后马斯克一篇内容为“有人看过web3.0吗? 我没有找到”的推文,将关于Web3.0的讨论推向了高潮。 甚至于这…

零基础入门JavaWeb——CSS相关知识

一、CSS的作用 SS是用于设置HTML页面标签的样式&#xff0c;用于美化HTML页面。 二、CSS的引入方式 2.1 行内样式 在要设置样式的标签中添加style属性&#xff0c;编写css样式&#xff1b;行内样式仅对当前标签生效。 <div style"border: 1px solid red;width: 10…

「MySQL高级篇」SQL优化

大家好&#xff0c;我是Zhan&#xff0c;一名个人练习时长一年半的大二后台练习生&#xff0c;最近在学MySQL高级篇&#xff0c;欢迎各路大佬一起交流讨论 &#x1f449;本篇速览 在前面对索引的的学习中&#xff0c;我们学习到了从MySQL“底层”优化了SQL执行查询的算法&…

认识微服务

认识微服务&#xff1a; 背景&#xff1a;随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。 这些架构之间有怎样的差别呢&#xff1f; 单体架构&#xff1a; 单体架构&#xff1a;将业务的所有功…

颜色的感知

人体内有三种颜色感知细胞&#xff0c;能感知红、绿、蓝三种颜色。 人体内还有一种光强感知细胞&#xff0c;这种关光的波长刚好和绿光接近。 椎状感应颜色 柱状感应强度。

[附源码]Python计算机毕业设计Django的专业技能认证系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

RocketMQ 的消费者类型详解与最佳实践

作者&#xff1a;凌楚 在 RocketMQ 5.0 中&#xff0c;更加强调了客户端类型的概念&#xff0c;尤其是消费者类型。为了满足多样的 RocketMQ 中一共有三种不同的消费者类型&#xff0c;分别是 PushConsumer、SimpleConsumer 和 PullConsumer。不同的消费者类型对应着不同的业务…

AI美颜SDK算法详解

AI美颜SDK是近几年兴起的新兴美颜方式&#xff0c;区别于传统的美颜工具&#xff0c;AI美颜采用人工智能的深度学习算法实现智能化美颜&#xff0c;下文小编将为大家讲解一下AI美颜SDK相关的知识。 一、与传统美颜的区别之处 从宏观角度来讲&#xff0c;AI美颜技术与传统美颜…

高维多元时序数据聚类

1. 简介 收集数据的能力不断增强&#xff0c;使我们有可能收集大量的异构数据。在可用的异构数据中&#xff0c;时间序列代表着尚未被充分探索的信息母体。当前的数据挖掘技术在分析时间序列时存在多个缺点&#xff0c;尤其是在应同时分析多个时间序列&#xff08;即多维时间序…