2导出指定表结构_大白话详解大数据hive知识点,老刘真的很用心(2)
老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解!
01 hive知识点(2)
第12点:hive分桶表
hive知识点主要偏实践,很多人会认为基本命令不用记,但是万丈高楼平地起,基本命令无论都基础,都要好好练习,多实践。
在hive中,分桶是相对分区进行更加细粒的划分。其中分区针对的是数据的存储路径,而分桶针对的是数据文件,老刘用两张相关的图对比一下,就能明白刚刚说的区别了。
第一张是表进行分区后变化:
第二张是表进行分桶后的变化:
根据这两张图,大致可以理解分区和分桶的区别。
那既然看了这两张图,分桶到底是什么,也应该大致清楚了!
什么是分桶?
分桶就是将整个数据内容按照某列属性值取hash值进行区分,具有相同hash值的数据进入到同一个文件中。
举例说明一下:比如按照name属性分为3个桶,就是对name属性值的hash值对3取模,按照取模结果对数据进行分桶。
取模结果为0的数据记录存放到一个文件;
取模结果为1的数据记录存放到一个文件;
取模结果为2的数据记录存放到一个文件;取模结果为3的数据记录存放到一个文件;
至于分桶表的案例太多了,大家自己可搜一个练练手。
第13点:hive修改表结构
这一点,其实没有什么好说的,资料上提到了,老刘也说一说,记住几个命令就行。
修改表的名称
alter table stu3 rename to stu4;表的结构信息
desc formatted stu4;
第14点:hive数据导入
这部分挺重要的,因为创建表后,要做的事就是把数据导入表中,如果连数据导入的基本命令都不会的话,那绝对是不合格的,这是非常重要的基础!
1、通过load方式加载数据(必须记下来)
通过load方式加载数据
load data local inpath '/kkb/install/hivedatas/score.csv' overwrite into table score3 partition(month='201806');
2、通过查询方式加载数据(必须记下来)
通过查询方式加载数据
create table score5 like score;
insert overwrite table score5 partition(month = '201806') select s_id,c_id,s_score from score;
第15点:hive数据导出
1、insert导出
将查询的结果导出到本地
insert overwrite local directory '/kkb/install/hivedatas/stu' select * from stu;将查询的结果格式化导出到本地
insert overwrite local directory '/kkb/install/hivedatas/stu2' row format delimited fields terminated by ',' select * from stu;将查询的结果导出到HDFS上(没有local)
insert overwrite directory '/kkb/hivedatas/stu' row format delimited fields terminated by ',' select * from stu;
第16点:静态分区和动态分区
Hive有两种分区,一种是静态分区,也就是普通的分区。另一种是动态分区。
静态分区:在加载分区表的时候,往某个分区表通过查询的方式加载数据,必须要指定分区字段值。
这里举一个小例子,演示下两者的区别。
1、创建分区表
use myhive;
create table order_partition(
order_number string,
order_price double,
order_time string
)
partitioned BY(month string)
row format delimited fields terminated by 't';2、准备数据
cd /kkb/install/hivedatas
vim order.txt
10001 100 2019-03-02
10002 200 2019-03-02
10003 300 2019-03-02
10004 400 2019-03-03
10005 500 2019-03-03
10006 600 2019-03-03
10007 700 2019-03-04
10008 800 2019-03-04
10009 900 2019-03-043、加载数据到分区表
load data local inpath '/kkb/install/hivedatas/order.txt' overwrite into table order_partition partition(month='2019-03');4、查询结果数据
select * from order_partition where month='2019-03';
结果为:
10001 100.0 2019-03-02 2019-03
10002 200.0 2019-03-02 2019-03
10003 300.0 2019-03-02 2019-03
10004 400.0 2019-03-03 2019-03
10005 500.0 2019-03-03 2019-03
10006 600.0 2019-03-03 2019-03
10007 700.0 2019-03-04 2019-03
10008 800.0 2019-03-04 2019-03
10009 900.0 2019-03-04 2019-03
动态分区:按照需求实现把数据自动导入到表的不同分区中,不需要手动指定。
如果需要一次性插入多个分区的数据,可以使用动态分区,不用指定分区字段,系统自动查询。
动态分区的个数是有限制的,它一定要从已经存在的表里面来创建。
首先必须说的是,动态分区表一定是在已经创建的表里来创建
1、创建普通标
create table t_order(order_number string,order_price double, order_time string
)row format delimited fields terminated by 't';2、创建目标分区表
create table order_dynamic_partition(order_number string,order_price double
)partitioned BY(order_time string)
row format delimited fields terminated by 't';3、准备数据
cd /kkb/install/hivedatas
vim order_partition.txt
10001 100 2019-03-02
10002 200 2019-03-02
10003 300 2019-03-02
10004 400 2019-03-03
10005 500 2019-03-03
10006 600 2019-03-03
10007 700 2019-03-04
10008 800 2019-03-04
10009 900 2019-03-044、动态加载数据到分区表中
要想进行动态分区,需要设置参数
开启动态分区功能
set hive.exec.dynamic.partition=true;
设置hive为非严格模式
set hive.exec.dynamic.partition.mode=nonstrict;
insert into table order_dynamic_partition partition(order_time) select order_number,order_price,order_time from t_order;5、查看分区
show partitions order_dynamic_partition;
静态分区和动态分区的例子讲述的差不多了,大家好好体会下。
第17点:hive的基本查询语法
老刘之前就说过,hive的基本查询语法是非常重要的,很多人认为压根不用记,需要的时候看看笔记就行,但是在老刘看来,这是非常错误的想法。
有句话说基础不牢,地动山摇,我们最起码要掌握常用的查询语法。
1、基本语法查询:
因为limit语句和where语句用的特别多,单独拿出来,大家好好记记!
limit 语句
select * from score limit 5;
接下来是where语句,单独拿出来,是想表达出where语句很重要。我们使用where语句,将不满足条件的行过滤掉。
select * from score where s_score > 60;
2、分组语句
group by语句
group by语句通常和聚合函数一起使用,按照一个或者多个列结果进行分组,然后对每个组执行聚合操作。有个重点必须注意,select的字段,必须在group by字段后面挑选,除了聚合函数max,min,avg。
举两个小例子:
(1)计算每个学生的平均分数
select s_id,avg(s_score) from score group by s_id;(2)计算每个学生最高的分数
select s_id,max(s_score) from score group by s_id;
having语句
先说说having语句和where不同点
① where是针对于表中的列,查询数据;having针对于查询结果中的列,刷选数据。
② where后面不能写分组函数,而having后面可以使用分组函数。
③ having只用于group by分组统计语句。
举两个小例子:
求每个学生的平均分数
select s_id,avg(s_score) from score group by s_id;求每个学生平均分数大于60的人
select s_id,avg(s_score) as avgScore from score group by s_id having avgScore > 60;
3、join语句
等值join
hive中支持通常的SQL JOIN语句,但是只支持等值连接,不支持非等值连接。
使用join的时候,可以给表起别名,也可以不用起。起别名的好处就是可以简化查询,方便。
根据学生和成绩表,查询学生姓名对应的成绩
select * from stu left join score on stu.id = score.s_id;合并老师与课程表
select * from teacher t join course c on t.t_id = c.t_id;
内连接inner join
当两个表进行内连接的时候,只有两个表中都存在与连接条件相匹配的数据的时候,数据才会保留下来,并且join默认就是inner join。
select * from teacher t inner join course c on t.t_id = c.t_id;
左外连接left outer join
进行左外连接的时候,join左边表中符合where子句的所有记录将会返回。
查询老师对应的课程
select * from teacher t left outer join course c on t.t_id = c.t_id;
右外连接right outer join
进行右外连接的时候,join右边表中符合where子句的所有记录将会返回。
查询老师对应的课程
select * from teacher t right outer join course c on t.t_id = c.t_id;
4、排序
order by全局排序
使用order by进行排序时候,asc表示升序,这是默认的;desc表示降序。
查询学生的成绩,并按照分数降序排列
select * from score s order by s_score desc ;
02 hive总结
hive知识点(2)就分享的差不多了,这部分偏于实践,需要好好练习。在老刘看来分桶表以及静态分区和动态分区的概念需要好好记住,剩下的就是hive的基本查询操作,由于命令实在太多了,老刘只分享出了一些常用的命令,limit语句,where语句,分组语句,join语句等要熟记于心。
最后,如果觉得有哪里写的不好或者有错误的地方,可以联系公众号:努力的老刘,进行交流。希望能够对大数据开发感兴趣的同学有帮助,希望能够得到同学们的指导。
如果觉得写的不错,给老刘点个赞!
2导出指定表结构_大白话详解大数据hive知识点,老刘真的很用心(2)相关推荐
- hive double 转decimal_大白话详解大数据hive知识点,老刘真的很用心(3)
前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解!01 hive知识点(3) 还是那句话,虽然这些都是hive的常用函数,很多人不在 ...
- java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解
摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...
- Ecstore 中数据表结构定义 dbschema 详解
详解Ecstore中的数据表结构定义文件dbschema 任何系统的操作无非都是对数据库的各种操作的结合,而对于ecstore的数据库操作可能与其他常见项目有些不太一样.可能有新入手的朋友会尝试在数据 ...
- mysql修改表结构例子_mysql修改表结构方法实例详解
本文实例讲述了mysql修改表结构方法.分享给大家供大家参考.具体如下: mysql修改表结构使用ALTER TABLE语句,下面就为您详细介绍mysql修改表结构的语句写法,希望对您学习mysql修 ...
- Magento 数据表结构 EAV模型详解
EAV : Entity - Attribute - Value的缩写,是数据库模型的一种,使用eav建模的好处是可以动态为数据模型增加或移除属性. 1.问题提出: 假设需要定义一个实体Custome ...
- 一篇文章详解大数据技术和应用场景
" 本文作者 陈睿 ,优知学院创始人 新技术.新趋势往往趋之若鹜却又很难说的透彻,希望这篇文章能让大家完整的理解什么是大数据:该篇包含:大数据.技术.场景应用以及大数据的岗位. 什么是大数据 ...
- 万字详解大数据平台异地多机房架构实践
大家好,我是一哥,我在18年的时候刚好经历过一次机房的数据迁移,之前也给大家分享给 → 你经历过完整的大数据平台迁移吗?,今天看到B站的这个方案,推荐给大家~ 01 背景 随着B站业务的高速发展,业务 ...
- 万字详解大数据架构新概念
随着近几年数据湖概念的兴起,业界对于数据仓库和数据湖的对比甚至争论就一直不断.有人说数据湖是下一代大数据平台,各大云厂商也在纷纷的提出自己的数据湖解决方案,一些云数仓产品也增加了和数据湖联动的特性. ...
- 详解大数据、数据存储和边缘计算技术在元宇宙中的应用
导读:如果未来的数字社会属于元宇宙,那么我们需要什么来支撑如此庞大的数字世界? 作者:成生辉 来源:大数据DT(ID:hzdashuju) 元宇宙是指与物理世界分离的平行数字世界,由人创造并以数字形式 ...
最新文章
- 现身说法:37岁老码农找工作
- Noip前的大抱佛脚----字符串
- Laravel 文件夹结构简介
- SAP 权限对象设置及在程序中的应用
- 商品领域ddd_DDD 领域驱动设计-商品建模之路
- Round-Robin负载均衡算法及其实现原理
- 谁说表单只能发get和post请求了?
- web开发的一些工具技巧_有用的技巧可帮助您建立Web开发人员的良好习惯
- python 保证所有数据能够显示,而不是用省略号表示,不以科学计数显示
- Spring使用内存数据库
- Javascript禁止网页复制粘贴效果,或者复制时自动添加来源信息
- 《增长黑客》节选与笔记
- 网站域名如何解析到阿里云和腾讯云服务器?
- Linux (deepin)网络管理详解.
- 斯蒂文斯理工学院计算机专业,斯蒂文斯理工学院计算机专业
- DB9公头母头的定义
- 微信小程序使用html2wxml渲染HTML或Markdown文本
- el-calendar 日历做排班、值班、打卡.......
- 如何将eml格式转换成pdf文档
- scanf(3c,c);
热门文章
- 保研计算机辅助翻译,本科2013级推免生寄语
- 整理了90个Pandas案例,强烈建议收藏!
- SAP UI5 应用开发教程之二十六 - OData 服务配合 Mock 服务器的使用步骤详解
- ubuntu 21.04 版本上 安装 sqlcmd
- SAP Spartacus Route Alias
- SAP Spartacus读取User Address的action是如何被Effect接收的
- 给Angular初学者介绍一个非常方便的例子学习网站
- 用代码的方式增加servlet mapping定义
- SAP UI5 getHeaderFooterOptions
- how is SAP ui5 formatter resolved