百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

走近大数据之Hive入门(六、Hive的数据模型)

bigegpt 2024-09-20 14:02 5 浏览

一、Hive的数据存储

  • 基于HDFS(Hadoop的数据仓库)
  • 没有专门的数据存储格式(默认的情况下采用'\t'(制表符)作为列与列之间的分隔符)
  • 存储结构主要包括:数据库,文件,表,视图
  • 可以直接加载文本文件(.TXT文件等)
  • 创建表时,指定Hive数据的列分割符与行分隔符
  1. table 内部表
  2. Partiton 分区表
  3. External Table 外部表
  4. Bucket Table 桶表
  • 视图

二、内部表(Table)

与数据库的Table在概念上类似

每一个Table在Hive中都有一个相应的目录(HDFS上的目录)存储数据

所有的Table数据(不包括External Table)都保存在这个目录(HDFS目录)中

表的元数据信息,存储在元数据数据库中(mysql)

删除表后,元数据和数据都会被删除

创建表--案例:

>create table t1 
(t1 int, tname string, age int);

在hive中创建一张表,如果不指定表所保存的位置,那么这张表会创建在HDFS文件系统中的/user/hive/warehouse目录下

>create table t2 
(tid int, tname string, age int)
location '/mytable/hive/t2';

指定表的位置为HDFS中的/mytable/hive/t2

>create table t3
 (tid int, tname string, age int)
row format delimited fields terminated by ',';

表示以csv文件格式存储,因为csv存储的分隔符为逗号,row format 指定表示行的格式

加入数据--案例:

>create table t4 
as 
select * from sample_data;

采用sample_data查询的集合来创建t4表,查看HDFS中的文件发现,t4表中数据与数据之间没有分隔符

这里我们同样可以指定分隔符,采用sample_data查询的集合来创建t5表,并以','为分隔符在一张表上

>create table t5
row format delimited fields terminated by ','
as
select * from sample_data;

加入新的列---案例:

>alter table t1 add columns(english int);

删除一张表--案例:

drop table t1;

当删除一张表时,它会把对应的文件放入HDFS的回收站中,所以删除之后 我们可以利用一定的方式恢复表中的数据

三、分区表(Partition)

Partition对应于数据库Partiton列的密集索引

在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中

创建表--案例

>create table 
partition_table (sid int, sname string)
partitioned by (gender string)
row format delimited fields terminated by ',';

//创建一张以','分隔,以性别进行分区的分区表partition_table

>insert into table 
partition_table
partition(gender = 'M')
select sid,sname from sample_data where gender = 'M';

//将sample_data表中,gender为'M'的行数据,插入到paetition_table表中gender为'M'的分区中

>insert into table 
partition_table
partition(gender = 'F')
select sid,sname from sample_data where gender = 'F';

//将sample_data表中,gender为'F'的行数据,插入到paetition_table表中gender为'F'的分区中

分区的好处是可以提高查询的效率

查看分区与未分区情况下执行计划有何不同: (执行计划读取的顺序是,从下往上,从右往左)

>explain select * from sample_data where gender = 'M'; //未分区

>explain select * from partition_table where gender = 'M'; //分区

四、外部表(External Table)

指向已经在HDFS中存在的数据,可以创建Partition

它和内部表在元数据的组织上时相同的,而实际存储则有极大的差异

外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只会与外部数据创建一个链接,当删除该表时,仅删除该链接而不删除实际的数据

创建外部表

1、将文件放在hdfs中:

hdfs dfs -put student01.txt /input

2、创建外部表

create external table 
external_student
 (sid int, sname string, age int)
row format delimited fields terminated by ','
location '/input'; --数据源的HDFS文件目录(所谓的外部就是数据源的位置非hive默认存储的位置)

五、桶表(Bucket Table)

桶表是对数据进行哈希取值,然后放到不同文件存储。也就是说,桶表中的数据,是通过哈希运算后,将其打散,再存入文件当中,这样做会避免造成热块,从而提高查询速度。

桶表创建--案例

>create table bucket_table
 (sid int, sname string, age int)
clustered by (sname) into 5 buckets;

//创建一个桶表,这个桶表是以sname作为哈希运算,运算后的结果放到5个桶中

六、视图(View)

视图操作和表一样,Hive中的视图不存储数据,只是虚表,是一个逻辑概念;(oracle和mysql中有一种物化视图,是存储有实际数据的,能提高查询效率)

可以跨越多张表

视图建立在已有基础上,视图赖以建立的这些表称为基表

视图可以简化复杂的查询

案例 (视图能够简化数据)

create view empinfo
as
select e.empno,e.ename,e.sal,e.sal*12 annlsal, d.dname
from emp e, dept d
where e.deptho=d.deptho;
//e.sal*12 annlsal :为e.sal*12起一个别名叫annlsal

相关推荐

一文了解 Python 中带有 else 的循环语句 for-else/while-else

在本文中,我们将向您介绍如何在python中使用带有else的for/while循环语句。可能许多人对循环和else一起使用感到困惑,因为在if-else选择结构中else正常...

python的numpy向量化语句为什么会比for快?

我们先来看看,python之类语言的for循环,和其它语言相比,额外付出了什么。我们知道,python是解释执行的。举例来说,执行x=1234+5678,对编译型语言,是从内存读入两个shor...

开眼界!Python遍历文件可以这样做

来源:【公众号】Python技术Python对于文件夹或者文件的遍历一般有两种操作方法,一种是至二级利用其封装好的walk方法操作:import osfor root,d...

告别简单format()!Python Formatter类让你的代码更专业

Python中Formatter类是string模块中的一个重要类,它实现了Python字符串格式化的底层机制,允许开发者创建自定义的格式化行为。通过深入理解Formatter类的工作原理和使用方法,...

python学习——038如何将for循环改写成列表推导式

在Python里,列表推导式是一种能够简洁生成列表的表达式,可用于替换普通的for循环。下面是列表推导式的基本语法和常见应用场景。基本语法result=[]foriteminite...

详谈for循环和while循环的区别(for循环语句与while循环语句有什么区别)

初九,潜龙勿用在刚开始使用python循环语句时,经常会遇到for循环和while循环的混用,不清楚该如何选择;今天就对这2个循环语句做深入的分析,让大家更好地了解这2个循环语句以方便后续学习的加深。...

Python编程基础:循环结构for和while

Python中的循环结构包括两个,一是遍历循环(for循环),一是条件循环(while循环)。遍历循环遍历循环(for循环)会挨个访问序列或可迭代对象的元素,并执行里面的代码块。foriinra...

学习编程第154天 python编程 for循环输出菱形图

今天学习的是刘金玉老师零基础Python教程第38期,主要内容是python编程for循环输出菱形※。(一)利用for循环输出菱形形状的*号图形1.思路:将菱形分解为上下两个部分三角形图案,分别利用...

python 10个堪称完美的for循环实践

在Python中,for循环的高效使用能显著提升代码性能和可读性。以下是10个堪称完美的for循环实践,涵盖数据处理、算法优化和Pythonic编程风格:1.遍历列表同时获取索引(enumerate...

python学习——038python中for循环VS列表推导式

在Python中,for循环和列表推导式(ListComprehension)都可以用于创建和处理列表,但它们的语法、性能和适用场景有所不同。以下是两者的详细对比:1.语法结构for循环使用...

Python基础学习7——for循环和range函数

代码的执行流程:默认执行流程:从上往下依次执行流程控制语句:判断语句(分支)if、循环语句while,for——可以改变代码的执行顺序if和while的区别:if只会执行一次,while会校验多次。当...

Python的循环结构:while循环和for循环

#一起学Python#Python的循环结构包括:while循环和for循环一、while循环while循环是最简单的循环结构,咱们用一个1到n的累加任务体验while循环。注意:1、“+=”表示累加...

Python for循环几种常用场景(python里面for循环)

#程序员##python##python自学##计算机#一、概述可迭代的对象可以使用for循环进行遍历,例如:字符串、列表、字典、元组和集合for循环里面有一个隐藏的机制,就是自动执行inde...

零基础学python第八天之for循环(python里面for循环)

我们的目标是:用最短的时间从编程零基础提升到掌握python常用的基本知识。加油!我们之前在猜数字小游戏中使用过while来实现循环,今天我们再来学习一种循环的实现方法——for循环。在python中...

Python中while循环语句与for循环语句操作注意事项

一、while循环语句:1、只要你给的条件为真,它就会不停地循环执行下去(死循环)。所以在使用while语句的时候,你就要想好条件怎么给。2、当然任何事情都是可以商量的,你可以使用break语句,...