【Hive】——DDL(CREATE TABLE)

1 CREATE TABLE 建表语法

在这里插入图片描述

在这里插入图片描述

2 Hive 数据类型

在这里插入图片描述
在这里插入图片描述

2.1 原生数据类型

在这里插入图片描述

2.2 复杂数据类型

在这里插入图片描述

2.3 Hive 隐式转换

在这里插入图片描述

2.4 Hive 显式转换

在这里插入图片描述

2.5 注意

在这里插入图片描述

3 SerDe机制

在这里插入图片描述
在这里插入图片描述

3.1 读写文件机制

在这里插入图片描述

3.2 SerDe相关语法

在这里插入图片描述

3.2.1 指定序列化类(ROW FORMAT SERDE ‘’)

在这里插入图片描述
在这里插入图片描述

3.2.2 指定分隔符(row format delimited fields terminated by “\t”)

在这里插入图片描述
在这里插入图片描述

4 Hive 默认分隔符

在这里插入图片描述
在这里插入图片描述

5 存储路径(location)

5.1 默认存储路径

在这里插入图片描述

在这里插入图片描述

5.2 Location 修改数据存储路径

在这里插入图片描述
在这里插入图片描述

6 练习

6.1 简单数据类型

6.1.1 建表语句

create table t_archer(id int comment "ID",name string comment "英雄名称",hp_max int comment "最大生命",mp_max int comment "最大法力",attack_max int comment "最高物攻",defense_max int comment "最大物防",attack_range string comment "攻击范围",role_main string comment "主要定位",role_assist string comment "次要定位"
) comment "王者荣耀射手信息"row format delimited fields terminated by "\t";

6.1.2 上传数据文件到hdfs

在这里插入图片描述

 hadoop dfs -put archer.txt /user/hive/warehouse/test.db/t_archer

6.1.3 查询

select * from t_archer;

在这里插入图片描述

6.2 复杂数据类型

6.2.1 建表语句

create table t_hot_hero_skin_price(id int,name string,win_rate int,skin_price map<string,int>
) row format delimitedfields terminated by ',' --字段之间分隔符collection items terminated by '-'  --集合元素之间分隔符map keys terminated by ':'; --集合元素kv之间分隔符;

6.2.2 上传数据文件到hdfs

在这里插入图片描述

hadoop dfs -put hot_hero_skin_price.txt /user/hive/warehouse/test.db/t_hot_hero_skin_price

6.2.3 查询

select * from t_hot_hero_skin_price;
在这里插入图片描述

6.3 默认分隔符

6.3.1 建表语句

create table t_team_ace_player(id int,team_name string,ace_player_name string
); --没有指定row format语句 此时采用的是默认的\001作为字段的分隔符

6.3.2 上传数据文件到hdfs

在这里插入图片描述

hadoop dfs -put team_ace_player.txt /user/hive/warehouse/test.db/t_team_ace_player

6.3.3 查询

select * from t_team_ace_player;

在这里插入图片描述

6.4 指定数据存储路径

6.4.1 建表语句

create table t_team_ace_player_location(
id int,
team_name string,
ace_player_name string
)
location ‘/data’; --使用location关键字指定本张表数据在hdfs上的存储路径

6.4.2 上传数据文件到hdfs

在这里插入图片描述
hadoop dfs -put team_ace_player.txt /data

6.4.3 查询

select * from t_team_ace_player_location;
在这里插入图片描述

7 内部表、外部表 (external)

7.1 内部表

在这里插入图片描述
默认情况下创建的表就是内部表

7.2 外部表

在这里插入图片描述
在这里插入图片描述

7.3 内部表、外部表的差异

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.4 如何选择内部表或外部表

在这里插入图片描述

8 分区表(partitioned by)

8.1 概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.2 建表语句

在这里插入图片描述
在这里插入图片描述
注: 分区字段不能是表中已经存在的字段,因为分区字段最终也会以细腻字段的形式显示在表结构上。

--注意分区表创建语法规则
--分区表建表
create table t_all_hero_part(id int,name string,hp_max int,mp_max int,attack_max int,defense_max int,attack_range string,role_main string,role_assist string
) partitioned by (role string)--注意哦 这里是分区字段row format delimited fields terminated by "\t";

8.3 分区表数据加载–静态分区

在这里插入图片描述

--双分区表,按省份和市分区
--分区字段之间是一种递进的关系 因此要注意分区字段的顺序 谁在前在后
create table t_user_province_city (id int, name string,age int) partitioned by (province string, city string);
静态上传文件
SQL
load data local inpath '/root/data/all_hero/archer.txt' into table t_all_hero_part partition(role='sheshou');
load data local inpath '/root/data/all_hero/assassin.txt' into table t_all_hero_part partition(role='cike');
load data local inpath '/root/data/all_hero/mage.txt' into table t_all_hero_part partition(role='fashi');
load data local inpath '/root/data/all_hero/support.txt' into table t_all_hero_part partition(role='fuzhu');
load data local inpath '/root/data/all_hero/tank.txt' into table t_all_hero_part partition(role='tanke');
load data local inpath '/root/data/all_hero/warrior.txt' into table t_all_hero_part partition(role='zhanshi');

在这里插入图片描述

8.4 分区表数据加载–动态分区

8.4.1 概述

在这里插入图片描述

8.4.2 开启动态分区

在这里插入图片描述

SQL
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

8.4.3 动态分区插入

--创建一张新的分区表 t_all_hero_part_dynamic
create table t_all_hero_part_dynamic(id int,name string,hp_max int,mp_max int,attack_max int,defense_max int,attack_range string,role_main string,role_assist string
) partitioned by (role string)row format delimitedfields terminated by "\t";
insert into table t_all_hero_part_dynamic partition(role) --注意这里 分区值并没有手动写死指定
select tmp.*,tmp.role_main from t_all_hero tmp;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.5 多重分区表

8.5.1 概述

在这里插入图片描述

8.5.2 加载数据

--双分区表的数据加载 静态分区加载数据
load data local inpath '/root/hivedata/user.txt' into table t_user_province_citypartition(province='zhejiang',city='hangzhou');
load data local inpath '/root/hivedata/user.txt' into table t_user_province_citypartition(province='zhejiang',city='ningbo');
load data local inpath '/root/hivedata/user.txt' into table t_user_province_citypartition(province='shanghai',city='pudong');

8.5.3 双分区进行过滤

--双分区表的使用  使用分区进行过滤 减少全表扫描 提高查询效率
select * from t_user_province_city where  province= "zhejiang" and city ="hangzhou";

9 分桶表 (buckets)

9.1 概述

在这里插入图片描述

9.2 规则

在这里插入图片描述
在这里插入图片描述

9.3 语法

在这里插入图片描述在这里插入图片描述

9.4 案例

9.4.1 创建分桶表

CREATE TABLE t_usa_covid19_bucket(count_date string,county string,state string,fips int,cases int,deaths int
)
CLUSTERED BY(state) INTO 5 BUCKETS; --分桶的字段一定要是表中已经存在的字段

9.4.2 创建普通表

CREATE TABLE t_usa_covid19(count_date string,county string,state string,fips int,cases int,deaths int
)row format delimited fields terminated by ",";

9.4.3 向普通表导入数据

hadoop dfs -put us-covid19-counties.dat /user/hive/warehouse/test.db/t_usa_covid19

在这里插入图片描述

9.4.5 基于分桶字段查询

--基于分桶字段state查询来自于New York州的数据
--不再需要进行全表扫描过滤
--根据分桶的规则hash_function(New York) mod 5计算出分桶编号
--查询指定分桶里面的数据 就可以找出结果  此时是分桶扫描而不是全表扫描
select *
from t_usa_covid19_bucket where state="New York";

普通查询耗时:181ms
基于分桶字段查询耗时:175ms

9.5 好处

9.5.1 减少全表扫描

基于分桶字段state查询,不再需要进行全表扫描过滤,根据分桶的规则hash_function(New York) mod 5计算出分桶编号,查询指定分桶里面的数据 就可以找出结果 此时是分桶扫描而不是全表扫描

9.5.2 JOIN时可以提高MR程序效率,减少笛卡尔积数量

在这里插入图片描述

9.5.3 分桶表数据进行高效抽样

当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。抽样可以从被抽取的数据中估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。

10 事务表(transactional)

10.1 概述

在这里插入图片描述
事务表创建几个要素:开启参数、分桶表、存储格式orc、表属性

10.2 事务配置

开启事务配置(可以使用set设置当前session生效 也可以配置在hive-site.xml中)

set hive.support.concurrency = true; --Hive是否支持并发
set hive.enforce.bucketing = true; --从Hive2.0开始不再需要 是否开启分桶功能
set hive.exec.dynamic.partition.mode = nonstrict; --动态分区模式 非严格
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; –
set hive.compactor.initiator.on = true; --是否在Metastore实例上运行启动线程和清理线程
set hive.compactor.worker.threads = 1; --在此metastore实例上运行多少个压缩程序工作线程。

10.3 创建事务表

create table trans_student(id int,name String,age int
)
clustered by (id) into 2 buckets 
stored as orc 
TBLPROPERTIES('transactional'='true');

10.4 insert、update、delete操作

insert into trans_student values(1,"allen",18);update trans_student
set age = 20
where id = 1;delete from trans_student where id =1;select *
from trans_student;

11 视图(view)

11.1 概述

在这里插入图片描述
不支持删除修改
在这里插入图片描述

11.2 创建视图

--1、创建视图
create view v_usa_covid19 as select count_date, county,state,deaths from t_usa_covid19 limit 5;--2、从已有的视图中创建视图
create view v_usa_covid19_from_view as select * from v_usa_covid19 limit 2;

11.3 显示当前已有的视图

show tables;
show views;--hive v2.2.0之后支持

11.4 视图的查询使用

select * from v_usa_covid19;

11.5 查看视图定义

show create table v_usa_covid19;

11.6 删除视图

drop view v_usa_covid19_from_view;

11.7 更改视图属性

alter view v_usa_covid19 set TBLPROPERTIES ('comment' = 'This is a view');

11.8 更改视图定义

alter view v_usa_covid19 as  select county,deaths from t_usa_covid19 limit 2;

11.9 好处

  1. 通过视图来限制数据访问可以用来保护信息不被随意查询
create table userinfo(firstname string, lastname string, ssn string, password string);create view safer_user_info as select firstname, lastname from userinfo;
  1. 降低查询的复杂度,优化查询语句

from (select * from people join carton(cart.pepople_id = people.id) where firstname = 'join')a select a.lastname where a.id = 3;--把嵌套子查询变成一个视图
create view shorter_join as
select * from people join carton (cart.pepople_id = people.id) where firstname = 'join';--基于视图查询
select lastname from shorter_join where id = 3;

12 物化视图(materialized view)

12.1 概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.2 语法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述## 12.3 物化视图、视图的区别
在这里插入图片描述

12.4 物化视图查询重写

在这里插入图片描述
在这里插入图片描述

12.5 案例

create table student(num int,name string,sex string,age int,dept string)row format delimitedfields terminated by ',';
select * from student;

12.5.2 创建事务表

CREATE TABLE student_trans (sno int,sname string,sdept string
)
clustered by (sno) into 2 buckets stored as orc TBLPROPERTIES('transactional'='true');

12.5.3 通过普通表 向事务表导入数据

insert overwrite table student_trans
select num,name,dept
from student;

12.5.4 查询事务表(耗时20s)

SELECT sdept, count(*) as sdept_cnt from student_trans group by sdept;

在这里插入图片描述

12.5.5 创建物化视图

CREATE MATERIALIZED VIEW student_trans_agg
AS SELECT sdept, count(*) as sdept_cnt from student_trans group by sdept;

在这里插入图片描述

12.5.6 再次查询事务表,查询重写,高效查询(耗时240ms)

SELECT sdept, count(*) as sdept_cnt from student_trans group by sdept;

12.5.7 禁止物化视图自动重写,再次查询事务表

--禁用物化视图自动重写
ALTER MATERIALIZED VIEW student_trans_agg DISABLE REWRITE;
--启用物化视图自动重写
ALTER MATERIALIZED VIEW student_trans_agg ENABLE REWRITE;
SELECT sdept, count(*) as sdept_cnt from student_trans group by sdept;

禁用后,无法查询命中,查询效率低下

12.5.8 删除物化视图

drop materialized view student_trans_agg;

12.5.9 查看物化视图

show materialized views;

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

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

相关文章

深入理解Dubbo-8.Dubbo的失败重试设计

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…

鸿蒙(HarmonyOS)北向开发项目编译问题汇总

运行Hello World Hello World 工程可以运行在模拟器中&#xff0c;或者运行在真机设备中。本示例先以选择将 Hello World 工程运行在模拟器中进行说明&#xff0c;如果选择运行在真机设备中&#xff0c;需要先对工程进行签名&#xff0c;然后才能运行在真机设备中。 DevEco S…

从零到一:influxdb时序性数据库的基本概念与操作指南

目录 ​编辑 引言 数据库(database) 创建数据库 删除数据库 进入数据库 展示influxdb中所有数据库 测量&#xff08;measurement&#xff09; 写入测量 展示测量 总结 引言 InfluxDB是一个开源的时序数据库&#xff0c;专门设计用于处理时间序列数据。它是由InfluxD…

C# 两个日期比较大小

文章目录 C# 两个日期比较大小直接比较大小工具类DateTime.Compare C# 两个日期比较大小 直接比较大小 string ed "2023-12-13 09:27:59.000";//过去式DateTime nowDateTime DateTime.Now;DateTime expirationDate Convert.ToDateTime(ed);//质保期 长日期DateT…

一行奇异代码,解决transition过渡动画无效问题!

一行奇异代码&#xff0c;解决transition过渡动画无效问题&#xff01; 无效的transition过渡动画 你是否遇到过这种情况&#xff1a;在css中设置了transition过渡动画&#xff0c;但使用时&#xff0c;确无效。 例如以下代码&#xff0c;便是一例&#xff1a; 在此代码中&a…

【云原生kubernets】Service 的功能与应用

一、Service介绍 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着不方便直接采用pod的ip对服务进行访问。为了解决这个问题&#xff0c;kubernetes提供了Service资…

慎用,Mybatis-Plus这个方法可能导致死锁

1 场景还原 1.1 版本信息 MySQL版本&#xff1a;5.6.36-82.1-log Mybatis-Plus的starter版本&#xff1a;3.3.2 存储引擎&#xff1a;InnoDB1.2 死锁现象 A同学在生产环境使用了Mybatis-Plus提供的 com.baomidou.mybatisplus.extension.service.IService#saveOrUpdate(T, co…

Linux中使用podman管理容器

本章主要介绍使用podman管理容器 了解什么是容器&#xff0c;容器和镜像的关系安装和配置podman拉取和删除镜像给镜像打标签导出和导入镜像创建和删除镜像数据卷的使用管理容器的命令使用普通用户管理容器 对于初学者来说&#xff0c;不太容易理解什么是容器&#xff0c;这里…

挑战与创新:光学字符识别技术在处理复杂表格结构中的应用

OCR&#xff08;Optical Character Recognition&#xff09;光学字符识别技术是指通过计算机软硬件将印刷或手写的字符转化为可编辑和搜索的文本。这项技术已经被广泛应用于各个领域&#xff0c;例如扫描文档、自动化数据输入、图书数字化等。但是&#xff0c;当涉及到处理复杂…

“ABCD“[(int)qrand() % 4]作用

ABCD[(int)qrand() % 4] 作用 具体来说&#xff1a; qrand() 是一个函数&#xff0c;通常在C中用于生成一个随机整数。% 4 会取 qrand() 生成的随机数除以4的余数。因为4只有四个不同的余数&#xff08;0, 1, 2, 3&#xff09;&#xff0c;所以这实际上会生成一个0到3之间的随…

java方法引用语法规则以及简单案例

目录 一、方法引用1.1 什么是方法引用1.2 方法引用的语法规则1.3 构造器引用1.4 方法引用的简单案例 参考资料 一、方法引用 1.1 什么是方法引用 方法引用是 Lambda 表达式的一种简写形式&#xff0c;用于表示已有方法的直接引用。 类似于lambda表达式&#xff0c;方法引用也…

window系统使用ESP8266开发板(CP2102)

连接开发板到电脑 虚拟机中选择连接的开发板硬件 查看设备管理器 更新驱动: CP210x USB to UART Bridge VCP Drivers - Silicon Labs 驱动安装成功

day03、关系模型之基本概念

关系模型之基本概念 1.关系模型概述1.1 关系模型三要素基本结构&#xff1a;relation/Table基本操作:relation operator 2.什么是关系3.关系模型中的完整性约束 本视频来源于B站&#xff0c;战德臣老师 1.关系模型概述 1.1 关系模型三要素 基本结构&#xff1a;relation/Table…

FlieZilla服务器配置与数据访问、传输

概述 手机apk当初服务器&#xff0c;PC端访问手机端的数据&#xff0c;再没有数据线的情况下&#xff0c;非常方便。希望各位同仁搞起来&#xff0c;在此做个笔录。 安装包下载链接&#xff1a;https://download.csdn.net/download/qq_36075612/88577274 一、下载安装包&…

2023.12.12 关于 Java 反射详解

目录 基本概念 定义 用途 反射相关的类 反射基本原理 Class 类中的相关方法 常用获得类相关的方法 常用获得类中属性相关的方法 常用获得类中构造器相关的方法 常用获得类中方法相关的方法 实例理解 反射优缺点 基本概念 定义 Java 的反射&#xff08;reflection&a…

算法笔记—链表、队列和栈

链表、队列和栈 1. 链表1.1 单链表反转1.2 双链表反转1.3 合并两个有序链表1.4 链表相加1.5 划分链表 2. 队列和栈2.1 循环队列2.2 栈实现队列2.3 队列实现栈2.4 最小栈2.2 双端队列 1. 链表 1.1 单链表反转 力扣 反转链表 // 反转单链表public ListNode reverseList(ListNod…

【RTOS学习】模拟实现任务切换 | 寄存器和栈的变化

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;认识任务切换&#x1f3d0;切换的实质&#x1f3d0;栈中的内容&#x1f3d0;切…

基于ssm的前后端分离鲜花销售系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本鲜花销售系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

java中的包

1.包的本质分析(原理) 包的本质 实际上就是创建不同的文件夹来保存类文件 2.一个文件中有两个类的i情况 package com.use;import com.xiaoqiang.Dog;public class Test {public static void main(String[] args) {Dog dog new Dog();System.out.println(dog); //com.xiaoqian…

最新版ES8的client API操作 Elasticsearch Java API client 8.0

作者&#xff1a;ChenZhen 本人不常看网站消息&#xff0c;有问题通过下面的方式联系&#xff1a; 邮箱&#xff1a;1583296383qq.comvx: ChenZhen_7 我的个人博客地址&#xff1a;https://www.chenzhen.space/&#x1f310; 版权&#xff1a;本文为博主的原创文章&#xff…