Apache Hive之数据查询

news2024/11/22 13:27:33

文章目录

  • 版权声明
  • 数据查询
    • 环境准备
    • 基本查询
      • 准备数据
      • select基础查询
      • 分组、聚合
      • JOIN
      • RLIKE正则匹配
      • UNION联合
      • Sampling采用
      • Virtual Columns虚拟列

版权声明

  • 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用,并非商业用途。
  • 我在整理学习笔记的过程中尽力确保准确性,但无法保证内容的完整性和时效性。本博客的内容可能会随着时间的推移而过时或需要更新。
  • 若您是黑马程序员或相关权利人,如有任何侵犯版权的地方,请您及时联系我,我将立即予以删除或进行必要的修改。
  • 对于其他读者,请在阅读本博客内容时保持遵守相关法律法规和道德准则,谨慎参考,并自行承担因此产生的风险和责任。本博客中的部分观点和意见仅代表我个人,不代表黑马程序员的立场。

数据查询

环境准备

  • hdfs启动
    start-dfs.sh
    
  • yarn启动
    start-yarn.sh
    
  • HiveServer2服务 启动
    #先启动metastore服务 然后启动hiveserver2服务
    nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
    nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
    

基本查询

  • 查询语句的基本语法
select [all | distinct] select_expr, select_expr, ..
from table_reference
[WHERE where_condition]
[group by col_list]
[having where_condition]
[order by col_list]
[   cluster by col_list
	|[DISTRIBUTE BY col_list] [SORT by col_list]
]
[LIMIT number]

准备数据

  • 准备数据:订单表
create database itheima;
use itheima;
CREATE TABLE itheima.orders (
          orderId bigint COMMENT '订单id',
          orderNo string COMMENT '订单编号',
          shopId bigint COMMENT '门店id',
          userId bigint COMMENT '用户id',
          orderStatus tinyint COMMENT '订单状态 -3:用户拒收 -2:未付款的订单 -1:用户取消 0:待发货 1:配送中 2:用户确认收货',
          goodsMoney double COMMENT '商品金额',
          deliverMoney double COMMENT '运费',
          totalMoney double COMMENT '订单金额(包括运费)',
          realTotalMoney double COMMENT '实际订单金额(折扣后金额)',
          payType tinyint COMMENT '支付方式,0:未知;1:支付宝,2:微信;3、现金;4、其他',
          isPay tinyint COMMENT '是否支付 0:未支付 1:已支付',
          userName string COMMENT '收件人姓名',
          userAddress string COMMENT '收件人地址',
          userPhone string COMMENT '收件人电话',
          createTime timestamp COMMENT '下单时间',
          payTime timestamp COMMENT '支付时间',
          totalPayFee int COMMENT '总支付金额'
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

-- 上传数据到linux,导入数据
load data local inpath '/home/hadoop/itheima_orders.txt' into table itheima.orders;

在这里插入图片描述

  • 准备数据:用户表
CREATE TABLE itheima.users (
              userId int,
              loginName string,
              loginSecret int,
              loginPwd string,
              userSex tinyint,
              userName string,
              trueName string,
              brithday date,
              userPhoto string,
              userQQ string,
              userPhone string,
              userScore int,
              userTotalScore int,
              userFrom tinyint,
              userMoney double,
              lockMoney double,
              createTime timestamp,
              payPwd string,
              rechargeMoney double
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
-- 导入数据
load data local inpath '/home/hadoop/itheima_users.txt' into table itheima.users;

select基础查询

-- 查询全表数据
SELECT * FROM itheima.orders;

-- 查询单列信息
SELECT orderid, userid, totalmoney FROM itheima.orders;

-- 查询表有多少条数据
SELECT COUNT(*) FROM itheima.orders;

-- 过滤广东省的订单
SELECT * FROM itheima.orders
WHERE useraddress LIKE '%广东%';

-- 找出广东省单笔营业额最大的订单
SELECT * FROM itheima.orders
WHERE useraddress LIKE '%广东%'
ORDER BY totalmoney DESC LIMIT 1;

分组、聚合

-- 统计未支付、已支付各自的人数
SELECT ispay, COUNT(*)
FROM itheima.orders
GROUP BY ispay;

-- 在已付款的订单中,统计每个用户最高的一笔消费金额
SELECT userid, MAX(totalmoney)
FROM itheima.orders
WHERE ispay = 1 GROUP BY userid;

SELECT usr.username, MAX(ord.totalmoney)
FROM itheima.orders ord,itheima.users usr
WHERE ord.userId=usr.userId and ord.ispay = 1
GROUP BY usr.username;

-- 统计每个用户的平均订单消费额
SELECT userid, AVG(totalmoney)
FROM itheima.orders
GROUP BY userid;

-- 统计每个用户的平均订单消费额,并过滤大于10000的数据
SELECT userid, AVG(totalmoney) AS avg_money
FROM itheima.orders
GROUP BY userid
HAVING avg_money > 10000;

JOIN

-- 订单表和用户表JOIN 找出用户username
SELECT o.orderid, o.userid, u.username
FROM itheima.orders o JOIN itheima.users u
ON o.userid = u.userid;
-- 左外连接
SELECT o.orderid, o.userid, u.username
FROM itheima.orders o
LEFT JOIN itheima.users u
    ON o.userid = u.userid;

RLIKE正则匹配

  • 正则表达式是一种规则集合,通过特定的规则字符描述,来判断字符串是否符合规则。
    image-20230224234706719
    image-20230224234719463
    image-20230224234733895
-- 查找广东省数据
SELECT * FROM itheima.orders WHERE useraddress RLIKE '.*广东.*';
-- 查找用户地址是:xx省 xx市 xx区
SELECT * FROM itheima.orders WHERE useraddress RLIKE '..省 ..市 ..区';
-- 查找用户姓为:张、王、邓
SELECT * FROM itheima.orders WHERE username RLIKE '[张王邓]\\S*+';
-- 查找手机号符合:188****0*** 规则
SELECT * FROM itheima.orders WHERE userphone RLIKE '188\\S{4}0[0-9]{3}';

UNION联合

  • UNION 用于将多个SELECT语句的结果组合成单个结果集。
  • 每个select语句返回的列的数量和名称必须相同。否则,将引发架构错误。
  1. UNION关键字的作用是?
    • 将多个SELECT的结果集合并成一个
    • 多个SELECT的结果集需要架构一致,否则无法合并
    • 自带去重效果,如果无需去重,需要使用UNIONALL
  2. UNION用在何处
    • 可以用在任何需要SELECT发挥的地方(包括子查询、ISNERTSELECT等)
  • 基础语法
    select ...
    	union [all]
    select ...	
    
CREATE TABLE itheima.course(
               c_id string,
               c_name string,
               t_id string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

LOAD DATA LOCAL INPATH '/home/hadoop/course.txt' INTO TABLE itheima.course;

-- 基础UNION
SELECT * FROM itheima.course WHERE t_id = '周杰轮'
UNION
SELECT * FROM itheima.course WHERE t_id = '王力鸿';

-- 去重演示
SELECT * FROM itheima.course
UNION
SELECT * FROM itheima.course;

-- 不去重
SELECT * FROM itheima.course
UNION ALL
SELECT * FROM itheima.course;

-- UNION写在FROM中 UNION写在子查询中
SELECT t_id, COUNT(*) FROM
    (
        SELECT * FROM itheima.course WHERE t_id = '周杰轮'
        UNION ALL
        SELECT * FROM itheima.course WHERE t_id = '王力鸿'
    ) AS u GROUP BY t_id;

Sampling采用

在这里插入图片描述

TABLE SAMPLE (BUCKET <x> OUT OF <y> [ON <col_name> | rand()])
  • x,y:必填。将源表中的数据划分为y个桶,取其中的第x个桶,桶从1开始编号。
  • col_name:分桶列名即要进行采样的列名。当表不是聚簇表时,col_name与rand()函数必须二选一,当使用rand()函数时表示对输入的数据随机进行分桶。ON语句中最多支持指定10个列。

语法2,基于数据块抽样

SELECT ... FROM tbl TABLESAMPLE(num ROWS I num PERCENT I num(KM|G));
  • num ROWS 表示抽样num条数据
  • num PERCENT表示抽样num百分百比例的数据
  • num(K | M |G)表示抽取num大小的数据,单位可以是K、M、G表示KB、MB、GB
  • 注意:
    • 使用这种语法抽样,条件不变的话,每一次抽样的结果都一致
    • 即无法做到随机,只是按照数据顺序从前向后取。

  • TABLESAMPLE函数的使用
    • 桶抽样方式,TABLESAMPLE(BUCKET x OUT OF y ON(colname rand() ) ),推荐,完全随机,速度略慢块抽样,使用分桶表可以加速
    • 块抽样方式,TABLESAMPLE(num ROWS/num PERCENT」num(K|M|G))速度快于桶抽样方式,但不随机,只是按照数据顺序从前向后取。
-- 随机桶抽取, 分配桶是有规则的
-- 可以按照列的hash取模分桶
-- 按照完全随机分桶
-- 其它条件不变的话,每一次运行结果一致
SELECT username, orderId, totalmoney
FROM itheima.orders tablesample(bucket 3 out of 10 on orders.username);


-- 完全随机,每一次运行结果不同
select * from itheima.orders
tablesample(bucket 3 out of 10 on rand());

-- 数据块抽取,按顺序抽取,每次条件不变,抽取结果不变
-- 抽取100条
select * from itheima.orders
                  tablesample(100 rows);

-- 取1%数据
select * from itheima.orders
                  tablesample(20 percent);

-- 取 1KB数据
select * from itheima.orders tablesample(1K);

Virtual Columns虚拟列

  • 虚拟列是Hive内置的可以在查询语句中使用的特殊标记,可以查询数据本身的详细参数
  1. Hive自前可用3个虚拟列:

    • INPUT_FILE_NAME,显示数据行所在的具体文件
    • BLOCK_OFFSET_INSIDE_FILE,显示数据行所在文件的偏移量
    • ROW_OFFSET_INSIDE__BLOCK,显示数据所在HDFS块的偏移量
      • 此虚拟列需要设置:SET hive.exec.rowoffset=true才可使用
  2. 虚拟列的作用

    • 查看行级别的数据详细参数
    • 可以用于WHERE、GROUPBY等各类统计计算中
    • 可以协助进行错误排查工作
--虚拟列
SET hive.exec.rowoffset=true;

SELECT orderid, username, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK FROM itheima.orders;

SELECT *, BLOCK__OFFSET__INSIDE__FILE FROM itheima.orders WHERE BLOCK__OFFSET__INSIDE__FILE < 1000;

SELECT orderid, username, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK FROM itheima.orders_bucket;

SELECT INPUT__FILE__NAME, COUNT(*) FROM itheima.orders_bucket GROUP BY INPUT__FILE__NAME;

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

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

相关文章

Linux指令二【进程,权限,文件】

进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程&#xff0c;是操作系统进行 资源分配和调度的一个独立单位&#xff0c;是应用程序运行的载体。 一、进程基本指令 1.ps&#xff1a;当前的用户进程 ps 只显示隶属于自己的进程状态ps -aux 显示所有进程…

JavaScript基础入门之输出

目录 目录 前言 系列文章列表 JavaScript初学 思维导图 1&#xff0c;如何在Edge浏览器中执行 JavaScript 1.1,首先按F12 1.2,使用控制台窗口调试js代码 1.2.1,如何使用 1.2.2,进行js测试使用 1.3,Edge小脚本 1.3.1,如何创建脚本 1.3.2,运行脚本 2&#xff0c;Ja…

CRC原理介绍及STM32 CRC外设的使用

1. CRC简介 循环冗余校验&#xff08;英语&#xff1a;Cyclic redundancy check&#xff0c;简称CRC&#xff09;&#xff0c;由 W. Wesley Peterson 于 1961 年首次提出的一种纠错码理论。 CRC是一种数据纠错方法&#xff0c;主要应用于数据通信或者数据存储的场合&#xff…

计算机专业毕业设计项目推荐02-个人医疗系统(Java+原生Js+Mysql)

个人医疗系统&#xff08;Java原生JsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以…

Javase | String字符串-1

目录&#xff1a; 1.字符串 (String)2.new String对象 和 不new String对象时内存分析&#xff1a;2.1 不new String对象时内存分析2.2 new String对象时内存分析 3.以下程序一共创建了几个对象&#xff1f;4.String类中常用“构造方法”String( )String(byte [ ] b)String( by…

字符串逆序(不使用库函数并用递归实现)

文章目录 前言一、题目要求二、解题步骤1.大概框架2.如何反向排列&#xff1f;3.模拟实现strlen4.实现反向排列5.递归实现反向排列 总结 前言 嗨&#xff0c;亲爱的读者们&#xff01;我是艾老虎尤&#xff0c;。今天&#xff0c;我们将带着好奇心&#xff0c;探索一个题目&am…

显示器鼠标滚动时或者拖拽文字变为绿色

新电脑&#xff0c;新显示器&#xff0c;看文章时滚动鼠标滑轮&#xff0c;文字颜色就变为绿色。 拖住文本文档或者浏览器等有文字的窗口&#xff0c;文字也会变为绿色。 静止时一点儿问题没有。 以下视频展示滚动和拖拽的操作&#xff0c;视频看不出变色&#xff0c;只参考…

TuyaOS开发学习笔记(2)——NB-IoT开发SDK架构、运行流程

一、SDK架构 1.1 架构框图 基于 TuyaOS 系统&#xff0c;可以裁剪得到的适用于 NB-IoT 协议产品接入的 SDK。SDK 将设备配网、上下行数据通信、产测授权、固件 OTA 升级等接口进行封装&#xff0c;并提供相关函数。 1.2 目录结构 1.2.1 TuyaOS目录说明 adapter&#xff1a;T…

transformer 总结(超详细-初版)

相关知识链接 attention1attention2 引言 本文主要详解 transformer 的算法结构以及理论解释&#xff0c;代码实现以及具体实现时候的细节放在下一篇来详述。 下面就通过上图中 transformer 的结构来依次解析 输入部分(Encode 侧) input 输出主要包含 两个部分&#xff1a…

[acwing周赛复盘] 第 120 场周赛20230909

[acwing周赛复盘] 第 120 场周赛20230909 总结5146. 最大GCD1. 题目描述2. 思路分析3. 代码实现 5147. 数量1. 题目描述2. 思路分析3. 代码实现 5148. 字符串匹配1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 T1好难啊。T1 数学T2 dfs/数位dpT3 计数贪心 5146. 最大…

第51节:cesium 范围查询(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><el-button-group class="top_item"><el-button type=

render和jsx

render和jsx 1..vue文件最后会变成一个对象。 一个vue文件要么是render写法&#xff0c;要么是模板写法。 为什么React在大型项目中比较适合&#xff1f; 在大型项目中比较适合&#xff1f; 因为React使用jsx&#xff0c;比较灵活。

ISYSTEM调试实践11-Profiler Timeline和软件运行时间分析

一 前言 本文主要内容是讨论嵌入式软件的时间分析&#xff0c;供大家探讨&#xff0c;如果有疑问欢迎探讨。 对于汽车软件&#xff0c;往往对执行的时序和代码运行的时间有着严格要求。对于在主循环内执行的任务函数&#xff0c;不论是手写还是Autosar生成,能否节拍执行到&…

flink时间处理语义

背景 在flink中有两种不同的时间处理语义&#xff0c;一种是基于算子处理时间的时间&#xff0c;也就是以flink的算子所在的机器的本地时间为准&#xff0c;一种是事件发生的实际时间&#xff0c;它只与事件发生时的时间有关&#xff0c;而与flink算子的所在的本地机器的本地时…

利用grafana展示Zabbix数据可视化

导入zabbix数据源&#xff0c;可以直接创建图形了。 单击“”按钮&#xff0c;选择创建仪表盘&#xff0c;单击要创建的图形&#xff0c;图形种类有很多&#xff0c;常用的有图表&#xff0c;列表&#xff0c;报警清单&#xff0c;zabbix触发器&#xff0c;文本。 创建巡检图形…

C++ 多线程 学习笔记

线程睡眠很稳定&#xff0c;但无线程睡眠不稳定 线程调用类方法&#xff1a; 有参数时调用方法&#xff1a; 当参数为引用时&#xff1a; 当同一资源被多个线程同时引用时&#xff0c;为防止资源抢占&#xff0c;使用mutex&#xff0c;互斥锁 头文件#include "mutex"…

蓝桥杯官网练习题(纸牌三角形)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 A,2,3,4,5,6,7,8,9 共 99 张纸牌排成一个正三角形&#xff08;A 按 1 计算&#xff09;。要求每个边的和相等。 下图就是一种排法。 这样的排法可能会有很多。 如果…

thinkphp6-简简单单地开发接口

目录 1.前言TP6简介 2.项目目录3.运行项目运行命令访问规则 4.model db使用db连接配置model编写及调用调用接口 5.返回json格式 1.前言 基于上篇文章环境搭建后&#xff0c;便开始简单学习上手开发接口…记录重要的过程&#xff01; Windows-试用phpthink发现原来可这样快速搭…

Spring Data JPA:简化数据库交互的艺术

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Jmeter 实现 mqtt 协议压力测试

1. 下载jmeter&#xff0c;解压 https://jmeter.apache.org/download_jmeter.cgi 以 5.4.3 为例&#xff0c;下载地址&#xff1a; https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip linux下解压&#xff1a; unzip apache-jmeter-5.4.3.zip 2. 下载m…