数仓基础与hive入门

1、数仓

数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。

数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持

  • 数据仓库本身并不“生产”任何数据,也不需要“消费”任何的数据
  • 数仓为了分析数据而来
  • 业务数据存储在联机事务处理系统(OLTP)中,前台接收数据后,快速给出处理结果
    关系型数据库(RDBMS)是OLTP典型应用,比如:Oracle、MySQL、SQL Server等。
  • ,数仓是一个用于存储、分析、报告的数据系统,目的是构建面向分析的集成化数据环境。我们把这种面向分析、支持分析的系统称之为OLAP(联机分析处理)系统
    在这里插入图片描述

数仓主要特征:面向主题、集成性、非易失性、时变性

数据仓库主流开发语言–SQL

结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据

SQL应用广泛原因:学习成本低,对数据分析友好

结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据
非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和音频、视频信息等。

SQL主要语法分为两个部分:数据定义语言 (DDL)和数据操纵语言 (DML) 。

  • DDL语法使我们有能力创建或删除表,以及数据库、索引等各种对象,但是不涉及表中具体数据操作:
    CREATE DATABASE - 创建新数据库
    CREATE TABLE - 创建新表
  • DML语法是我们有能力针对表中的数据进行插入、更新、删除、查询操作:
    SELECT - 从数据库表中获取数据
    UPDATE - 更新数据库表中的数据
    DELETE - 从数据库表中删除数据
    INSERT - 向数据库表中插入数据

2、Apache Hive入门

2.1 hive定义

Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。

Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行

2.2 为什么使用Hive

使用Hadoop MapReduce直接处理数据所面临的问题:

  • 人员学习成本太高 需要掌握java语言
  • MapReduce实现复杂查询逻辑开发难度太大

使用Hive处理数据的好处:

  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
  • 避免直接写MapReduce,减少开发人员的学习成本
  • 支持自定义函数,功能扩展很方便
  • 背靠Hadoop,擅长存储分析海量数据集

2.3 Hive和Hadoop关系

从功能来说,数据仓库软件,至少需要具备下述两种能力:
存储数据的能力、分析数据的能力

Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
Hive利用HDFS存储数据,利用MapReduce查询分析数据。

这样突然发现Hive没啥用,不过是套壳Hadoop罢了。其实不然,Hive的最大的魅力在于用户专注于编写HQLHive帮您转换成为MapReduce程序完成对数据的分析

hive可以理解为sql on hadoop

2.4 场景设计:如何模拟实现Hive功能

Hive能将数据文件映射成为一张表,这个映射是指什么?
文件和表之间的对应关系

Hive软件本身到底承担了什么功能职责?
SQL语法解析编译成MapReduce

在hive中能够写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。

映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据 metadata)。

元数据信息应该包括:

  • 表对应着哪个文件(位置信息)
  • 表的列对应着文件哪一个字段(顺序信息)
  • 文件字段之间的分隔符是什么

用户写完sql之后,hive需要针对sql进行语法校验,并且根据记录的元数据信息解读sql背后的含义,制定执行计划
并且把执行计划转换成MapReduce程序来具体执行,把执行的结果封装返回给用户。
基于上面分析,hive架构图应该如下:
在这里插入图片描述

2.5 Apache Hive架构、组件

在这里插入图片描述
Hive组件:

  • 用户接口:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。

  • 元数据存储:通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
    我们分析的表数据在HDFS上,而元数据是存储在MySQL上的

  • Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器
    完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行

  • 执行引擎
    Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎。

3、Apache Hive安装部署

Metadata元数据:描述数据的数据
元数据存储在关系型数据库中,如hive内置的Derby、或者第三方如MySQL等

Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据
有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全
使用Metastore原因 :保证元数据的安全

在这里插入图片描述

3.1 metastore配置方式

metastore服务配置有3种模式:内嵌模式、本地模式、远程模式。
区分3种配置方式的关键是弄清楚两个问题:

  • Metastore服务是否需要单独配置、单独启动?
  • Metadata是存储在内置的derby中,还是第三方RDBMS,比如MySQL。
  • 企业推荐模式–远程模式部署

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

4、Hive SQL语言:DDL建库、建表

4.1 数据库与建库

在这里插入图片描述
数据在表中,表在库中

数据定义语言 (Data Definition Language, DDL),是SQL语言集中对数据库内部的对象结构进行创建,删除,修改等的操作语言,这些数据库对象包括database、table等
DDL核心语法由CREATE、ALTER与DROP三个所组成。DDL并不涉及表内部数据的操作。

HQL中create语法(尤其create table)将是学习掌握Hive DDL语法的重中之重。
建表是否成功直接影响数据文件是否映射成功,进而影响后续是否可以基于SQL分析数据

create database:
create database用于创建新的数据库
COMMENT:数据库的注释说明语句
LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse/dbname.db
WITH DBPROPERTIES:用于指定一些数据库的属性配置。

node1中:

create database ithei

可以回到node1:9870中Hadoop的/user/hive/warehouse/中找到ithei.db文件
use database
选择特定的数据库,切换当前会话使用哪一个数据库进行操作

drop database
删除数据库
默认行为是RESTRICT,这意味着仅在数据库为空时才删除它。
要删除带有表的数据库(不为空的数据库),我们可以使用CASCADE

#删除库itca ,itca库下没有表可以直接删除
drop database itca

4.2 表与建表

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
(col_name data_type [COMMENT col_comment], … )
[COMMENT table_comment]
[ROW FORMAT DELIMITED …];

create table [if not exists] [库名.]表名 (列名 数据类型 [comment "注释内容"],...) 
[row format delimited
fields terminated by "\t"];
4.2.1 数据类型

Hive数据类型指的是表中列的字段类型;

  • 整体分为两类:原生数据类型(primitive data type)和复杂数据类型(complex data type)。
  • 最常用的数据类型是字符串String和数字类型Int。

在这里插入图片描述

4.2.2 分隔符指定语法

ROW FORMAT DELIMITED语法用于指定字段之间等相关的分隔符,这样Hive才能正确的读取解析数据。

LazySimpleSerDe是Hive默认的,包含4种子语法,分别用于指定字段之间、集合元素之间、map映射 kv之间、换行的分隔符号

在这里插入图片描述

4.2.3 案例:结构化文件映射成表

文件archer.txt:
在这里插入图片描述
datagrip中写sql

数值类型int
字符串类型string

--1、创建一张表,将文件archer.txt映射成功
-- 表名
-- 字段、名称、类型、顺序
-- 字段之间的分隔符
create table ithei.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 "次要定位"
)
row format delimited
fields terminated by "\t";  --字段之间的分隔符是tab键 制表符

在datagrip中可以直接连接
可以在hdfs网页上上传文件数据,也可以node上上传:

cd ~
mkdir hivedata
cd hivedata/
hadoop fs -put archer.txt /user/hive/warehouse/itheima.db/t_archer
select * from t_archer;#可以显示出上传的表数据
  • Hive建表时如果没有row format语法指定分隔符,则采用默认分隔符;
  • 默认的分割符是’\001’,是一种特殊的字符,使用的是ASCII编码的值,在文本中显示SOH,在vim编辑中显示^A

4.3 Hive Show语法

1,显示所有数据库
SCHEMAS和DATABASES的用法 功能一样

show databases;
show schemas;

2,显示当前数据库下所有表

show tables;
show tables [in 库名] --指定某个数据库

3,显示一张表的元数据信息

desc formatted 表名;
--会显示字段名,类型,注释等等信息

4.4 注释comment中文乱码问题解决

mysql默认编码不支持中文,支持的是latin1编码。如果中文注释出现???的乱码格式。下面方法解决:

node上:

mysql -u root -p 回车,输入密码
进入MySQL
show databases;
use hive3;
show tables;

在MySQL中复制下面的代码进去执行。ctrl +d结束

alter table hive3.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table hive3.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table hive3.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table hive3.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table hive3.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

此时改好了编码,但是已经创建的表中文还是错误,需要删除表后再创建即可

drop table 表名;  #删除
create table 表名(..) #载创建即可
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值