数据仓库入门(hive篇)

前言:快秋招了,准备学一点数据仓库的东西,应聘大数据开发。看课随记。(这里主要是看一点hive的东西,感觉数仓项目用到最多的就是hive)

一、Hive相关

1.Hive是什么?
  • hive是建立在hadoop之上的开源的数据仓库系统,可以将存储在hadoop的hdfs上的结构化,半结构化的数据文件映射(映射指文件和表之间的对应关系)为一张数据库表,基于表提供了一种类似于sql的语言:hql,用于访问和分析存储在hadoop文件中的大型数据集.
  • Hive的核心是将hql转化成mapreduce程序,然后将程序提交到hadoop集群执行.

总结来说:Hive承担的功能职责就是将用户编写的hql语言转化为napreduce程序,处理位于HDFS上的数据.

    1.1 既然Hive是一个数据仓库系统,那它具备数仓的能力嘛?

从功能来讲,数据仓库软件至少要具备两种能力:存储数据和分析数据的额能力.

Hive当然也具备上述两种能力,但不是自己实现,而是借助hadoop:利用hdfs存储,利用mapreduce查询分析数据.

2.Hive的架构,组件有哪些?
  • 用户接口:Hive提供用户接口写sql.
  • 元数据存储:Hive的元数据存储组件存储的是HDFS中的数据文件与表的映射关系,包括表的数据所在的目录,表的名字,表对应那个文件,表的列,以及表的字段分割符号,表的属性(是否为外部表)等.通常存储在关系型数据库中,这样后续hive才知道写的hql是什么意思.
  • Dirver驱动程序,包括语法解析器,编译器,优化器,执行器:对hql进行转化.
  • 执行引擎:hive本身不直接处理数据文件,而是通过引擎取处理.Hive3.0支持:MapReduce,Tez,Spark 3种引擎.
3.Hive与数据库

Hive是不是数据库? 不是,Hive是数据仓库

Hive与数据库的相似之处? Hive的数据模型类似于RDBMS库表结构,此外还有自己特有的模型.

Hive种的数据可以在粒度级别上分为三类:

  • Table 表
  • Partition 分区
  • Bucket 分桶

4.Hive相关:
  • Hive作为一个数据仓库,在结构上和传统的数据库看齐,也分为数据库,每一个数据库有各自的表组成.默认数据库default.
  • Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定.默认值为/user/hive/warehouse.

      hive数据库本质上在hdfs上是一个文件夹                                                                              

  • 因此,Hive中的数据库在HDFS上的存储路径为: ${hive.metastore.warehouse.dir}/ databasename.db
  • 比如,名为itcast的数据库存储路径为"/user/hive/warehouse/itcast.db
        4.1 Table 表:
  • Hive表与关系型数据库中的表相同.Hive中表所对应的数据通常是存储在HDFS中,而表相关的元数据是存储在RDBMS中.
  • Hive中表的数据在HDFS上的路径为:${hive.metastore.warehouse.dir}/ databasename.db / tablename.

         4.2 Partitions 分区

Partitions 分区是hive的一种优化手段表.分区是指根据分区列(例如"日期day")的值将表划分为不同分区.这样可以更快的对指定分区数据进行查询.

  • 分区在存储层面上的表现是:table表目录下以子文件夹形式存在.
  • 一个文件夹表示一个分区.子文件命名标准:分区列=分区值.

        4.3 Bucket 分桶

bucket分桶表是hive的一种优化手段表.分桶是指根据表中字段(例如"编号ID")的值,经过hash计算规则将数据文件划分成指定的若干个小文件.

分桶规则:hashfunc(字段)%桶个数,玉树相同的分到同一个文件.

分桶好处:优化join查询和方便抽样查询.

分桶在HDFS中表现为同一个表目录根据hash散列之后变成多个文件.

5.在Hive中,什么是元数据?

元数据(metadata),是描述数据的数据,主要是描述数据的属性的信息,比如:存储位置,历史数据,资源查找,文件记录等.

 Hive Metadata:
  • hive的元数据
  • 包含用hive创建的database,table,表的位置,类型,属性,字段顺序等元信息.
  • 元数据存储在关系型数据库中,如hive内置的Derby,或者第三方如Mysql.
 Hive Metastore:

二、Hive的语法

1.创建表与删除表
1.1、创建表的基本语法
create [external] Table table_name
[(col_name data_type [comment col_comment],..)]
[comment table_comment]
[PARTITIONED BY (col_name data_type [comment col_comment],..)]
[CLUSTERED BY (col_name,col_name,....)]
[STORTED BY (col_name [ASC|DESC],...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORT AS FILE_FORMAT]
[LOCATION hdfs_path]
  • extrenal 外部表
  • partitioned by 分区表
  • clustered by 分桶表
  • stored as 存储格式
  • location 存储位置
1.2删除表的语法
drop table db_name.table_name
2.在Hive中,可以创建的表的类型。
  • 内部表
  • 外部表
  • 分区表
  • 分桶表
2.1 内部表
create table tb_name

未被external修饰的表就是内部表。

内部表的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/warehouse.

删除内部表会直接删除元数据(metastore)及存储数据

2.2 外部表
create external table tb_name ... LOCATION "HDFS_path"

外部表被external修饰,其数据可以在任何位置,通过LOCATION关键字指定。

数据存储的不同也代表了这个表在理念上并不是hive在管理,而是可以随意临时链接在外部数据上。

所以在删除外部表,仅仅删除元数据,不删除数据本身。

(注意,表本身和数据是相互独立的,可以先有表,然后把数据移动到表指定的location中,也可以先有数据,然后创建表通过location指向数据。)

2.3 Hive数据加载和导出
  • 使用LOAD语法,从外部将数据加载到HIVE内。(从文件加载)

(hive的数据存储在hdfs的路径上,因为hdfs是分布式存储系统,然后在从hdfs上加载到hive内)

LOAD DATA [LOCAL] INPATH "filepath" [OVERWRITE] INTO TABLE tb_name
  1. 数据如果在HDFS上,不需要local关键字,如果在linux本地,需要local关键字。
  2. ”file path“ 数据路径
  3. overwrite :使用表示覆盖,不使用表示追加。

 --->从创建表到将数据load到hive内(指在hive内创建表,然后把其他地方的数据加载到hive中)

# 建表(内部表默认在user/hive/
create table myhive.test_load(
dt string comment "时间",
user_id string comment "用户id",
search_word string comment "搜索关键词",
url string comment "网址" )
row format delimited fields terminated by "\t";


# 数据加载(现在是有表,然后将数据加载到表里边,即hive内,即hdfs的一块区域,但是这个区域是hive)
1.将linux系统的数据上传。

load data [local] inpath "/home/user/search_log.txt' into table myhive.test_load;

2.使用hdfs命令先将数据上传到hdfs系统中,再从hdfs系统上传。
hdfs -s -put search_log.txt /tmp  # 将本地路径为search_log.txt的文件上传到hdfs下的tmp上。
(该句在linux上执行)

load data inpath "/tmp/search_log.txt" into table myhive.test_load;

注意:将本地的数据上传,本地数据还在,将hdfs的数据上传,hdfs的数据没有了,相当于移动。 

  • 通过SQL语句加载 ,从其他表加载数据。

情景:现在hive下边有两张表,一张table1,一张table2,现在table1中有数据,table2是空的。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值