HiveSQL基础Day04

一、CTE语法

CTE语法类似子查询,可以将一个select语句计算的结果当成一个新的临时表使用

-- 子查询,将子查询的结果当做表使用
select empno,ename from (
select * from emp) t1;
-- 基本用法
with 临时表名 as(查询语句)
select * from 临时表名
​
-- 多个计算结果保存
with tb1 as(查询语句),,tb2 as(查询语句 select * from tb1),tb3 as(查询语句).....
select * from tb3 join tb2
with tb1 as(select * from emp)
select ename,sal from tb1;

将如下子查询改为cte语法实现

SELECT t2.shop, t2.user_id, t2.cnt
FROM (SELECT t1.*,row_number() over (partition BY t1.shop ORDER BY t1.cnt DESC) rkFROM (SELECT user_id, shop, count(*) AS cntFROM test2GROUP BY user_id, shop) t1) t2
WHERE rk <= 3;
-- CTE语法可以方便代码阅读,将多个计算步骤拆分
with tb1 as(SELECT user_id, shop, count(*) AS cntFROM test2GROUP BY user_id, shop
),tb2 as(SELECT tb1.*,row_number() over (partition BY tb1.shop ORDER BY tb1.cnt DESC) rkFROM tb1)
select * from tb2 where rk <=3;

窗口函数和CTE语法是mysql8.0以上版本支持

二、爆炸函数和合并函数

函数的分类:

udf(user define function) 函数 数据输入多少,返回多少行数据 计算是一进一出

  • hive中的大部分函数都是udf函数

udaf (user define aggregation function)函数 输入多行数据返回一行结果 多进一出

  • 聚合方法

    • sum

    • avg

    • count

    • max

    • min

udtf函数 输入一行返回多行 一进多出

  • explode方法

    • 爆炸函数,可以将数组中的数据拆分多行

create table tb_user(id int,name string,hobby string
)row format delimited fields terminated by ',';
​
select id,name,split(hobby,'-') as hobby  from tb_user;
-- explode不能直接和其他字段出现在select中
select explode(split(hobby,'-')) as hobby  from tb_user;
-- 使用侧视图的方法和其他字段一起展示
-- lateral view 爆炸函数 表名 as 字段名
select id,name,new_hobby from tb_user lateral view explode(split(hobby,'-')) tb1 as new_hobby;
​
-- 不能简单使用join进行关联数据
select * from tb_user join (select explode(split(hobby,'-')) as hobby  from tb_user) tb1;
  • collect方法

    • 将一列数据中的多行数据合并成一行

-- collect_list 合并后不会去重
select collect_list(name) from tb_user;
-- collect_list 合并会对数据进行去重
select collect_set(name) from tb_user;

用户访问数据

create table tb_visit(id int,name string,url string
)row format delimited fields terminated by ',';
​
select * from tb_visit;
​
select collect_set(name) from tb_visit;
​
-- 统计不同用户访问了哪些网址
select name,collect_set(url) from tb_visit group by name;

三、随机抽样

从海量数据中随机抽取部分样本数据进行计算得到的结果趋势和整体趋势一致

  • 格式

SELECT ... FROM tbl TABLESAMPLE(BUCKET x OUT OF y ON(colname | rand()))
​
y表示将表数据随机划分成y份(y个桶)
x表示从y里面随机抽取x份数据作为取样
colname表示随机的依据基于某个列的值
rand()表示随机的依据基于整行

随机抽样的原理,是先将数据进行分桶,在从多个分桶中抽取数据

create table tb_stu(id int,name string,age int,gender int,dt string
)row format delimited fields terminated by ',';
​
-- 指定字段进行分桶抽样
select * from tb_stu tablesample (bucket 2 out of 30 on name);
-- 随机抽取
with tb1 as (select *from tb_stu tablesample (bucket 2 out of 20 on rand()))
select gender,count(*)
from tb1 group by gender;  

四、虚拟列(了解)

hive表中自带字段列,在进行select查询时没有指定,不会出现在 查询结果中

可以在select中指定这些字段显示内容

INPUT__FILE__NAME,显示数据行所在的具体文件
BLOCK__OFFSET__INSIDE__FILE,显示数据行所在文件的偏移量
ROW__OFFSET__INSIDE__BLOCK,显示数据所在HDFS块的偏移量 此虚拟列需要设置:SET hive.exec.rowoffset=true 才可使用
select *,INPUT__FILE__NAME from brand;
select * from brand where INPUT__FILE__NAME='hdfs://node1:8020/user/hive/warehouse/pydata.db/brand/000001_0';
​
select *,BLOCK__OFFSET__INSIDE__FILE from tb_stu;
SET hive.exec.rowoffset=true;
select *,ROW__OFFSET__INSIDE__BLOCK from tb_stu;
​

五、快速建表

基于已经存在的表创建新的表,对原始表复制一个新的表

  • like语法

    • 将原始表的元数据(也就是表的名字字段等信息复制一份),不会复制行数据

    • 创建之后是一个空表

create table 新的表名 like 原始表名
  • as语法

    • 会将原始数据表的内容全部复制一份到新表中

create table 新的表名 as select * from 原始表

select * from tb_user;
create table tb_user_new like tb_user;
select * from tb_user_new;
​
create table tb_user_new_new as select * from tb_user;
​
select * from tb_user_new_new;

六、视图

视图本质是将select查询语句进行保存,每次进行数据计算时,如果使用相同的sql语句,就不需要再重新写一遍

create view 视图名  as 查询语句
-- 将计算的sql语句保存在视图中
create view sum_view as select sum(if(name is not null,1,0) ) from tb_user;
​
-- 当查询视图时,就会自动执行视图中的sql语句
select * from sum_view;

mysql中也是可以使用视图

-- (1)修改表字段注解和表注解
use hive3;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
​
-- (2)修改分区字段注解
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
​
-- (3)修改索引注解
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

七、数据压缩和存储格式

7-1 数据压缩

hive的表的行数据是以文件方式存在hdfs

优点:

减少存储磁盘空间,降低单节点的磁盘IO。

由于压缩后的数据占用的带宽更少,因此可以加快数据在Hadoop集群流动的速度,减少网络传输带宽。

缺点:

需要花费额外的时间/CPU做压缩和解压缩计算。

压缩格式压缩格式所在的类
Zliborg.apache.hadoop.io.compress.DefaultCodec
Gziporg.apache.hadoop.io.compress.GzipCodec
Bzip2org.apache.hadoop.io.compress.BZip2Codec
Lzocom.hadoop.compression.lzo.LzoCodec
Lz4org.apache.hadoop.io.compress.Lz4Codec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

默认文件的压缩方式是Zlib,可以在建表的时候指定表数据按照那种压缩方式存储数据,zlib压缩的占用空间少,但是消耗的时间

实际开发建议使用Snappy 压缩空间和速度比较均衡

7-2 存储格式

表数据存储方式有两种

一个行存储 一个列存储

逻辑表中的数据,最终需要落到磁盘上,以文件的形式存储,有两种常见的存储形式。行式存储和列式存储。

Hive支持的存储数的格式主要有:TEXTFILE(行式存储) 、SEQUENCEFILE(行式存储)、ORC(列式存储)、PARQUET(列式存储)。


默认的存储格式是TEXTFILE(行式存储)

列存储的数据会转为二进制存储,所以文件打开后乱码

STORED AS orc tblproperties ("orc.compress"="SNAPPY");
create table tb_visit_new(id int,name string,url string
)  -- stored as指定orc(列存储)存储方式  tblproperties("orc.compress"="SNAPPY") 指定压缩方式stored as orc tblproperties("orc.compress"="SNAPPY");
​
insert into tb_visit_new select * from tb_visit;
​
​
select * from tb_visit_new;

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

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

相关文章

SpringAI初体验之HelloWorld

目录 前言1.准备工作2.初始化项目3.解决问题3.1 Connection Time out 连接超时问题3.2 You exceeded your current quota 额度超限问题 4.访问调用5.总结 前言 在逛SpringBoot页面时突然看到页面上新增了一个SpringAI项目,于是试了一下&#xff0c;感觉还行。其实就是封装了各家…

Harmony鸿蒙南向外设驱动开发-Audio

Audio驱动概述 多媒体系统是物联网设备开发中不可缺少的一部分&#xff0c;Audio作为其中重要的一个模块&#xff0c;Audio驱动模型的构建显得尤为重要。 本文主要介绍基于HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架开发的Audio驱动&#xff0c;包括Aud…

是时候开启Copilot下一篇章:Microsoft AI

微软总裁兼首席执行官萨提亚纳德拉欢迎 Mustafa Suleyman 和 Karn Simonyan 加入微软公司&#xff0c;领导一个新成立的部门 —— Microsoft AI&#xff0c;旨在开发 Copilot 和其他的面向消费者的 AI 产品和研究。 Mustafa Suleyman 将担任 Microsoft AI 执行副总裁&#xf…

基于单片机的智能居家火灾报警系统

摘要:采用STC15L2K32单片机设计了一种智能火灾报警系统,它是控制中心与多个不同功能的探测模块构成,实现了一个中心、多点辐射的火灾检测和报警功能。 关键词:智能居家,火灾报警系统,单片机,模块化设计。 0 引言 近些年电子技术、计算机技术为火灾报警系统和灭火系统在…

idea keymap用eclipse的相关快捷键

idea快捷键用eclipse的方式 CtrlShiftR 搜索文件 shiftshift 全部文件/类搜索 CtrlH 全局搜索 CtrlO 快速打开Outline大纲视图 ctrle 查看recent窗口文件 ctrlt 快速进入接口的实现类 ctrlshiftf 格式化代码 altshiftr 变量或函数的重命名 ctrlshifto 移除无用的头文…

YOLOv8绝缘子边缘破损检测系统(可以从图片、视频和摄像头三种方式检测)

可检测图片和视频当中出现的绝缘子和绝缘子边缘是否出现破损&#xff0c;以及自动开启摄像头&#xff0c;进行绝缘子检测。基于最新的YOLO-v8训练的绝缘子检测模型和完整的python代码以及绝缘子的训练数据&#xff0c;下载后即可运行。&#xff08;效果视频&#xff1a;YOLOv8绝…

C# WinForm —— 项目目录结构

1. WinForm 应用程序项目 Properties&#xff1a;属性文件夹存放了一个自动生成的类文件AssemblyInfo.cs&#xff0c;保存了一些应用程序集的一些信息引用存放了一些为应用程序提供所需的&#xff0c;某些功能的一些程序集&#xff08;dll文件&#xff09;等添加引用&#xff…

MindOpt APL向量化建模语法的介绍与应用(2)

前言 在数据科学、工程优化和其他科学计算领域中&#xff0c;向量和矩阵的运算是核心组成部分。MAPL作为一种数学规划语言&#xff0c;为这些领域的专业人员提供了强大的工具&#xff0c;通过向量式和矩阵式变量声明以及丰富的内置数学运算支持&#xff0c;大大简化了数学建模…

vue-pdf只显示一页问题解决

<template><pdf src""></pdf> </template> <script>import pdf from vue-pdfexprot default {component: {pdf}} </script> 这个时候&#xff0c;多页的PDF只会显示第一页&#xff0c;这时各位可以去查看一下vue-pdf的源码&…

PHP发票查验接口未返回正确信息的原因、发票ocr识别接口

发票查验接口未返回正确信息的原因一般有以下几种&#xff0c;第一种可能是接口没有调通&#xff0c;第二种是本身这张发票就是一张错票、假票&#xff0c;第三种可能是税局系统或者网络问题等等。那么&#xff0c;遇到这种情况应该如何解决呢&#xff1f;翔云发票查验接口&…

Centos7 搭建Mongodb 分片集群4.0/ PSA(三成员副本集)

MongoDB 简介:1、优点和缺点:2、MongoDB适用的业务场景:Centos7 搭建Mongodb 分片集群一、安装MongoDB社区版4.01、配置程序包管理系统(`yum`)2、安装对应版本的MongoDB软件包。3、创建运行mongodb的目录并禁用SELinux4、修改文件打开数5、初始化系统5.1、创建config配置…

Docker 学习笔记(七):介绍 Dockerfile 相关知识,使用 Dockerfile 构建自己的 centos 镜像

一、前言 记录时间 [2024-4-12] 系列文章简摘&#xff1a; Docker学习笔记&#xff08;二&#xff09;&#xff1a;在Linux中部署Docker&#xff08;Centos7下安装docker、环境配置&#xff0c;以及镜像简单使用&#xff09; Docker 学习笔记&#xff08;三&#xff09;&#x…

C++ this指针的使用与详解

在C编程中&#xff0c;类和对象是核心概念。当我们定义一个类并且创建它的对象时&#xff0c;每个对象都有自己的成员变量和成员函数。那么&#xff0c;如何让这些成员函数能够访问对象自身的成员变量呢&#xff1f;这就需要引入一个特殊的指针——this指针。 this指针的概念 …

【数据结构(五)】栈

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.概念3.栈的使用4.栈的应用场景4.1有效的括号4.2逆波兰表达式4.3栈的压入弹…

es6对于变量的解构赋值(数组解构,对象解构,字符串解构,函数解构等)解析(2024-04-12)

1、数组的解构赋值 [ ] 1.1 数组解构的基本用法 ES6 允许按照一定模式&#xff0c;从数组和对象中提取值&#xff0c;对变量进行赋值&#xff0c;这被称为解构&#xff08;Destructuring&#xff09;。本质上叫模型匹配&#xff0c;等号两边的模型相同就可以对应上。 //以前…

VUE_H5页面跳转第三方地图导航,兼容微信浏览器

当前项目是uniapp项目&#xff0c;若不是需要替换uni.showActionSheet选择api onMap(address , organName , longitude 0, latitude 0){var ua navigator.userAgent.toLowerCase();var isWeixin ua.indexOf(micromessenger) ! -1;if(isWeixin) {const mapUrl_tx "…

synchronized的优化策略

synchronized的优化策略 一:synchronized 的"自适应"1.1:偏向锁 二:锁消除三:锁粗化 一:synchronized 的"自适应" 锁升级的过程: (1)未加锁的状态(无锁) 当代码中开始调用执行synchronized (2)偏向锁 遇到锁冲突 (3)轻量级锁 冲突进一步提升 (4)重量级锁 …

【示例】MySQL-事务控制示例:账户转账-savepoint关键字

前言 本文讲述MySQL中的事务&#xff0c;以账户转账为例&#xff0c;体会事务的概念&#xff0c;并讲解事务相关的一个关键字用法&#xff1a;savepoint 示例 数据准备 drop table if exists account;create table account(id int primary key AUTO_INCREMENT comment ID,n…

metrology

* draw_line (3600, Row11, Column11, Row21, Column21) Row11:1168.63385826772 Column11:934.322404371585 Row12:1280.58267716535 Column12:1233.27322404372 * draw_rectangle2 (3600, Row8, Column8, Phi1, Length11, Length21) *画矩形区域 Row3:1102.91534391534 Colum…

在Windows下面的vscode配置cmake使用vcpkg包管理器

安装 vscode下载地址 cmake下载地址 vcpkg下载地址 创建CMake项目 // main.cpp #include <fmt/core.h>int main() {fmt::print("Hello World!\n");return 0; }// CMakeLists.txtcmake_minimum_required(VERSION 3.10)project(HelloWorld)find_package(fmt…