Hive数仓操作(十)

一、Hive 分页查询

在大数据处理中,分页查询是非常常见的需求。Hive 提供了 LIMITOFFSET 关键字来方便地进行分页操作。本文将详细介绍它们的用法。

1. 基本用法

  • LIMIT:用于限制查询结果的行数。
  • OFFSET:用于指定从哪一行开始检索。

2. 基本语法:

LIMIT 使用

SELECT * FROM 表名 LIMIT 起始行数, 连续取值的长度;
SELECT * FROM 表名 LIMIT x; #返回前x行
SELECT * FROM 表名 LIMIT 0, x; #两者等价,返回前x行
  • 起始行数:从 0 开始计数,表示要跳过的行数。
  • 连续取值的长度:表示要返回的行数。

结合 OFFSET 使用

SELECT * FROM 表名 LIMIT 连续取值的长度 OFFSET 起始行数;

这里,LIMIT 后面只有一个参数,表示要提取的数量,而 OFFSET 则表示从第几行开始。

3. 示例

假设有一个名为 employees 的表,表结构如下:

idnamedepartmentsalary
1AliceHR5000
2BobIT6000
3CharlieFinance7000
4DavidIT8000
5EveHR5500
6FrankFinance7500
7GraceHR4800
8HenryIT9000
9IvyFinance7200
10JackHR5300
查询示例
  1. 获取前 5 行数据

    SELECT * FROM employees LIMIT 5;
    
    idnamedepartmentsalary
    1AliceHR5000
    2BobIT6000
    3CharlieFinance7000
    4DavidIT8000
    5EveHR5500
  2. 获取从第 5 行开始的 3 行数据

    SELECT * FROM employees LIMIT 43;
    
    idnamedepartmentsalary
    5EveHR5500
    6FrankFinance7500
    7GraceHR4800
  3. 获取从第 5 行开始的 3 行数据

    SELECT * FROM employees LIMIT 3 OFFSET 4;
    
    idnamedepartmentsalary
    5EveHR5500
    6FrankFinance7500
    7GraceHR4800

4. 注意事项

  • 行数计数:在 Hive 中,LIMIT 和 OFFSET行数计数从 0 开始。

  • LIMIT 和 OFFSET 的使用

    • 当使用 LIMIT n OFFSET m 时,LIMIT 后面只能有一个参数,表示要提取的数量。
    • OFFSET 用于指定应该跳过的行数。
  • 性能问题:在处理非常大的数据集时,分页查询可能会影响性能,特别是当 OFFSET 值较大时。应该尽量使用适当的过滤条件来减少查询的数据量。


二、Hive 常用函数

1. 查看和描述系统自带的函数

  1. 查看系统自带的函数

    SHOW FUNCTIONS;
    

    输出示例(部分函数)

    ...
    upper
    lower
    concat
    substr
    ...
    
  2. 显示函数的用法

    DESC FUNCTION upper;
    

    输出示例

    u_upper(_FUNC_(str) - Returns str with all characters changed to uppercase
    
  3. 详细显示函数的用法

    DESC FUNCTION EXTENDED upper;
    

    输出示例

    u_upper(_FUNC_(str) - Returns str with all characters changed to uppercase
    Example:> SELECT _FUNC_('Hive');'HIVE'
    

2.常用字符串函数

  1. 拼接函数 concat_ws

    SELECT concat_ws(':', ename, job, hiredate) FROM emp;
    

    假设 emp 表数据如下:

    enamejobhiredate
    AliceManager2021-05-01
    BobDeveloper2022-03-10

    输出示例

    Alice:Manager:2021-05-01
    Bob:Developer:2022-03-10
    

    解释:使用 : 作为连接符,拼接 enamejobhiredate 字段,适用于字符串类型,每个参数的类型是字符串或者可以自动转换为字符串。

  2. 无连接符限制的拼接函数 concat

    SELECT concat(ename, " . ", sal, ":", deptno) FROM emp;
    

    假设 emp 表数据如下:

    enamesaldeptno
    Alice500010
    Bob600020

    输出示例

    Alice . 5000:10
    Bob . 6000:20
    

    解释:拼接多个字符串和字段,可以自动处理各种数据类型,将它们转换为字符串后进行拼接,更适合直接拼接不需要分隔符的场景。

  3. 截取字符串 substr

    SELECT substr('abcde', 2), substr('abcde', 2, 1), substr('abcde', -4);
    

    输出示例

    bcde  b  bcde
    

    解释:

    • substr('abcde', 2): 从第二个字符开始截取,结果为 bcde
    • substr('abcde', 2, 1): 从第二个字符开始截取1个字符,结果为 b
    • substr('abcde', -4): 从第四个字符开始向后截取,结果为 bcde
  4. 查看字符串长度、转换大小写

    SELECT length('abc'), upper('abc'), lower('ABC');
    

    输出示例

    3  ABC  abc
    

    解释:

    • length('abc'): 获取字符串长度,结果为 3
    • upper('abc'): 转换为大写,结果为 ABC
    • lower('ABC'): 转换为小写,结果为 abc
  5. 首字母大写 initcap、填充函数 lpadrpad

    SELECT initcap('abcde'), lpad('ww', 5, " "), rpad('ww', 5, " ");
    

    输出示例

    Abcde   ww  ww   
    

    解释:

    • initcap('abcde'): 首字母大写,结果为 Abcde
    • lpad('ww', 5, " "): 左侧填充空格至长度为5,结果为 ww
    • rpad('ww', 5, " "): 右侧填充空格至长度为5,结果为 ww
  6. 去空格函数 trimltrimrtrim

    SELECT trim(' abcde '), ltrim('  ww'), rtrim('ww  ');
    

    输出示例

    abcde  ww  ww
    

    解释:

    • trim(' abcde '): 去掉首尾空格,结果为 abcde
    • ltrim(' ww'): 去掉左侧空格,结果为 ww
    • rtrim('ww '): 去掉右侧空格,结果为 ww
  7. 字符串替换函数 replace 和字符位置查找函数 instr

    SELECT replace('baidu.com', 'baidu', 'bangci'), instr('abcdf', 'c');
    

    输出示例

    bangci.com  3
    

    解释:

    • replace('baidu.com', 'baidu', 'bangci'): 将字符串 baidu 替换为 bangci,结果为 bangci.com
    • instr('abcdf', 'c'): 查找字符 c 在字符串中的位置,结果为 3

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

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

相关文章

《动手学深度学习》笔记2.5——神经网络从基础→使用GPU (CUDA-单卡-多卡-张量操作)

目录 0. 前言 原书正文 1. 计算设备 (CPU和GPU) 补充:torch版本cuda报错的解决方案 2. 张量与GPU 3. 存储在GPU上 4. 复制(多卡操作) 5. 旁注 (CPU和GPU之间挪数据) 6. 神经网络与GPU 小结 0. 前言 课程全部代码(pytorc…

ISO 21434车辆网络安全风险评估的全面流程解析

ISO 21434风险评估流程是一个系统性的过程,旨在帮助汽车制造商识别和评估与车辆网络安全相关的潜在风险,并制定相应的风险管理策略。以下是ISO 21434风险评估流程的清晰归纳和分点表示: 一、确定风险评估范围 范围界定:明确需要…

运动耳机哪个牌子的好?5大质量不凡的运动耳机测评力荐!

在快节奏的生活中,无论是晨跑、健身还是户外探险,音乐都成了许多人不可或缺的陪伴。运动耳机,作为一种专为运动场景设计的音频设备,旨在提供高质量音频体验的同时,保证佩戴的舒适度和运动的安全性。 (上图为…

Spring之生成Bean

Bean的生命周期:实例化->属性填充->初始化->销毁 核心入口方法:finishBeanFactoryInitialization-->preInstantiateSingletons DefaultListableBeanFactory#preInstantiateSingletons用于实例化非懒加载的bean。 1.preInstantiateSinglet…

【JavaEE】——多线程常用类

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 引入: 一:Callable和FutureTask类 1:对比Runnable 2&#xff1a…

IT新秀系列:Go语言的兴起

Go语言(Golang)由谷歌于2007年发起,并于2009年正式开源。它的诞生背景可以追溯到互联网技术的高速发展时期。那时,软件开发面临着多核计算、大规模并发处理、部署和维护效率低下等挑战。作为一种新型的编程语言,Go主要…

秒懂Linux之线程

目录 线程概念 线程理解 地址空间(页表,内存,虚拟地址) 线程的控制 铺垫 线程创建 ​编辑 线程等待 线程异常 线程终止 代码 线程优点 线程缺点 线程特点 线程概念 线程是进程内部的一个执行分支,线程是C…

第 30 章 XML

第 30 章 XML 1.IE 中的 XML 2.DOM2 中的 XML 3.跨浏览器处理 XML 随着互联网的发展,Web 应用程序的丰富,开发人员越来越希望能够使用客户端来操作 XML 技术。而 XML 技术一度成为存储和传输结构化数据的标准。所以,本章就详细探讨一下 Ja…

云服务器部署k8s需要什么配置?

云服务器部署k8s需要什么配置?云服务器部署K8s需要至少2核CPU、4GB内存、50GBSSD存储的主节点用于管理集群,工作节点建议至少2核CPU、2GB内存、20GBSSD。还需安装Docker,选择兼容的Kubernetes版本,配置网络插件,以及确…

客运自助售票系统小程序的设计

管理员账户功能包括:系统首页,个人中心,乘客管理,司机管理,车票信息管理,订单信息管理,退票信息管理,系统管理 微信端账号功能包括:系统首页,车票信息&#…

JSON的C实现(上)

JSON的C实现(上) JSON的C实现(上)前言JSON简介JSON的C实现思路小结 JSON的C实现(上) 前言 JSON是众多项目中较为常见的数据交换格式,为不同项目、系统间的信息交换提供了一个规范化标准。JSON…

SpringBoot3+Vue3开发后台管理系统脚手架

后台管理系统脚手架 介绍 在快速迭代的软件开发世界里,时间就是生产力,效率决定成败。对于构建复杂而庞大的后台系统而言,一个高效、可定制的后台脚手架(Backend Scaffold)无疑是开发者的得力助手。 脚手架 后台脚…

从0到1深入浅出构建Nest.Js项目

Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对…

【Redis】知识点整理(源于javaguide)

一、什么是Redis Redis是一种开源的内存数据库,它支持键值存储,常被用作数据缓存、消息代理和队列等。它以高性能和支持多种数据结构而闻名,如字符串、哈希、列表、集合和有序集合。Redis也支持持久化,可以将数据存储在磁盘上&am…

【Docker】docker的存储

介绍 docker存储主要是涉及到3个方面: 第一个是容器启动时需要的镜像 镜像文件都是基于图层存储驱动来实现的,镜像图层都是只读层, 第二个是: 容器读写层, 容器启动后,docker会基于容器镜像的读层&…

服务器数据恢复—raid磁盘故障导致数据库文件损坏的数据恢复案例

服务器存储数据恢复环境&故障: 存储中有一组由3块SAS硬盘组建的raid。上层win server操作系统层面划分了3个分区,数据库存放在D分区,备份存放在E分区。 RAID中一块硬盘的指示灯亮红色,D分区无法识别;E分区可识别&a…

Python机器学习中的模型评估与优化技术

Python机器学习中的模型评估与优化技术 目录 📊 模型评估与优化 1.1 交叉验证与模型评估指标 准确率、精确率、召回率、F1-score 1.2 超参数调优 网格搜索与随机搜索使用Scikit-learn的GridSearchCV与RandomizedSearchCV 1. 📊 模型评估与优化 1.1 …

【理论科学与实践技术】数学与经济管理中的学科与实用算法

在现代商业环境中,数学与经济管理的结合为企业提供了强大的决策支持。包含一些主要学科,包括数学基础、经济学模型、管理学及风险管理,相关的实用算法和这些算法在中国及全球知名企业中的实际应用。 一、数学基础 1). 发现人及著名学者 发…

开源项目 - 交通工具检测 yolo v3 物体检测 单车检测 车辆检测 飞机检测 火车检测 船只检测

开源项目 - 交通工具检测 yolo v3 物体检测 单车检测 车辆检测 飞机检测 火车检测 船只检测 开源项目地址:https://gitcode.net/EricLee/yolo_v3 示例:

物理学基础精解【44】

文章目录 球面方程一、球面方程的一般形式二、球面方程的其他形式三、球面方程的性质四、球面方程的应用五、球面方程与其他几何图形的关系 球面方程的几何意义1. 定义球面的形状和大小2. 描述球面的对称性3. 确定球面上点的位置4. 反映球面的曲率性质5. 与其他几何图形的关系6…