Hive学习笔记(HiveQL数据查询基础)

2023-11-12

HiveQL数据查询语句

SELECT语句

SELECT语法结构如下:

SELECT */field1,field2....FROM tableName,

例:sogo表中结构信息如下:
在这里插入图片描述
查询sogo总条数代码:

hive>SELECT cout(*) FROM sogo.sogo;

查询表的前10条数据代码为:

hive> SELECT *From sogo.sogo limit 10;

WHERE语句

SLEECT语句用于选取字段,WHERE语句语句用于过滤条件,
例:查询关键词包含亮剑的前5条记录,并且只显示te,uid,keyword:

hive>SELECT ts,uid,keyword FROM sogou.sogou_500w WHERE keyword like '%亮剑%' limit 5;

GROUP BY语句

GROUP BY语句通常会和聚合函数一起使用,其语意是按照一个或者多个列对结果进行分组,然后使用聚合函数对每个组执行聚合运算。
例如:
统计用户使用搜索引擎的次数,按照uid分组,相同uid的搜索记录被分配到一个组中进行聚合累加运算,
在这里插入图片描述
在这里插入图片描述

HAVING分组筛选

HAVING子句允许通过一个简单的语法,来完成原本需要通过子查询才能GROUPBY 语句产生的分组结果进行条件过滤的任务。
例如:搜索关键词中包含“亮剑”一词中用户及关键词搜索次数,并且过滤出搜索次数大于30的用户。

hive> SELECT t.uid,t.keyword,count(*) as cnt FROM (SELECT * FROM sogo.sogo WHERE keyword like '%亮剑%') t GROUP BY t.uid,t.keyword HAVING cnt>=30;

统计用户查询次数大于5次的用户总数,首先统计各个用户的查询次数,其次在用HAVING子句吧查询次数大于5次的用户过滤出来,代码如下:

hive>SELECT count(t.uid) FROM (SELECT uid,count(*) as cnt FROM sogo.sogo GROUP BY uid HAVING cnt>5)t;

在这里插入图片描述

ORDER BY语句和SORT BY语句

ORDER BY会对查询结果执行一次全局排序也就是说所有数据都通过一个reduce人进行处理的过程。对于大数据集,这个过程会消耗太多时间。
SORT BY语句,该语句只会在reducer中对数据排序,也就是说一个局部排序,因此可以保证每个reduce人的输出数据都是有序的。排序默认是升序排序,加DESC可以变为降序排序,升序关键词为ASC
例:统计用户搜索引擎的频率并将搜索频率最高的前15用户ID及其搜索次数统计出来,操作命令如下:

hive>select uid,count(*)  as cnt from sogo.sogou group by uid order by cnt desc limit 15;

在这里插入图片描述

HiveQL查询语句

HiveQL查询语句就是多表之间查询语句。

JOIN语句

我们吧Hive提供的一套类SQL查询语句称为HiveQL连接查询语句,其中包含了大量的连接查询方式,如内连接,自然连接外连接和自连接。
建立两个表,一个表为dep(部门表),表中含有deptno,dname,loc。
另一个表为emp(员工表),表中含有empno,ename,job,mgr,sal,deptno。

自连接

也可以简写成join,只有进行连接的两个表中,都存在与连接标准相匹配的数据才会保存下来,内连表连接分为等值连接和不等值连接。
等值连接是指,在使用等号操作符的连接。
例如:想查看部门30员工的姓名、职位、所属部门编号及部门名称。
员工姓名,职位在emp表中,部门编号和部门名称在部门表中dept中,做等值查询。

hive> select emp.ename,emp.job,dept.deptno,dept.dname from emp inner join dept on emp.deptno=dept.deptno where dept.deptno=30;

在这里插入图片描述

不等值连接是指使用>、<、>!、<!等操作符的连接
例如:
我们部门想要获得编号不等于10的所有员工的姓名、职位以及员工所属部门名称和部门地理位置信息:

hive> select emp.ename,emp.job,dept.dname,dept.loc from emp inner join dept on emp.deptno=dept.deptno where dept.deptno!=10;

在这里插入图片描述

自然连接

自然连接是在广义笛卡尔积中选出同名属性上符合相等条件的元祖,在进行投影,去掉同名属性,组成新的关系。自然连接死在两张表中寻找那些数据类型和列名都相同的字段,然后将它们连接起来。
例:我们想查询部门编号为10和30的所有员工的姓名、职位和部门名称:

hive>select ename,job,dname  from emp natural join dept where dept.deptno in('10','30');

在这里插入图片描述

外连接

外连接分为左外连接查询、右外连接和全外连接。

左外连接

左外连接是以连接中的左表为主,返回左表的所有信心和右表中符合连接条件的信息,对于右表中不符合连接条件的则补空值。
例如:查询所有员工信息和他们所在的部门信息,该需求涉及员工表和部门表dept。我们要先查询出所有员工的基本信息,其次是员工所在的部门信息,因此采用左外连接的方式,代码如下:

hive> selsect e.empno,e.ename,e.job,d.deptno,d.dname,d.loc from emp e left outer join dept d on e.deptno=d.deptno;

在这里插入图片描述

右外连接

右外连接以连接中的右表为主,返回右表中所有信息和左表中符合连接条件的信息对于左表中不符合的条件则补空值。
例:我们要查询部门所有信息和部门中员工的基本信息,那么有的部门有可能是刚刚建立还没有员工所以要采取右外连接,代码如下:

hive> select e.ename,e.job,d.deptno,d.dname,d.loc from emp e right outer join dept d on e.dept=d.deptno;

在这里插入图片描述

全外连接

查询结果等于左外连接和右外连接的。
例:员工表和部门表中所有信息都被查询出来,当然不符合连接条件的emp和dept都各自补空值。

hive>selecft e.*,d.* from emp e fulle outer join dept d on e.deptno=d.deptno;

在这里插入图片描述

自连接

连接的表时同一张表,使用自连接可以将自审表的一个镜像当成另一个表来对待满意自连接适用于表自己和自己的连接查询。
例如:在员工表emp中我们想查询经理的下属员工有哪些,那我们清楚经理和下属又有一定的从属关系,所以这时候需要用表的自连接来实现,代码如下:

hive>select e1.empno,e2.empno,e2.ename,e2.job,e2.sal  from emp e1,emp e2  where e1.empno=e2.mgr;

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive学习笔记(HiveQL数据查询基础) 的相关文章

  • 查看登录设备

    我想查看Log在设备上 即System out println 我可以查看DDMS但如何在运行时在设备屏幕上查看APK文件 还有一个适用于 Android 的 Logcat 应用程序 code google com p android ra
  • Java 拖放图像并在拖动时显示图像缩略图

    我有一个带有图像节点的网格布局 我想在我的应用程序中添加 dnd 功能 例如 当我将图像节点拖放到目标 JPanel 时 进行一些操作 例如以原始大小显示 删除等 我已经实现了这与一种使用 Transferhandler 的方法和一种使用
  • 为什么要分离接口和实现?

    在生产代码中 我经常看到定义如下的类 public interface SomeComponent Some methods public class SomeComponentImpl implements SomeComponent S
  • Java - Servlet 的默认 contentType

    在servlet中 通常我们会指定一个contentType 然后我们就可以打印出html代码了 response setContentType text html PrintWriter out response getWriter 如果
  • 动态元素 ID 到 setId(int) - Android

    我看到了语法定义setId int and findViewByID int 但我们如何使用findViewById R id row1 我尝试使用这个 Object1 setId Integer parseInt repeat 它没有显示
  • Swing 是否支持 Windows 7 风格的文件选择器?

    我刚刚添加了一个标准 打开文件 与我正在编写的一个小型桌面应用程序的对话 基于JFileChooserSwing 教程的入口 http download oracle com javase tutorial uiswing componen
  • Java俄罗斯方块旋转

    我知道这个问题已经被问了很多 但我想知道如何旋转俄罗斯方块 我已经做了一个又长又糟糕的解决方案 大约 170 行代码 但应该有更简单的方法来做到这一点 我的俄罗斯方块由 4 个块组成 它们都知道它们在矩阵中的位置 行和列 Matrix本身是
  • Android 是否可以获取用户和设备所在国家/地区的货币代码?

    是否可以获取用户和设备所在国家 地区的货币代码 我想将用户当前国家 地区的国家 地区代码设置为默认国家 地区 我们在 Android 中有解决方案吗 由于这段代码可能对您有帮助 public class CurrencyTest publi
  • 如何配置jackson属性命名策略?

    此代码不起作用 Configuration public class RepositoryRestMvcConfig extends RepositoryRestMvcConfiguration Bean Override public O
  • 如果Jetty的密钥库中有多个证书,它如何选择?

    我们的系统中有一些代码用于自动将自签名证书生成到密钥库中 然后由 Jetty 使用 如果给定主机的密钥已经存在 那么什么也不会发生 但如果它不存在 我们会生成一个新密钥 如下所示 public void generateKey String
  • 在其抽象超类中使用子类的泛型类型?

    在我的代码中有以下抽象超类 public abstract class AbstractClass
  • 导入数据期间解析日期格式的最佳方法

    我创建了在数据导入 400 K 记录 期间解析视图不同日期格式的方法 我的方法捕获 ParseException 并尝试在不同时使用下一种格式解析日期 问题 在数据导入期间设置正确的日期格式是更好的方法 更快 吗 private stati
  • 需要在 java api 中的 Solr 搜索中搜索文本及其周围的几行

    我正在使用 solr 7 7 2 并且我使用 solrj 在 Solr 中编写了一个 Java 程序 该程序在一个巨大的文本文件中搜索单词 我使用以下代码来显示代表整个文本的搜索结果 SolrQuery params new SolrQue
  • 如何使用 Java glob 模式搜索(区分大小写)文件?

    我正在检查获取路径匹配器 http docs oracle com javase 7 docs api java nio file FileSystem html getPathMatcher 28java lang String 29的方
  • 如何从java程序中编译.java文件[重复]

    这个问题在这里已经有答案了 可能的重复 从 Java 内部编译外部 java 文件 https stackoverflow com questions 10889186 compiling external java files from
  • 使用java服务中的Zxing库从单个图像文件中读取多个条形码

    您好 我已经创建了一个java服务 用于从此处的图像中读取条形码 我使用Zxing库来解码此处的文本 挑战是 如果一个带有单个条形码的文件工作正常 如果有多个条形码 它会产生不相关的结果 我在下面给出了我的代码 pom xml
  • Spring JPA (Hibernate) Entity Manager 何时将连接返回到连接池?

    在我的 java 进程中 我使用以下 spring 配置连接到 MySql Configuration EnableTransactionManagement PropertySources PropertySource classpath
  • 如何在 JUnit5 中为测试套件设置自定义测试执行顺序?

    我在 JUnit5 上进行了大量测试 并在多个线程中并行运行 还有有关每次测试时间的信息 我想在最长的测试开始时运行 并将最快的测试留在最后以优化公共执行时间 我还没有找到在 JUnit5 中执行此操作的方法 版本中5 4有一个org ju
  • 遍历多行字符串

    我得到一些数据 def data some useless text n even more n finally interesting text 我怎样才能得到其中 有趣的部分 所以基本上所有行都不是以 开头的 Groovy 的一种选择是
  • 扫描图像到可读文本

    我想知道是否有一种方法可以通过编写代码来将带有文本的扫描图像转换为可读文本 那可能吗 OCRTools http www ocrtools com是我用于 net 的 对于Java 我用过Aspire http asprise com pr

随机推荐

  • 如何利用路由器连接wifi并将wifi网络分发出去

    有时候 我们的wifi网络设置了最大连接数 该数字小于我们的需求数 我们可以考虑利用路由器来进一步分发wifi网络 下面以tp link的产品为例介绍如何分发网络 1 开启路由器 让其发出广播信号 2 使用电脑无线功能连接该路由器 登录路由
  • Vue项目this.$router.push()找不到push问题

    在使用Vue cli开发项目时 我喜欢使用Es6语法 但在使用语法跳路由时却会受到报错 因为Es6的箭头函数的this指向的是最近的一个this 而不是全局的 所以会造成找不到路由方法的问题 解决方法 使用传统语法 XXX function
  • 7-4 多态练习-计算面积

    定义三个类 父类 抽象类 GeometricObject代表几何形状 子类Circle代表圆形 子类Rectangle代表矩形 具体属性和方法如下 父类 抽象类 GeometricObject 属性 private String color
  • 华硕主板BIOS设置虚拟化技(virtualization technology)

    华硕主板BIOS设置虚拟化技 virtualization technology 背景 环境介绍 win安装docker介绍 bios虚拟技术是否开启检查 虚拟技术开启 打开bios设置 虚拟技术设置 参考文献 背景 从2013开始 doc
  • A,NS,cname,forward,txt,aaaa记录讲解

    最近刚好处理DNS问题比较多 对DNS复习一下基础知识 在DNS域名解析中 记录存在很多种 例如主要的A记录 NS记录 CNAME记录 FORWARD记录 还有X记录等等 现在就对它们的区别与联系做总结 1 A记录 A记录又称IP指向 用户
  • 前端面试题总结带答案(持续更新)

    Vue面试题 1 什么是 vue 生命周期 Vue 实例从创建到销毁的过程 就是生命周期 也就是从开始创建 初始化数据 编译模板 挂载Dom 渲染 更新 渲染 卸载等一系列过程 我们称这是 Vue 的生命周期 它可以总共分为8个阶段 创建前
  • 音乐铃声解析提取API接口

    接口地址 https api hackeus cn api kgring 请求协议 HTTP HTTPS 请求方式 GET POST 返回格式 JSON 请求示例 https api hackeus cn api kgring api ke
  • intellij IDEA中我一运行程序,就提示我edit configuration

    因为你直接使用open来打开别人的项目 所以有问题 正确方法 重新打开intellij界面 使用import来导入别人的项目
  • [UnityShader入门精要读书笔记]06.顶点/片元着色器基本结构

    Unity Shader基本结构包含Shader Properties SubShader FallBack等语义块 结构如下 Shader MyShaderName Properties 属性 SubShader 针对显卡A的SubSha
  • GoWeb——处理XML文件

    目录 处理XML文件 1 解析XML文件 2 生成XML文件 处理XML文件 XML eXtensible Markup Language 可扩展标记语言 是一种数据表示格式 可以描述非常复杂的数据结构 常用于传输和存储数据 1 解析XML
  • x86 calling conventions

    原文地址 http en wikipedia org wiki X86 calling conventions x86 calling conventions From Wikipedia the free encyclopedia Thi
  • 无监督分类的4种方法

    1 等宽法 类似于制作频数分布图 将属性分布值分为几个等分的分布区间 2 等频法 将相同数量的记录放入每个区间 3 基于聚类的分析方法 将属性按照K means算法进行聚类 然后根据聚类的分类 将同一聚类的记录合并到同一组内 4 模拟退火法
  • mysql 修改 sql model_mysql 开发基础系列22 SQL Model(带迁移事项)

    一 概述 与其它数据库不同 mysql 可以运行不同的sql model 下 sql model 定义了mysql应用支持的sql语法 数据校验等 这样更容易在不同的环境中使用mysql sql model 常用来解决下面几类问题 1 通过
  • tensorflow2.0(一)----多层感知机(MLP)

    在TensorFlow 1 X版本中 调用tf enable eager execution 函数启动Eager Execution模式 则需要调用tf compat v1 disable eager execution 函数 张量流使用张
  • ubuntu20.04 安装 Qt5.15

    目录 安装前工作 选择安装QT的哪个版本 安装时候选择哪些组件 安装Qt5 15 在线安装 我选择的组件 源码包安装 测试 安装前工作 ubuntu20 04 3安装Qt6 22操作步骤 ubuntu安装qt6 sonicss的博客 CSD
  • php header expire,解决PHP Expires 导致CDN出现TCP_MISS

    因为这个缘故 CDN的 x Cache总是MISS TCP MISS 导致要回源 查了半个小时 终于找到原因了 问题图片 来自session c Authors Sascha Schumann Andrei Zmievski CACHE L
  • Mac电脑安装win10虚拟机,然后安装ensp教程

    我是M1版本的macbook air 找了海量资料经过不断拼凑出来了一份还算详细的教程吧 分享给用苹果电脑的网络初学者 目前这个未安装virtualbox的版本经过简单测试运行正常 如有问题欢迎兄弟们来讨论批评 一 在PD里面安装win10
  • idea import顺序_IntelliJ IDEA 自动导包设置(Auto Import)

    自动导包 Auto Import Auto Import 功能可以帮助我们自动删除无用的包 未被引用的 以及自动 Import 填充尚未导入的包 完全智能化地帮助我们在开发程序时 省略了导包的操作 大大优化了开发的效率 设置步骤 Setti
  • Java生成并导出word文档,操作word文档

    word文档作为办公的重要文件格式 有时候我们会需要我们的java程序直接将计算得到的结果生成word文档 方便取用 这里我们使用第三方包iText来实现 1 首先在Eclipse上新建一个Java工程 我取名为Java2Word 本经验只
  • Hive学习笔记(HiveQL数据查询基础)

    Hive学习笔记 HiveQL数据查询基础 HiveQL数据查询语句 SELECT语句 WHERE语句 GROUP BY语句 HAVING分组筛选 ORDER BY语句和SORT BY语句 HiveQL查询语句 JOIN语句 自连接 自然连