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

news/2024/9/17 7:41:24/ 标签: 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/news/1522486.html

相关文章

2024 RustChinaConf 赞助商介绍

2024 RustChinaConf 得到了行业各界的广泛支持&#xff0c;在此向以下赞助商表示感谢&#xff01; 非凸科技 非凸科技是一家全栈使用Rust的金融科技公司&#xff0c;致力于为券商、私募、公募等金融机构及个人投资者提供一站式数智交易领域服务解决方案。作为本次大会的钻石赞助…

jmeter之ForEach控制器使用

ForEach控制器作用&#xff1a; 一般和用户自定义变量或者正则表达式提取器配合使用&#xff0c;读取返回结果中一系列相关的变量值&#xff0c;该控制器下的取样器都会被执行一次或多次&#xff0c;每次读取不同的变量值(类似python当中的for语句,用来遍历操作) 本节代码已上…

币安/欧易合约对冲APP系统开发

币安合约对冲系统开发是一个复杂且专业的过程&#xff0c;它涉及到多个方面的技术和策略。以下是对币安合约对冲系统开发的一个概述&#xff1a; 一、系统概述 币安合约对冲系统是一种利用币安交易所提供的合约交易功能&#xff0c;通过同时建立多头和空头仓位来减少或消除市…

hutool 集合相关交集、差集

开发过程中会遇到集合之间的对比之类的需求&#xff0c;之前经常会自己写个工具类来实现&#xff0c;目前hutool可以帮助我们解决很多问题&#xff0c;接下来我们就来实践下。 相关jar包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool…

Python办公自动化案例

文章目录 系列文章办公自动化案例案例1&#xff1a;批量重命名文件案例2&#xff1a;Excel数据自动筛选案例3&#xff1a;PDF文件合并案例4&#xff1a;批量发送电子邮件案例5&#xff1a;日程安排提醒案例6&#xff1a;CSV文件数据统计案例7&#xff1a;Word文档生成案例8&…

Day18_0.1基础学习MATLAB学习小技巧总结(18)——MATLAB绘图篇(1)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍&#xff0c;为了在这个过程中加深印象&#xff0c;也为了能够有所足迹&#xff0c;我会把自己的学习总结发在专栏中&#xff0c;以便学习交流。 参考书目&#xff1a;《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是…

前端vue项目服务器部署(docker)

前端vue项目服务器部署(docker) 步骤 1: 导入 Nginx Docker 镜像 1、上传 Nginx Docker 镜像 将你的nginx-alpine.tar包上传到服务器上。假设路径为 /var/v3-admin-vite/nginx-alpine.tar。 scp -r "C:\Users\86184\Desktop\v3-admin-vite" root110.40.179.182:/…

第十五届蓝桥杯 Python 省赛题目及解析

第十五届蓝桥杯 Python 省赛题目及解析 选择题 1. 运行下面程序&#xff0c;输出的结果是&#xff08;&#xff09;。 s ‘py’ print(‘t’.join(s)) A、tpyB、ptyC、tptyD、tptyt 正确答案&#xff1a;B 答案解析&#xff1a; join() 方法是字符串的一个方法&#xff0c;…

数据分析 设备一个月以来的参数变化

1数据预处理 import pandas as pd import glob import os# 读取所有CSV文件并合并为一个DataFrame path path_to_your_csv_files/ # CSV文件的文件夹路径 all_files glob.glob(os.path.join(path, "*.csv"))df_list [] for file in all_files:df pd.read_csv(f…

FPGA进阶教程16 同一块FPGA的两个网口实现arp自通信

本项目使用同一个FPGA的两个网口进行千兆以太网的arp自动绑定 目的是为了以后实现两个FPGA之间进行以太网数据的交互 起因:最近公司画了一块板子,上面有两个网口,市面上常见的项目都是将FPGA与PC端实现arp的自动绑定和UDP数据的回环,很少实现两块FPGA之间的以太网数据通信…

网络学习-eNSP配置ACL

AR1路由器配置 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 192.168.2.254 24 …

chunk-vendors.js 文件过大导致页面加载缓慢解决方案

1、路由懒加载 在 Webpack 中&#xff0c;我们可以使用动态 import语法来定义代码分块点 (split point)&#xff1a; import(./Foo.vue) // 返回 Promise如果您使用的是 Babel&#xff0c;你将需要添加 syntax-dynamic-import 插件&#xff0c;才能使 Babel 可以正确地解析语…

Unity制作更换字体的插件

目录 1.前置知识 1.1 EditorWindow 1&#xff09;目的 2&#xff09;使用方式 1.2 OnGUI() 1&#xff09;目的 2&#xff09;使用方式 1.3 AssetDatabase 1&#xff09;目的 2&#xff09;使用方式 1.4 PrefabUtility 1&#xff09;目的 2&#xff09;使用方式 2…

GNU/Linux - Open函数使用的O_CLOEXEC flag

在 Linux 中&#xff0c;“O_CLOEXEC ”标志与 “open ”系统调用一起使用&#xff0c;用于指定在使用 “exec ”系列函数&#xff08;如 “execve”、“execl ”等&#xff09;执行新程序时&#xff0c;“open ”返回的文件描述符应自动关闭。 In Linux, the O_CLOEXEC flag i…

C++(多态性)

多态 多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。 最简单的例子就是使用同样的运算符&#xff0c;可以实现整数与整数之间&#xff0c;浮点数与浮点数之间的加法运算。 多…

前端基础面试题·第一篇——HTML

1 .HTML标签头部< !DOCTYPE html> 的作用 DOCTYPE 使 document type的缩写&#xff0c;是html文档的类型声明&#xff0c;告诉浏览器文档的类型&#xff0c;便于解析文档。 这里会涉及到浏览器渲染页面的两种形式&#xff1a; CSS1 Compatible Mode(标准模式): 浏览器使…

Nginx反向代理功能及动静分离实现

一&#xff1a;Nginx支持正向代理和反向代理 1.正向代理 正向代理&#xff0c;指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务。 正向代理服务的特点是代理服务器 代理的对象是浏览器/客户端&#xff0c;也就是对于目标服务器 来说浏览…

共享内存和信号量

共享内存和信号量可以配合起来一起使用。 什么是共享内存&#xff1f;&#xff1a; 共享内存就是映射一段能被其他进程所访问的内存&#xff0c;这段共享内存由一个进程创建&#xff0c;但多个进程都可以访问。共享内存是最快的IPC方式&#xff0c;它是针对其他进程间通信方式…

漫谈设计模式 [8]:装饰器模式

引导性开场 菜鸟&#xff1a;老鸟&#xff0c;我最近在项目中遇到一个问题。有些功能&#xff0c;比如日志记录和权限校验&#xff0c;我需要在多个地方使用。代码很冗余&#xff0c;不知道有没有更好的解决办法&#xff1f; 老鸟&#xff1a;菜鸟&#xff0c;这个问题很常见…

FaskAPI Web学习

FaskAPI Web学习 个人笔记使用&#xff0c;感谢阅读&#xff01; # -*- ecoding: utf-8 -*- # Author: SuperLong # Email: miu_zxl163.com # Time: 2024/9/7 11:37 from enum import Enum from typing import Optionalfrom fastapi import FastAPI import uvicorn app FastA…