掌握Hive函数[1]:从基础到高级应用

devtools/2024/9/20 3:14:02/ 标签: hive, hadoop, 数据仓库, 大数据, 数据库

目录

 函数简介

 单行函数

 算术运算函数

 数值函数

 字符串函数

 日期函数

 流程控制函数

 集合函数

 案例演示


 函数简介

Hive将常用的逻辑封装成函数供用户使用,类似于Java中的函数。这样做的好处是可以避免用户反复编写相同的逻辑代码,可以直接调用这些函数。重点在于用户需要知道函数的名称及其功能。Hive提供了大量的内置函数,这些函数可以大致分为以下几类:单行函数、聚合函数、炸裂函数(Explode函数)和窗口函数。

以下命令可用于查询Hive内置函数的相关信息:

  1. 查看系统内置函数
    hive> show functions;
  2. 查看内置函数用法
    hive> desc function upper;
  3. 查看内置函数详细信息
    hive> desc function extended upper;

 单行函数

单行函数的特点是一进一出,即输入一行数据,输出一行数据。

 算术运算函数
  • 加法 A + B
  • 减法 A - B
  • 乘法 A * B
  • 除法 A / B
  • 取模 A % B
  • 位与 A & B
  • 位或 A | B
  • 位异或 A ^ B
  • 位非 ~A

案例实操: 查询所有员工的薪水后加1显示。

hive (default)> select sal + 1 from emp;
 数值函数
  • round: 四舍五入
    hive> select round(3.3);   3
  • ceil: 向上取整
    hive> select ceil(3.1);   4
  • floor: 向下取整
    hive> select floor(4.8);  4
 字符串函数
  • substring: 截取字符串
    • 语法一:substring(string A, int start)
    • 语法二:substring(string A, int start, int len)
  • replace: 替换
    hive> select replace('lzl', 'a', 'A');
  • regexp_replace: 正则替换
    hive> select regexp_replace('100-200', '(\\d+)', 'num');
  • regexp: 正则匹配
    hive> select 'dfsaaaa' regexp 'dfsa+';
  • repeat: 重复字符串
    hive> select repeat('123', 3);
  • split: 字符串切割
    hive> select split('a-b-c-d','-');
  • nvl: 替换null值
    1hive> select nvl(null,1);
  • concat: 拼接字符串
    hive> select concat('beijing','-','shanghai','-','shenzhen');
  • concat_ws: 以指定分隔符拼接字符串
    hive> select concat_ws('-',array('beijing','shenzhen','shanghai'));
  • get_json_object: 解析json字符串
    hive> select get_json_object('[{"name":"大海海","sex":"男","age":"25"},{"name":"小宋宋","sex":"男","age":"47"}]','$.[0]');
 日期函数
  • unix_timestamp: 返回当前或指定时间的时间戳
    hive> select unix_timestamp('2022/08/08 08-08-08','yyyy/MM/dd HH-mm-ss');
  • from_unixtime: 转化UNIX时间戳到时间格式
    hive> select from_unixtime(1659946088);
  • current_date: 当前日期
    hive> select current_date;
  • current_timestamp: 当前的日期加时间,并且精确到毫秒
    hive> select current_timestamp;
  • month: 获取日期中的月
    hive> select month('2022-08-08 08:08:08');
  • day: 获取日期中的日
    hive> select day('2022-08-08 08:08:08');
  • hour: 获取日期中的小时
    hive> select hour('2022-08-08 08:08:08');
  • datediff: 两个日期相差的天数
    hive> select datediff('2021-08-08','2022-10-09');
  • date_add: 日期加天数
    hive> select date_add('2022-08-08',2);
  • date_sub: 日期减天数
    hive> select date_sub('2022-08-08',2);
  • date_format: 将标准日期解析成指定格式字符串
    hive> select date_format('2022-08-08','yyyy年-MM月-dd日');
 流程控制函数
  • case when: 条件判断函数
    hive> select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from table_name;
  • if: 条件判断
    hive> select if(10 > 5,'正确','错误');
 集合函数
  • size: 集合中元素的个数
    hive> select size(friends) from test;
  • map: 创建map集合
    hive> select map('xiaohai',1,'dahai',2);
  • map_keys: 返回map中的key
    hive> select map_keys(map('xiaohai',1,'dahai',2));
  • map_values: 返回map中的value
    hive> select map_values(map('xiaohai',1,'dahai',2));
  • array: 声明array集合
    hive> select array('1','2','3','4');
  • array_contains: 判断array中是否包含某个元素
    hive> select array_contains(array('a','b','c','d'),'a');
  • sort_array: 将array中的元素排序
    hive> select sort_array(array('a','d','c'));
  • struct: 声明struct中的各属性
    hive> select struct('name','age','weight');
  • named_struct: 声明struct的属性和值
    hive> select named_struct('name','xiaosong','age',18,'weight',80);

 案例演示

  1. 数据准备

    • 表结构
      name	sex	birthday	hiredate	job	salary	bonus	friends	children
    • 建表语句
      create  table  employee(name string,  --姓名sex  string,  --性别birthday string, --出生年月hiredate string, --入职日期job string,   --岗位salary double, --薪资bonus double,  --奖金friends array<string>, --朋友children map<string,int> --孩子
      );
    • 插入数据
      hive> insert into employee  values(...);
  2. 需求

    • 统计每个月的入职人数
      selectmonth(replace(hiredate,'/','-')) as month,count(*) as cn
      fromemployee
      group bymonth(replace(hiredate,'/','-'));
    • 查询每个人的年龄(年 + 月)
      -- 转换日期
      selectname,replace(birthday,'/','-') birthday
      fromemployee;-- 求出年和月
      selectname,year(current_date())-year(t1.birthday) year,month(current_date())-month(t1.birthday) month
      from(selectname,replace(birthday,'/','-') birthdayfromemployee)t1;-- 根据月份正负决定年龄
      selectname,concat(if(month>=0,year,year-1),'年',if(month>=0,month,12+month),'月') age
      from(selectname,year(current_date())-year(t1.birthday) year,month(current_date())-month(t1.birthday) monthfrom(selectname,replace(birthday,'/','-') birthdayfromemployee)t1)t2;
    • 按照薪资,奖金的和进行倒序排序,如果奖金为null,置为0
      selectname,salary + nvl(bonus,0) sal
      fromemployee
      order bysal desc;
    • 查询每个人有多少个朋友
      select name,size(friends) cnt
      from employee;
    • 查询每个人的孩子的姓名
      select name,map_keys(children) ch_name
      from employee;
    • 查询每个岗位男女各多少人
      selectjob,sum(if(sex='男',1,0)) male,sum(if(sex='女',1,0)) female
      fromemployee
      group by job;

http://www.ppmy.cn/devtools/108823.html

相关文章

【Flutter】Flutter安装和配置(mac)

1、准备工作 升级Macos系统为最新系统安装最新的Xcode电脑上面需要安装brew https://brew.sh/安装chrome浏览器&#xff08;开发web用&#xff09; 2.、下载flutter https://docs.flutter.dev/release/archive?tabmacos 大家网页后&#xff0c;选择对应的版本【Tips&#x…

C++复习day05

类和对象 1. 面向对象和面向过程的区别是什么&#xff1f;&#xff08;开放性问题&#xff09; 1. **抽象级别**&#xff1a;- **面向对象**&#xff1a;以对象&#xff08;数据和方法的集合&#xff09;为中心&#xff0c;强调的是数据和行为的封装。- **面向过程**&#xf…

单一职责原则介绍

一.概念介绍 单一职责原则(Single Responsibility Principle, SRP)是面向对象设计中的五大基本原则之一,它是指一个类或者模块应该仅有一个引起它变化的原因。 具体来说,单一职责原则有以下几个特点: 职责集中:一个类或模块应该专注于完成一种特定的功能或职责,而不应该承担过…

力扣9.7

115.不同的子序列 题目 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 数据范围 1 < s.length, t.length < 1000s 和 t 由英文字母组成 分析 令dp[i][j]为s的前i个字符构成的子序列中为t的前j…

ArrayList,Vector, LinkedList 的存储性能和特性

1. ArrayList ArrayList 是基于动态数组实现的列表。在底层&#xff0c;它使用一个数组来存储元素&#xff0c;并在需要时自动扩容。这种设计使得 ArrayList 在进行按索引访问时性能非常高&#xff0c;但在插入和删除操作上可能表现不如链表。 1.1 特性 动态扩容&#xff1a…

Linux 递归删除大量的文件

一般情况下 在 Ubuntu 中&#xff0c;递归删除大量文件和文件夹可以通过以下几种方式快速完成。常用的方法是使用 rm 命令&#xff0c;配合一些适当的选项来提高删除速度和效率。 1. 使用 rm 命令递归删除 最常见的方式是使用 rm 命令的递归选项 -r 来删除目录及其所有内容。…

MySQL数据库的SQL注入漏洞解析

说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 …

什么是大数据、有什么用以及学习内容

目录 1.什么是大数据&#xff1f; 2.大数据有什么用&#xff1f; 2.1商业与营销&#xff1a; 2.2医疗与健康&#xff1a; 2.3金融服务&#xff1a; 2.4政府与公共服务&#xff1a; 2.5交通与物流&#xff1a; 2.6教育与个性化学习&#xff1a; 3.学习大数据需要学习哪…

Elasticsearch - SpringBoot 索引与文档相关demo

文章目录 前言Elasticsearch - SpringBoot 索引与文档相关demo1. _cat/* 相关API2. 查看所有索引3. 创建索引4. 检索索引5. 删除索引6. 新增文档7. 更新文档8. 根据索引中的文档 ID 查询文档9. 删除文档前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作…

电脑驱动分类

电脑驱动程序&#xff08;驱动程序&#xff09;是操作系统与硬件设备之间的桥梁&#xff0c;用于使操作系统能够识别并与硬件设备进行通信。以下是常见的驱动分类&#xff1a; 1. 设备驱动程序 显示驱动程序&#xff1a;控制显卡和显示器的显示功能&#xff0c;负责图形渲染和…

Windows 11安装nvm教程

1、nvm是什么 nvm 全名 node.js version management&#xff0c;是一个 nodejs 的版本管理工具。通过它可以安装和切换不同版本的 nodejs&#xff0c;主要解决 node 各种版本存在不兼容现象。   在工作中&#xff0c;我们可能同时在进行2个或者多个不同的项目开发&#xff0…

数据结构:线性表的顺序存储

文章目录 &#x1f34a;自我介绍&#x1f34a;线性表的顺序存储介绍概述例子 &#x1f34a;顺序表的存储类型设计设计思路类型设计 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我…

c++ 析构函数详解

C 中的析构函数用于在对象生命周期结束时执行清理任务&#xff0c;如释放内存、关闭文件或其他资源。析构函数是类的一部分&#xff0c;确保对象在销毁时能够正确地清理自身。 1. 析构函数的基本语法 析构函数的定义与构造函数类似&#xff0c;但它以波浪号 ~ 开头&#xff0…

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中&#xff0c;优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率&#xff0c;还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化&#xff0c;传统的优化算法在许…

Linux网络测试和故障排查命令

文章目录 ping 命令常用选项&#xff1a;使用示例&#xff1a;域名解析和 IP 地址响应数据停止 ping 命令统计数据延迟统计 traceroute 命令常用选项&#xff1a;使用示例&#xff1a;命令执行&#xff1a;路由节点详情&#xff1a; mtr 命令使用示例&#xff1a;使用结果详解输…

冒泡排序——基于Java的实现

简介 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;适用于小规模数据集。其基本思想是通过重复遍历待排序的数组&#xff0c;比较相邻的元素并交换它们的位置&#xff0c;以此将较大的元素逐步“冒泡”到数组的末尾。算法的名称源于其运行过程…

HBase

Apache HBase 是一个基于 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;构建的分布式、面向列的 NoSQL 数据库&#xff0c;主要用于处理大规模、稀疏的表结构数据。HBase 的设计灵感来自 Google 的 Bigtable&#xff0c;能够在海量数据中提供快速的随机读写操作&#xff…

分类与回归的区别

分类和回归的详细区别如下&#xff1a; 目标变量类型: 分类: 目标变量是离散的&#xff0c;分为若干类别。例如&#xff0c;邮件分类为“垃圾邮件”或“正常邮件”。 回归: 目标变量是连续的&#xff0c;通常是一个数值。例如&#xff0c;预测房价或气温。 输出结果: 分类:…

前端工程化2:从0到1的eslint插件开发教程

从0-1的eslint插件开发教程 开发eslint插件目的&#xff1a;根据项目需要&#xff0c;自定义满足项目特殊需要的校验规则是 参考eslint官方文档展开阐述 插件开发 自定义规则 单元测试 下面开始通过一个示例demo来介绍插件整个开发流程 代码中出现的方法及变量的详细解释与…

PHP一键发起灵活定制多功能投票小程序系统源码

​一键发起&#xff0c;灵活定制 —— 多功能投票小程序 &#x1f680;【开篇&#xff1a;告别繁琐&#xff0c;投票新体验】&#x1f680; 还在为组织投票活动而头疼不已吗&#xff1f;繁琐的流程、有限的选项、难以统计的结果...这些都将成为过去式&#xff01;今天&#x…