【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 delimited
    fields 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 delimited
        fields 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_city
    partition(province='zhejiang',city='hangzhou');
load data local inpath '/root/hivedata/user.txt' into table t_user_province_city
    partition(province='zhejiang',city='ningbo');
load data local inpath '/root/hivedata/user.txt' into table t_user_province_city
    partition(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 cart
                                   on(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 cart
                          on (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 delimited
        fields 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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟网络管理解决方案

随着业务规模的扩大&#xff0c;其网络的规模和复杂性也成比例地扩大&#xff0c;企业级组织和中小型企业需要大规模网络来满足不断增长的业务需求&#xff0c;然而&#xff0c;大规模网络需要大量的物理组件、定期维护和配置&#xff0c;所有这些都是有代价的&#xff0c;因此…

[ACTF2020 新生赛]Include (文件包含漏洞)

打开题目&#xff1a; 就一个tips 看看源码&#xff1a; 奥&#xff0c;fileflag.php 而且再看题目&#xff1a;include 应该是文件包含漏洞&#xff0c;是一道php伪协议题目 -.-PHP伪协议-.-&#xff1a; 我们通过 php://filter 来获取源码&#xff1a; 构造payload: …

runCatching异常捕获onSuccess/onFailure返回函数,Kotlin

runCatching异常捕获onSuccess/onFailure返回函数&#xff0c;Kotlin fun test(a: Int, b: Int) {runCatching {a / b}.onSuccess {println("onSuccess: $it")return ok(it)}.onFailure {println("onFailure: $it")return fail(it)} }fun ok(o: Any) {prin…

【基础算法】前缀和

文章目录 算法介绍什么是前缀和&#xff1f;&#xff1f;前缀和的作用一维数组求解前缀和(Si)二维数组求解前缀项和 示例题目1&#xff1a;acwing795示例题目2&#xff1a;acwing796总结收获 算法介绍 什么是前缀和&#xff1f;&#xff1f; 数组: a[1], a[2], a[3], a[4], a[…

轻量封装WebGPU渲染系统示例<48>- 多种光源的多种组合(源码)

实现方式: 1. 全局的灯光和阴影。 2. 球体和矩形平面使用了相同的材质对象。 3. 通过材质自动关联和组装对应的渲染材质功能节点。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/MultiLightsShading2.ts 当前…

人生感悟 | 当前经济形势,给25~35岁的年轻人一点建议

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 这两年经济情况怎么样呢&#xff1f;相信大家都有自己的感觉。 且不说网上看到的“裁员裁到大动脉”“设计院欠薪”等各种新闻。 说自己和家人的亲身经历吧&#xff0c;这两年经历了被拖欠工资、公司缩编、换工作、公…

公众号提高上限怎么操作?

一般可以申请多少个公众号&#xff1f;众所周知&#xff0c;在2013年前后&#xff0c;公众号申请是不限制数量的&#xff0c;后来企业开始限制申请50个&#xff0c;直到2018年的11月tx又发布&#xff0c;其中个人主体可申请公众号由2个调整为1个&#xff0c;企业主体由50个调整…

【基础算法】试除法判定质数(优化)

文章目录 算法优化模板题目代码实现 算法优化模板 bool is_prime(int n){if(n < 2) return false;for(int i 2;i < n / i;i ){ //优化内容if(n % i 0){return false;}}return true; }注意这里的一个总要优化是for循环的终止条件是i<n/i。为什么不是i<n或者i<…

UDP多人聊天室

讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 UDP通信 主要的方向是一对多通信方式 UDP通信就是一下子可以通信多个对象&#xff0c;这就是UDP对比TCP的优势&#xff0c;UDP它的原理呢 就是…

Python glob

参考文章&#xff1a; Python 中glob.glob()、glob.iglob&#xff08;&#xff09;的使用-CSDN博客 Python 中glob.glob()的使用 glob.glob(path)的功能&#xff1a; 返回符合path格式的所有文件的路径&#xff0c;以list存储返回。 path的表示方法&#xff1a; 利用匹配符…

uniapp怎么获取微信步数

微信步数获取的背景 微信步数是指用户在微信运动中记录的步数数据。微信提供了开放能力&#xff0c;允许第三方应用获取用户授权后的微信步数数据&#xff0c;以便进行进一步的数据分析和展示。使用时报错&#xff1a;fail api scope is not declared in the privacy agreemen…

雷电4.0.50模拟器Android7.1.2安装xposed框架

官方论坛&#xff1a;https://xdaforums.com/t/official-xposed-for-lollipop-marshmallow-nougat-oreo-v90-beta3-2018-01-29.3034811/ Xposed 有分支 [EdXposed 和 LSPosed] 。 Edxposed框架现在支持android 8.0 - android 9.0 &#xff0c;如果是android 7.0或更早的版本&…

1.3 第一个C程序

一、Dev-C的安装 下载地址&#xff1a;https://sourceforge.net/projects/orwelldevcpp/ 二、Dev-C简单的使用 2.1 首次打开配置 2.2 第一个程序的编辑、编译、运行 三、Hello Word程序讲解 3.1 程序框架 几乎所有的程序都需要这一段代码 3.2 输出 printf("Hello World…

大数据机器学习深度解读ROC曲线:技术解析与实战应用

大数据机器学习深度解读ROC曲线&#xff1a;技术解析与实战应用 一、引言ROC曲线简介 二、ROC曲线的历史背景二战雷达信号检测在医学和机器学习中的应用横跨多个领域的普及 三、数学基础False Positive Rate&#xff08;FPR&#xff09;计算方法 四、Python绘制ROC曲线导入所需…

广受好评的开源基础大模型最全梳理,你最钟意哪一个?

2023 年即将过去。一年以来&#xff0c;各式各样的大模型争相发布。当 OpenAI 和谷歌等科技巨头正在角逐时&#xff0c;另一方「势力」悄然崛起 —— 开源。 开源模型受到的质疑一向不少。它们是否能像专有模型一样优秀&#xff1f;是否能够媲美专有模型的性能&#xff1f; 迄…

全套SpringBoot讲义01

hello&#xff0c;我是小索奇&#xff0c;全套SpringBoot教程~一起来学习叭 文章目录 SpringBoot文档更新日志前言课程内容说明课程前置知识说明 SpringBoot基础篇JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作&#xff08;一&#xff09;JC-1-2.SpringBoot入门程序制…

Unity中URP下的菲涅尔效果实现(URP下的法线和视线向量怎么获取)

文章目录 前言一、实现思路二、实现原理我们可以由下图直观的感受到 N 与 L夹角越小&#xff0c;点积越接近&#xff08;白色&#xff09;1。越趋近90&#xff0c;点积越接近0&#xff08;黑色&#xff09; 三、实现URP下的菲涅尔效果1、我们新建一个Shader&#xff0c;修改为最…

beebox靶场A1 low 命令注入通关教程(上)

一&#xff1a;html注入 get HTML注入&#xff0c;就是当用户进行输入时&#xff0c;服务器没有对用户输入的数据进行过滤或转义&#xff0c;导致所有输入均被返回前端&#xff0c;网页解析器会将这些数据当作html代码进行解析,这就导致一些恶意代码会被正常执行。 首先进行简…

lv12 交叉开发环境搭建 3

1 ubuntu网络环境配置 目的&#xff1a;让Ubuntu可以上外网&#xff0c;让开发板可以与ubuntu互通 2 tftp 服务器环境搭建 tftp&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件 传输…

人工智能知识蒸馏:模型精简与迁移的奇妙之旅

导言 在人工智能领域&#xff0c;知识蒸馏作为一种模型精简和知识迁移的技术手段&#xff0c;逐渐成为提高模型效能和适应更广泛场景的关键工具。知识蒸馏是近年来在深度学习领域备受瞩目的技术&#xff0c;其通过将大模型的知识传递给小模型&#xff0c;旨在实现模型的轻量化与…