Hive &mysql

发布于:2024-05-07 ⋅ 阅读:(26) ⋅ 点赞:(0)

前言

Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。Hive的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。

Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行,所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce计算框架,对存储在 HDFS 中的数据进行分析和管理。

Hive基本概念

Hive简介

为什么使用Hive

直接使用 MapReduce 所面临的问题: 人员学习成本太高 项目周期要求太短 MapReduce 实现复杂查询逻辑开发难度太大为什么要使用 Hive: 更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力 更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本 更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

Hive的特点

优点: 1.可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务横向扩展:通过分担压力的方式扩展集群的规模纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G 2.延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数 3.良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行缺点: 1.Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作) 2.Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能用在交互查询系统中。 3.Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而不是 OLTP(联机事务处理),这就是数据处理的两大级别)。

 

一、数据仓库和数据库

数仓和数据库的区别

一、数据仓库
       分析型处理(数据仓库),叫联机分析处理OLAP,也可以称为面向专业分析 人员进行数据分析,通常进行查询分析操作,一般针对某些主题的历史数据进行分析,支持管理决策。

        操作型处理(数据库),叫联机事务处理OLTP,也可以称面向用户交易的 处理系统,它是针对具体业务在数据库联机的日常操区别作,通常进行增删改查操作。

二、数据库与数据仓库的区别
         数据库是面向事务的设计,数据仓库是面向主题设计的。

         数据库一般存储业务数据,数据仓库存储的一般是历史数据。 

         数据库是为捕获数据而设计,数据仓库是为分析数据而设计

2、数仓分层

数仓架构可分为三层:源数据层、数据仓库层、数据应用层 

 

 数据仓库ETL/ELT

数据仓库ETL主要用于完成数据接入的过程,即从业务系统或其他数据源中提取数据,并进行数据清洗、转换和加载到目的地系统(如数据仓库)中的过程。该过程中,数据会经历抽取(Extract)、转换(Transform)和加载(Load)三个阶段,最终达到数据从源头流动到目标端的目的。

数据仓库ELT指的是将数据抽取出来后,直接进行加载,最后再进行数据转换的一种数据集成和处理方式。与传统的 ETL不同,ELT将数据的处理和加工过程转移到了数据仓库中,利用数据仓库的数据计算能力和分布式处理能力来处理和转换数据。

ETL遇到的挑战

具体来说,数据抽取是指从源数据系统中提取数据到目标数据系统,一般可以通过现成的工具来完成,如Sqoop、Kettle等。数据转换是指将抽取的数据进行清洗、标准化、加工等操作。这里需要注意的是,对于 非结构化或半结构化数据 ,由于数据格式多样化、标准化难度较大,因此可能需要花费一些时间进行数据清洗和处理。

MYSQL

 内部表

/*创建内部表*/
create table [if not exists] 内部表名(字段名 字段类型,...
)..;
/*复制内部表*/
/*复制表结构*/
CREATE TABLE 表名 like 存在的表名;
/*复制表结构和数据*/
CREATE TABLE 表名 as select语句;
/*删除内部表*/
drop table 内部表名;
/*查看表格式化信息*/
desc formatted 表名;
/*truncate清空内部表数据*/
truncate table 内部表名;

外部表


/*创建外部表*/
create external table [if not exists] 内部表名(字段名 字段类型,...
)..;
/*复制外部表*/
/*复制表结构*/
CREATE EXTERNAL TABLE 表名 like 存在的表名;
/*删除外部表*/
drop table 外部表名;
/*查看表格式化信息*/
desc formatted 表名;

1、表操作语法和数据类型

• EXTERNAL,创建外部表

• PARTITIONED BY, 分区表

• CLUSTERED BY,分桶表

• STORED AS,存储格式

• LOCATION,存储位置