Hive数仓操作(九)

news2025/1/9 1:30:38

一、Hive的DQL查询顺序

HQL语法基本上与传统的SQL一致,包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY和LIMIT等关键步骤

SELECT *  -- 1. 选择所有列
FROM employees  -- 2. 数据来源是 employees 表
WHERE salary > 3000  -- 3. 筛选工资大于 3000 的行
GROUP BY department_id  -- 4. 按 department_id 进行分组
HAVING AVG(salary) > 3500  -- 5. 筛选平均工资大于 3500 的分组
ORDER BY department_id  -- 6. 按 department_id 排序
LIMIT 10;  -- 7. 限制结果为前 10 行
执行顺序:
  1. FROM

    • 确定数据来源,并建立数据范围。
  2. WHERE

    • 对数据进行筛选,剔除不符合条件的行。
  3. GROUP BY

    • 对数据进行分组,并进行聚合计算。
  4. HAVING

    • 在分组基础上进行进一步筛选。
  5. SELECT

    • 选择和计算输出的列。
  6. ORDER BY

    • 对结果集进行排序。
  7. LIMIT / OFFSET

    • 截取部分结果进行输出。

二、Hive的排序方式

Hive有四种排序方式,也称为四个By

  • Order By:全局排序,单个Reducer。
  • Sort By:每个Reducer内部排序。
  • Distribute By:根据字段哈希分配Reducer。
  • Cluster By:分配和排序字段相同时使用。

1. Order By

  • 全局排序,只能使用一个Reducer进行排序,一般公司会限制无法使用。
  • 示例
    -- 查询员工信息按工资升序排列
    SELECT * FROM emp ORDER BY sal;
    
    -- 查询员工信息按工资降序排列
    SELECT * FROM emp ORDER BY sal DESC;
    
  • 注意:由于使用单个Reducer,效率较低。

2. Sort By

  • 每个Reducer内部进行排序,但对全局来说结果无序。
  • 示例
    -- 设置Reducer个数
    SET mapreduce.job.reduces=3;
    
    -- 根据部门编号降序查看员工信息
    SELECT * FROM emp SORT BY empno;
    
    -- 将结果导入文件中(按部门编号降序排序)
    INSERT OVERWRITE LOCAL DIRECTORY '/opt/module/datas/sortby-result'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    SELECT * FROM emp SORT BY empno;
    
  • 注意:需要提前设置Reducer数量。
  • 在这里插入图片描述

3. Distribute By

  • 将相同哈希的数据分配到同一个Reducer,对全局来说结果无序。
  • 结合Sort By使用
    -- 按部门编号分区,再按员工编号降序排序
    SET mapreduce.job.reduces=3;
    SELECT * FROM emp DISTRIBUTE BY deptno SORT BY empno DESC;
    
    -- 格式化导出
    INSERT OVERWRITE LOCAL DIRECTORY '/opt/module/datas/distribute-result'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    SELECT * FROM emp DISTRIBUTE BY deptno SORT BY empno DESC;
    
    结果(按部门编号分区(类似于分桶的哈希算法)并按员工编号降序排序):
  • Reducer for deptno 10:
    | empno | ename  | deptno | sal  |
    |-------|--------|--------|------|
    | 130   | Daniel | 10     | 3150 |
    | 127   | Aaron  | 10     | 3800 |
    | 124   | Xavier | 10     | 3700 |
    ...
    
  • Reducer for deptno 20:
    | empno | ename  | deptno | sal  |
    |-------|--------|--------|------|
    | 129   | Charlie| 20     | 2650 |
    | 126   | Zoe    | 20     | 3950 |
    | 123   | Walt   | 20     | 2500 |
    ...
    
  • Reducer for deptno 30:
    | empno | ename  | deptno | sal  |
    |-------|--------|--------|------|
    | 128   | Betty  | 30     | 4450 |
    | 125   | Yvonne | 30     | 4100 |
    ...
    

4. Cluster By

  • Distribute By和Sort By字段相同时等价,对全局来说结果无序。
  • 排序只能升序不能指定DESC降序
  • 示例
    -- 等价写法
    SELECT * FROM emp CLUSTER BY deptno;
    SELECT * FROM emp DISTRIBUTE BY deptno SORT BY deptno;
    
    结果(按部门编号分区并升序排序):
  • Reducer for deptno 10:
    | empno | ename  | deptno | sal  |
    |-------|--------|--------|------|
    | 101   | Alice  | 10     | 3000 |
    | 107   | Carol  | 10     | 3500 |
    | 106   | Frank  | 10     | 3200 |
    ...
    
  • Reducer for deptno 20:
    | empno | ename  | deptno | sal  |
    |-------|--------|--------|------|
    | 102   | Bob    | 20     | 4000 |
    | 105   | Eve    | 20     | 2500 |
    ...
    
  • Reducer for deptno 30:
    | empno | ename  | deptno | sal  |
    |-------|--------|--------|------|
    | 104   | Dave   | 30     | 4500 |
    | 107   | Grace  | 30     | 4800 |
    ...
    

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

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

相关文章

AI在医学领域:Arges框架在溃疡性结肠炎上的应用

溃疡性结肠炎(UC)是一种慢性炎症性肠病(IBD),在全球大约影响着500万人,导致肠道炎症和溃疡。在UC的临床试验中,通常通过内窥镜视频来评估结肠疾病的严重程度,并使用如Mayo内窥镜下分…

leetcode_198_打家劫舍

思路:首先定义一个数组对于dp[i]读作1->i能获取的最大利益,第i个房屋只有"偷"和不"偷"两种情况,分别进行讨论 "偷": 既然"偷"了 i那就肯定不能偷i-1了,但是为了使"偷"的尽可能多除了必…

Microsoft 解釋修改後的 Recall 將如何保障隱私與安全

Microsoft 為 Copilot AI 電腦推出的 Recall 功能,本意是藉由定期進行螢幕截圖,並分析上面的資訊,來協助用戶找到查看過的網頁、工作過的文件等各種資訊。然而雖然立意很好,但 Microsoft 推出之初似乎完全沒有考慮到用戶的隱私安全…

多区域OSPF路由协议

前言 之前也有过关于OSPF路由协议的博客,但都不是很满意,不是很完整。现在也是听老师讲解完OSPF路由协议,感触良多,所以这里重新整理一遍。这次应该是会满意的 一些相关概念 链路状态 链路指路由器上的一个接口,链路状…

Pikachu-Cross-Site Scripting-DOM型xss

DOM型xss DOM型XSS漏洞是一种特殊类型的XSS,是基于文档对象模型 Document Object Model (DOM)的一种漏洞。是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。 dom就是一…

【微服务】初识(day1)

基础概念 集群 集群是将一个系统完整的部署到多个服务器,每个服务器提供系统的所有服务,多个服务器可以通过负载均衡完成任务,每个服务器都可以称为集群的节点。 分布式 分布式是将一个系统拆分为多个子系统,多个子系统部署在…

LeetCode[中等] 279.完全平方

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。 1…

【转载翻译】消息队列 - ActiveMQ、RabbitMQ、Kafka、ZeroMQ

转载自本人博客:【转载翻译】消息队列 - ActiveMQ、RabbitMQ、Kafka、ZeroMQ 转载自:The System Design Cheat Sheet: Message Queues - ActiveMQ, RabbitMQ, Kafka, ZeroMQ 本文由 Aleksandr Gavrilenko 发布于2023年12月21日 1. 前言 消息队列是异步服…

NASA:ATLAS/ICESat-2 L3B 平均内陆地表水数据 V002

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Mean Inland Surface Water Data V002 ATLAS/ICESat-2 L3B 平均内陆地表水数据 V002 简介 ATLAS/ICESat-2 L3B Mean Inland Surface Water Data V002是由NASA的ICESat-2 (Ice,…

JavaScript break与continue语句

break语句和continue语句都具有跳转作用&#xff0c;可以让代码不按既有的顺序执行。 break break语句用于跳出代码块或循环 for(i0;i<100;i){if(i5){break;}console.log(i);} continue continue语句用于应即终止本轮循环,返回循环结构的头部&#xff0c;开始下一轮循环。…

【从零开始实现stm32无刷电机FOC】【实践】【7.2/7 完整代码编写】

目录 stm32cubemx配置芯片选择工程配置stm32基础配置SPI的配置定时器的配置ADC的配置中断优先级的配置生成工程 工程代码编写FOC代码结构搭建电机编码器角度读取PWM产生FOC开环代码编写确定电机正负旋转方向电机旋转速度计算多圈逻辑角度电流采样极对数转子角度确定 闭环控制控…

两个月冲刺软考——网络与信息安全知识

1. 什么是网络监听&#xff1f; 网络监听是主机的一种工作模式&#xff0c;在这种模式下&#xff0c;主机可以接收到本网段在同一条物理通道上传输的所有信息。 2. 客户端与服务器建立连接的步骤 域名解析 建立TCP连接 发送HTTP请求 服务器处理请求 发送HTTP响应 客户端…

uniapp 上了原生的 echarts 图表插件了 兼容性还行

插件地址&#xff1a;echarts - DCloud 插件市场 兼容性这块儿不知道后期会不会支持其他浏览器 H5 的话建议可以用原生的不用这个插件

【单片机】单片机map表详细解析

1、RO Size、RW Size、ROM Size分别是什么 首先将map文件翻到最下面&#xff0c;可以看到 1.1 RO Size&#xff1a;只读段 Code&#xff1a;程序的代码部分&#xff08;也就是 .text 段&#xff09;&#xff0c;它存放了程序的指令和可执行代码。 RO Data&#xff1a;只读…

二叉树进阶练习——根据二叉树创建字符串

1.题目解析 题目来源&#xff1a;606.根据二叉树创建字符串 测试用例 2.算法原理 根据上面的题目我们知道这里需要根据前序遍历来创建字符串&#xff0c;并且需要将每棵子树使用括号括起来&#xff0c;但是要根据实际情况省略括号&#xff0c;比如当右子树为空左子树为空就可…

基于opencv-C++dnn模块推理的yolov5 onnx模型

前言 由于最近手边的项目要求&#xff0c;本人需要在一块算力吃紧的板端上部署yolov5目标检测模型&#xff08;纯CPU推理&#xff09;&#xff0c;考虑到python在板端上的运行速率和其运行时所占内存过大&#xff0c;因此使用torch.hub.load对训练好后的pt模型进行加载和运行不…

rtmp协议转websocketflv的去队列积压

websocket server的优点 websocket server的好处&#xff1a;WebSocket 服务器能够实现实时的数据推送&#xff0c;服务器可以主动向客户端发送数据 1 不需要客户端不断轮询。 2 不需要实现httpserver跨域。 在需要修改协议的时候比较灵活&#xff0c;我们发送数据的时候比较…

使用默认不可变的Rust变量会踩什么坑

讲动人的故事&#xff0c;写懂人的代码 Rust的变量真的是名不副实。名字中明明有个“变”字&#xff0c;却默认不可变。还美其名曰“不可变变量”。要想让变量名副其实&#xff0c;还必须费心额外加个mut关键字&#xff0c;并必须称其为“可变变量”&#xff0c;才能与前者区分…

对比学习与图像去雾在24TIP和CVPR经典图像去雾论文中的良好结合,展示出模型良好的泛化能力(本期内容较详细 多)

今天主要内容是图像去雾&#xff0c;对比学习&#xff0c;无监督学习&#xff0c;要分享的三篇论文分别是&#xff1a; 21CVPR Contrastive Learning for Compact Single Image Dehazing 24 TIP UCL-Dehaze: Toward Real-World Image Dehazing via Unsupervised Contrastive Le…

stm32f103调试,程序与定时器同步设置

在调试定时器相关代码时&#xff0c;注意到定时器的中断位总是置1&#xff0c;怀疑代码有问题&#xff0c;经过增大定时器的中断时间&#xff0c;发现定时器与代码调试并不同步&#xff0c;这一点对于调试涉及定时器的代码是非常不利的&#xff0c;这里给出keil调试stm32使定时…