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.rhkb.cn/news/439945.html

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

相关文章

Arduino UNO R3自学笔记21 之 Arduino电机的闭环控制

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:上篇写了电机速度测定,这篇主要是讲测定出的速度用于反馈,使得实际速度快速响应到需要的速度。 1.控制系统介绍 分2大类&#x…

《深度学习》【项目】OpenCV 发票识别 透视变换、轮廓检测解析及案例解析

目录 一、透视变换 1、什么是透视变换 2、操作步骤 1)选择透视变换的源图像和目标图像 2)确定透视变换所需的关键点 3)计算透视变换的变换矩阵 4)对源图像进行透视变换 5)对变换后的图像进行插值处理 二、轮廓检测…

idea插件市场安装没反应

https://plugins.jetbrains.com/idea重启后还是不行那就

Docker:安装 MongoDB 的详细指南

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、简述 MongoDB 是一个流行的 NoSQL 数据库,可以在 Docker 容器中轻松安装和运行。本文将介绍如何在 Docker 中安装 MongoDB,并展示如何在 Java 应用中使用 MongoDB…

kafka发送消费核心参数与设计原理详解

核心参数详解: 发送端参数: 发送方式:默认值一般都是1: 重试参数 : 批量参数: 消费端参数: 自动提交参数: 如果是false,就是说消费完后不提交位移。也就是说比如之前消费的1-5.…

Qt教程(002):Qt项目创建于框架介绍

二、创建Qt项目 2.1 创建项目 【1、New Project】 【2、选择Qt Widgets Application】 【3、设置项目名称和保存路径】 注意,项目名称和路径不要带中文。 【4、选择QWidget】 带菜单栏的窗口QMainWindow空白窗口QWidget对话框窗口QDialog 【5、编译】 2.2 项目框…

前端编程艺术(4)---JavaScript进阶(vue前置知识)

目录 1.变量和常量 2.模版字符串 3.对象 4.解构赋值 1.数组的解构 2.对象的解构 5.箭头函数 6.数组和对象的方法 7.扩展运算符 8.Web存储 9.Promise 10.AsyncAwait 11.模块化 1.变量和常量 JavaScript 中的变量和常量是用于存储数据的标识符。变量可以被重新赋值&am…

基于阻塞队列及环形队列的生产消费模型

目录 条件变量函数 等待条件满足 阻塞队列 升级版 信号量 POSIX信号量 环形队列 条件变量函数 等待条件满足 int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex); 参数: cond:要在这个条件变量上等待 mutex…

windows下,在vscode中使用cuda进行c++编程

安装cuda CUDA Toolkit Downloads | NVIDIA Developer 这里网上教程多的是,在这个网址下载安装即可 我这台电脑因为重装过,所以省去了安装步骤,但是要重新配置环境变量。我重新找到了重装之前的CUDA位置(关注这个bin文件夹所在的目录) 在…

微信第三方开放平台接入本地消息事件接口报错问题java.security.InvalidKeyException: Illegal key size

先看报错: java.security.InvalidKeyException: Illegal key sizeat javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)at javax.crypto.Cipher.implInit(Cipher.java:805)at javax.crypto.Cipher.chooseProvider(Cipher.java:864)at javax.crypto.Cipher.in…

九、3 串口发送+printf函数移植+打印汉字

1、接线图 TX与RX交叉连接,TXD接STM32的PA10,RXD接STM32的PA9 VCC与3.3V用跳线帽连接 2、函数介绍 3、代码部分 (1)发送字节的函数(Byte) 可直接发送十六进制数 如0x41,也可直接发送字符 如A …

【重学 MySQL】五十六、位类型

【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中,位类型(BIT类型)是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值,其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…

【AIGC】AI时代的数据安全:使用ChatGPT时的自查要点

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯法律法规背景中华人民共和国保守秘密法中华人民共和国网络安全法中华人民共和国个人信息保护法遵守法律法规的重要性 💯ChatGPT的数据使用特点ChatGPT数据安全…

YOLOv11 vs YOLOv8:谁才是真正的AI检测之王?

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

Js逆向分析+Python爬虫结合

JS逆向分析Python爬虫结合 特别声明📢:本教程只用于教学,大家在使用爬虫过程中需要遵守相关法律法规,否则后果自负!!! 完整代码地址Github:https://github.com/ziyifast/ziyifast-co…

28 Vue3之搭建公司级项目规范

可以看到保存的时候ref这行被提到了最前面的一行 要求内置库放在组件的前面称为auto fix,数组new arry改成了字面量,这就是我们配置的规范 js规范使用的是airbnb规范模块使用的是antfu 组合prettier&eslint airbnb规范: https://github…

重磅来袭!CMSIS-DAP 脱机烧录器 EasyFlasher 发布~

重磅来袭!CMSIS-DAP 脱机烧录器 EasyFlasher 发布~ 目录 重磅来袭!CMSIS-DAP 脱机烧录器 EasyFlasher 发布~相关文章1、前言1、产品特点2、功能说明3、支持芯片4、关于烧录5、写在最后 某宝店铺:觉皇工作室 购买链接:https://item…

缓存数据减轻服务器压力

问题:不是所有的数据都需要请求后端的 不是所有的数据都需要请求后端的,有些数据是重复的、可以复用的解决方案:缓存 实现思路:每一个分类为一个key,一个可以下面可以有很多菜品 前端是按照分类查询的,所以我们需要通过分类来缓存缓存代码 /*** 根据分类id查询菜品** @pa…

Linux中的进程间通信之共享内存

共享内存 共享内存示意图 共享内存数据结构 struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */__kernel_time_t shm_atime; /* last attach time */__kernel_time_t shm_dtime; /* last detach time */__kerne…