HIVE简单数据查询

news2024/11/25 16:20:57

HIVE简单数据查询


1.where


    WHERE + 过滤条件  
        between/  in /  is NULL / IS NOT NULL / > < = ! ...
        如果多个存在多个过滤条件 可以用 AND OR 进行条件关联  或者是用NOT 进行条件结果取反

2.JOIN


    JOIN 内连接  左外连接  右外连接      自连接  满连接
 

创建部门表:
create table learn2.emp(
    EMPNO int
    ,ENAME string
    ,JOB string
    ,MGR int
    ,HIREDATE string
    ,SAL int
    ,BONUS int
    ,DEPTNO int

row format delimited
fields terminated by ',';

load data local inpath "/usr/local/soft/hive-3.1.2/data/emp.txt" into table learn2.emp;

创建部门表:
create table learn2.dept(
    DEPTNO int
    ,DEPTNAME string
    ,DEPTADDR string

row format delimited
fields terminated by ',';
load data local inpath "/usr/local/soft/hive-3.1.2/data/dept.txt" into table learn2.dept;

1)内连接

注意:关联时一定要跟上关联条件

select t1.ename,t2.deptno,t2.deptname from learn2.emp t1 join learn2.dept t2 on t1.deptno=t2.deptno;

2)左外连接

select t1.ename,t2.deptno,t2.deptname from learn2.emp t1 left join learn2.dept t2 on t1.deptno=t2.deptno;

3)右外连接

select t1.ename,t2.deptno,t2.deptname from learn2.emp t1 right join learn2.dept t2 on t1.deptno=t2.deptno;

select count(t1.ename) numeber,t1.deptno from emp t1 group by t1.deptno;

select count(1) numeber,t1.deptno from emp t1 group by t1.deptno;

3.排序

1)order by 

select t1.deptno,t1.sal from emp t1 order by t1.sal;

select t1.deptno,t1.sal from emp t1 order by t1.sal desc; 倒序

通过查看MAPREDUCE日志 可以看到 Reduce: 1  ORDER BY 中默认的reduce数量只能为1
    那么为什么Reduce数量只有一个
        在实际处理数据过程中,要尽量避免使用全局排序

**** set mapreduce.job.reduces; 表示查看当前reduce数量
**** set mapreduce.job.reduces = 3;表示设置当前reduce数量为3

2)sort by 

select t1.ename,t1.sal from emp t1 sort by t1.sal desc;

通过设置reduce数量为3 查询出的整体结果为乱序 局部为倒序 

导出一下数据

通过输出的结果中三个文件可以看出 sort by 是分区内有序

3)多字段排序

1)order by 多字段排序
select t1.deptno,t1.sal from emp t1 order by t1.deptno,t1.sal desc;

2)sortby 多字段排序
select t1.deptno,t1.sal from emp t1 sort by t1.deptno,t1.sal desc;

-- 结果也是分区间无序,分区内有序

4)distribute by + sort by

搭配使用进行排序
    distribute by:指定按某列数据进行分区操作,和之前MR学习中的自定义分区类似

select t1.deptno,t1.sal from emp t1 sort by t1.sal desc;

select t1.deptno,t1.sal from emp t1 distribute by t1.deptno sort by t1.sal desc;

5) cluster by

也表示排序操作 但是不能对数据做倒序, cluster by 表示对一个列数据进行分区排序

cluster by = distribute by + sort by

SELECT
T1.SAL
FROM learn2.emp T1 cluster by T1.SAL ;
+---------+
| t1.sal  |
+---------+
| 300     |
| 1500    |
| 2850    |
| 3000    |
| 3000    |
| 1300    |
| 1600    |
| 800     |
| 950     |
| 1100    |
| 1250    |
| 1250    |
| 2450    |
| 2975    |
| 5000    |


SELECT
T1.SAL
FROM learn2.emp T1 distribute by T1.SAL  SORT BY T1.SAL;

+---------+
| t1.sal  |
+---------+
| 300     |
| 1500    |
| 2850    |
| 3000    |
| 3000    |
| 1300    |
| 1600    |
| 800     |
| 950     |
| 1100    |
| 1250    |
| 1250    |
| 2450    |
| 2975    |
| 5000    |
+---------+

4.去重

select distinct t1.deptno from emp t1;

5.分桶操作

1)创建分桶表

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
     [(col_name data_type [COMMENT col_comment], ...)]
    [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

--根据 给定的列进行 分桶排序 指定存入 N 个桶中

-- 需求:
    将bucket.txt中的数据分成4个桶进行存储

CREATE TABLE IF NOT EXISTS learn2.bucket_table(
id int,name STRING
)
CLUSTERED BY(id) INTO 4 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

2)插入数据

load data local inpath "/usr/local/soft/hive-3.1.2/data/bucket.txt" into table learn2.bucket_table;

我们在插入数据时 出现了报错信息

所以 我们要开启分桶操作


--启用桶表
set hive.enforce.bucketing=true;
--限制对桶表进行load操作
set hive.strict.checks.bucketing = false;

如果加载数据的时候提示文件不存在,那么可以将数据先上传至HDFS,

之后再去加载数据至表中,同时需要开启桶表的支持,对桶表的load操作
    dfs -put /usr/local/soft/hive-3.1.2/data/bucket.txt  /data/

再次运行发现还是会报错 我们将Reduce数量设置为-1

load data inpath "/data/bucket.txt" into table learn2.bucket_table;


    通过查看表对应HDFS上的路径 可以看到数据分为4分,这样有什么好处?

    通过查看000000_0文件数据可以看到,ID列中对4取余都为0


    通过查看000001_0文件数据可以看到,ID列中对4取余都为1

    这样我们后面去表中取数据,如果对id进行过滤,如下SQL语句
    SELECT * FROM learn2.bucket_table WHERE id in ('4','1');
    那么它的执行逻辑为: 对需要查找的 id ('4','1') 进行取余,
        如果余数为0那么就去000000_0文件中加载数据 
        如果余数为1那么就去000001_0文件中加载数据 


    这样就可以避免加载不必要的数据,提高执行效率

    2> 查看桶的数量
    DESC FORMATTED learn2.bucket_table; 中的 Num Buckets: 4 参数查看具体对应的桶数

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

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

相关文章

Unity 性能优化之LOD技术(十)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 LOD技术效果一、LOD技术是什么&#xff1f;二、LODGroup组件介绍三、LODGroup组件使用步骤添加组件添加模型 四、Project Settings中与LOD组件相关参数总结 L…

视觉图像信息处理与FPGA实现第九次作业——直方图均衡

RAM的B站视频解析 RAM的文档 一、65536x8位的单端口RAM timescale 1ns / 1ps //SPRF Single Port Read/Write Function //65535 是RAM中总的字数&#xff0c;也就是存储深度&#xff0c;X8表示每个字是8位的 module SPRF65536X8(Q,CLK,CEN,WEN,A,D );//输出寄存器Qoutput [7…

k8s集群统一设置时间

1 安装时间同步需要软件 yum install -y ntpdate2 设置时间 2.1 手动设置时间 date -s "20190712 18:30:50" hwclock --systohc2.2 在线更新时间 ntpdate 0.asia.pool.ntp.org # 强制把系统时间写入CMOS clock -w3 强制把系统时间写入CMOS hwclock作用与clock相…

N7552A是德科技N7552A电子校准件

181/2461/8938产品概述&#xff1a; 更小巧轻便的 2 端口模块&#xff0c;支持 3.5 mm 或 N 型 50 Ω 连接器&#xff0c;能够将校准时间缩短一半 特点 频率范围&#xff1a;直流至 9 GHz 使用 N 型或 3.5 mm 连接器 更小巧轻便的 2 端口电子校准件&#xff08;ECal&#xff…

电脑(爱好者) :基础知识1 了解你的电脑

读懂cpu 您想了解关于您的电脑的信息吗&#xff1f;CPuz是一款常用的系统信息工具&#xff0c;可以提供关于CPU、主板、内存等硬件信息的详细情况。您可以下载并运行该软件&#xff0c;然后查看您的电脑硬件配置信息。 图片来源于网络 CPU-Z 简介 CPU-Z 是一款功能强大且易于使…

迅为RK3568开发板资料说明4750+页专属文档专为3568编写

iTOP-3568开发板采用瑞芯微RK3568处理器&#xff0c;内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz&#xff0c;RK809动态调频。集成了双核心架构GPU&#xff0c;ARM G52 2EE、支持OpenGLES1.1/2.0/3.2、OpenCL2.0、Vulkan1.1、内嵌高性能2D加速硬件。 内置独立NPU,算力…

绝地求生:新型小队对决系统或将择日上线?

就在刚才&#xff0c;PUBG官博发布了一则短视频&#xff0c;视频内容为两只小队通过竞争积分排名产生不断地变化。 原文官博 视频内容 在这里我猜测为之前官方在2024工作计划视频中介绍过的新型小队对决系统&#xff1a; 据当时的介绍称&#xff1a;这个系统中&#xff0c;己方…

大数据基础工程技术团队4篇论文入选ICLR,ICDE,WWW

近日&#xff0c;由阿里云计算平台大数据基础工程技术团队主导的四篇时间序列相关论文分别被国际顶会ICLR2024、ICDE2024和WWW2024接收。 论文成果是阿里云与华东师范大学、浙江大学、南京大学等高校共同研发&#xff0c;涉及时间序列与智能运维结合的多个应用场景。包括基于P…

2024DCIC海上风电出力预测Top方案 + 光伏发电出力高分方案学习记录

海上风电出力预测 赛题数据 海上风电出力预测的用电数据分为训练组和测试组两大类&#xff0c;主要包括风电场基本信息、气象变量数据和实际功率数据三个部分。风电场基本信息主要是各风电场的装机容量等信息&#xff1b;气象变量数据是从2022年1月到2024年1月份&#xff0c;…

大数据Scala教程从入门到精通第三篇:Scala和Java的关系

一&#xff1a;Scala和Java的关系 1&#xff1a;详解 一般来说&#xff0c;学 Scala的人&#xff0c;都会 Java&#xff0c;而 Scala 是基于 Java 的&#xff0c;因此我们需要将 Scala和 Java 以及 JVM 之间的关系搞清楚&#xff0c;否则学习 Scala 你会蒙圈 Scala可以使用SDK…

力扣70 爬楼梯 C语言 动态规划 递归

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2…

leetCode75. 颜色分类

leetCode75. 颜色分类 题目思路 代码 class Solution { public:void sortColors(vector<int>& nums) {for(int i 0, j 0, k nums.size() - 1; i < k;){if(nums[i] 0) swap(nums[i],nums[j]);else if(nums[i] 2) swap(nums[i],nums[k--]);else if(nums[i] …

前端数据可视化基础(折线图)

目录 前言&#xff1a; 画布&#xff1a; 折线图 (Line Chart): 前言&#xff1a; 前端中的数据可视化是指将大量数据以图形或图像的形式在前端页面上展示出来&#xff0c;以便用户能够更直观地理解和分析这些数据。数据可视化是一种强大的工具&#xff0c;它利用了人类视觉…

韩顺平0基础学Java——第5天

p72——p86 今天同学跟我说别学java&#xff0c;真的吗&#xff1f;唉&#xff0c;先把这视频干完吧。 逻辑运算符练习 x6&#xff0c;y6 x6&#xff0c;y5 x11&#xff0c;y6 x11&#xff0c;y5 z48 错了&a…

深度学习实战76-基于目标检测YOLOv5模型的迁移学习使用方法,YOLOv5的原理与结构

大家好,我是微学AI,今天给大家介绍一下深度学习实战76-基于目标检测YOLOv5模型的迁移学习使用方法,YOLOv5的原理与结构。YOLOv5(You Only Look Once version 5)是一种先进的目标检测算法,基于深度学习的单阶段目标检测模型。它的主要原理是通过一次前向传播就同时预测图像…

关于vs2019 c++ STL 中容器的迭代器的 -> 运算符的使用,以 list 双向链表为例

&#xff08;1&#xff09;如下的结构体 A &#xff0c;若有指针 p new A() &#xff1b;则可以使用 p->m &#xff0c; p->n 解引用运算符。 struct A { int m ; int n; } 对于 STL 中提供的迭代器&#xff0c;提供了类似于指针的功能。对迭代器也可以使用 -> 运算…

解析Linux键盘组合键产生信号的完整过程:从硬件中断到信号发送

前言 每一个了解Linux的都知道这样一个知识&#xff0c;CtrlC组合键能够终止一个进程。 个人了解进程相关知识之后知道&#xff0c;一个进程被终止只会有有三种情况&#xff1a; 代码运行完毕&#xff0c;结果正确代码运行完毕&#xff0c;结果不正确代码运行异常&#xff…

alpine安装中文字体

背景 最近在alpine容器中需要用到中文字体处理视频&#xff0c;不想从本地拷贝字体文件&#xff0c; 所以找到了一个中文的字体包font-droid-nonlatin&#xff0c;在此记录下。 安装 apk add font-droid-nonlatin安装好后会出现在目录下/usr/share/fonts/droid-nonlatin/ 这…

【6D位姿估计】GDR-Net 单目几何引导的直接回归模型

前沿 本文介绍6D位姿估计的直接回归方法GDR-Net&#xff0c;它从单个RGB图像中确定物体在三维空间中的位置和方向。 它是一个端到端模型&#xff0c;与传统的间接方法不同&#xff0c;GDR-Net可以通过反向传播完全训练&#xff0c;简化了训练过程。 论文地址&#xff1a;GDR…

HCIP的学习(13)

第五章&#xff0c;重发布和路由策略 重发布 ​ 在路由协议的边界设备上&#xff0c;将某一种路由协议的路由信息引入到另一种路由协议中&#xff0c;这个操作被称为路由引入或者路由重分发。----技术本质为重发布。 条件 必须存在ASBR设备&#xff08;路由边界设备&#x…