数仓基础与hive入门

news2024/9/29 17:21:49

目录

    • 1、数仓
      • 数据仓库主流开发语言--SQL
    • 2、Apache Hive入门
      • 2.1 hive定义
      • 2.2 为什么使用Hive
      • 2.3 Hive和Hadoop关系
      • 2.4 场景设计:如何模拟实现Hive功能
      • 2.5 Apache Hive架构、组件
    • 3、Apache Hive安装部署
      • 3.1 metastore配置方式
    • 4、Hive SQL语言:DDL建库、建表
      • 4.1 数据库与建库
      • 4.2 表与建表
        • 4.2.1 数据类型
        • 4.2.2 分隔符指定语法
        • 4.2.3 案例:结构化文件映射成表
      • 4.3 Hive Show语法
      • 4.4 注释comment中文乱码问题解决

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 表名(..) #载创建即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内存保护_2:RTA-OS内存保护逻辑及配置说明

上一篇 | 返回主目录 | 下一篇 内存保护_2:RTA-OS内存保护逻辑及配置说明3 OS配置说明3.1 OS一些基本概念及相互关系3.1.1 基本概念3.1.2 相互关系3.2 内存保护基本逻辑(RTA-OS)3.2.1 应用集的基本分类3.2.2 内存保护与应用集的关系3.3 OS等级…

七大排序(Java)

目录 一、插入排序 1. 直接插入排序 2. 希尔排序 二、选择排序 1. 直接选择排序 2. 堆排序 三、交换排序 1. 冒泡排序 2. 快速排序 四、归并排序 五、总结 一、插入排序 1. 直接插入排序 抓一张牌,在有序的牌中,找到合适的位置并且插入。 时间…

三战阿里测试岗,成功上岸,面试才是测试员涨薪真正的拦路虎...

第一次面试阿里记得是挂在技术面上,当时也是技术不扎实,准备的不充分,面试官出的面试题确实把我问的一头雾水,还没结束我就已经知道我挂了这次面试。 第二次面试,我准备的特别充分,提前刷了半个月的面试题…

防止jar被反编译 不安装jdk运行jar

防止jar被反编译1.pom.xml<repositories><repository><id>jitpack</id><url>https://jitpack.io</url></repository> </repositories><dependencies><dependency><groupId>org.openjfx</groupId><…

RabbitMQ死信队列

目录 一、概念 二、出现死信的原因 三、实战 &#xff08;一&#xff09;代码架构图 &#xff08;二&#xff09;消息被拒 &#xff08;三&#xff09;消息TTL过期 &#xff08;四&#xff09;队列达到最大长度 一、概念 先从概念解释上搞清楚这个定义&#xff0c;死信&…

Spark 3.3.x 读取 HBase 2.x 异常(无法正常连接或读取数据)

无法连接 1. 先检查集群中的 HBase 服务、ZooKeeper 服务是否正常启动&#xff0c;有没有挂掉。 2. Spark 中的 HBase 版本是否与集群一致&#xff0c;代码中的相关包是否导入正确。 3. 连接参数&#xff08;地址、端口&#xff09;是否设置正确&#xff0c;如下所示&#x…

pyqt 制作exe步骤

之前的博客记录 使用pycharmpyqt 编写一个桌面端&#xff08;mac&#xff09;_python开发桌面工具mac_Y_Hungry的博客-CSDN博客 python开发exe程序界面及打包环境配置_Y_Hungry的博客-CSDN博客 1.编写代码 2.打包 pyinstaller -w --add-data "logo.ico;." --add…

Redis常见的数据类型命令

文章目录Redis 常见的数据类型及命令一、常见的NoSQL二、Redis 简介三、key 键的一些操作命令四、Redis的五种基本数据结构1、String&#xff08;字符串&#xff09;介绍常用命令1.1 set/get1.2 append1.3 strlen1.4 setex1.5 mset/mget1.6 setrange/getrange1.7 setnx1.8 incr…

数据库管理工具的使用

目录 摘要 一、Navicat是什么&#xff1f; 二、使用步骤 1.如何下载与安装 2.如何连接远程数据库 总结 摘要 本文主要介绍数据库管理工具的使用 一、Navicat是什么&#xff1f; 它是一款数据库管理工具&#xff0c;将此工具连接数据库,你可以从中看到各种数据库的详细…

JavaScript 面向对象【快速掌握知识点】

目录 类和对象 属性和方法 继承 多态 封装 类和对象 类是用于定义对象的模板或蓝图&#xff1b;它包含对象的属性和方法&#xff0c;我们可以使用class关键字来定义类。 class Person {constructor(name, age) {this.name name;this.age age;}sayHello() {console.log(H…

JSP+SQL电量监视系统设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;电脑界常有一股又一股的风潮&#xff0c;在这风潮中&#xff0c;JBuilder 是使用最广泛的工具之一。JBuilder6 提供了可视化集成开发工具&#xff0c;支持开发人员构建标准的爪哇应用系统。其开放的环境、基于组建的开发方式和丰富…

【软件测试面试题】2023年测试人面试专属,最全接口测试面试题大全(附回答)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 1、HTTP和HTTPS协议…

2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A(9)

目录 竞赛内容 模块A 基础设施设置与安全加固 一、项目和任务描述&#xff1a; 二、服务器环境说明 三、具体任务&#xff08;每个任务得分以电子答题卡为准&#xff09; A-1任务一 登录安全加固&#xff08;Windows&#xff09; 1.密码策略 a.更改或创建密码时执行复杂…

17- TensorFlow实现手写数字识别 (tensorflow系列) (项目十七)

项目要点 模型创建: model Sequential()添加卷积层: model.add(Dense(32, activationrelu, input_dim100)) # 第一层需要 input_dim添加dropout: model.add(Dropout(0.2))添加第二次网络: model.add(Dense(512, activationrelu)) # 除了first, 其他层不要输入shape添加输出…

这是一款值得开发人员认真研究的软件,数据库优化,应用服务器安全优化...

1.查询数据库死锁相关信息2.查看数据库的链接情况3.当前实例上的所有用户4.创建数据库独立密码5.查看数据库使用的端口号6.当前数据库设置的最大连接数7.当前数据库最大的理论可连接数8.当前数据库实例的连接数9.当前数据库连接数10.当前数据库连接超时设置11.当前sqlserver 超…

SMART系统—考试监控及阅卷模块的设计与开发

技术&#xff1a;Java、JSP等摘要&#xff1a;Smart在线考试评估系统(简称“SMART系统”)&#xff0c;是基于Browser/Server&#xff08;简称B/S&#xff09;结构的数据库访问模式&#xff0c;采用Struts Spring Hibernate作为平台搭建的框架开发的一套新型智能的远程教育软件…

伺服三环控制深层原理解析

我们平时使用的工业伺服,通常是成套伺服,即驱动器和电机型号存在配对关系。 但有些时候,我们要用电机定转子和编码器制作非成套电机,这种时候,我们需要对驱动器进行各种设置才能驱动电机。 此篇文章将通过介绍伺服控制的三环控制原理入手来说明我们调试非成套伺服时需要…

2023年微信小程序获取手机号授权登录注册详细教程,包含服务端教程

前言 小程序中有很多地方都会用到用户的手机号&#xff0c;比如登陆注册&#xff0c;填写收货地址等等。有了这个组件可以快速获取微信绑定手机号码&#xff0c;无须用户填写。网上大多数教程还是往年的&#xff0c;而微信官方的api已做了修改。本篇文章将使用最新的方法获取手…

【unity学习记录】Canvas Group组件

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Canvas Group组件 Canvas Group画布组介绍详解1. Alpha2. Interactable3. Blocks Raycasts4. Ignore Parent Groups介绍 画布组…

用反射模拟IOC模拟getBean

IOC就是spring的核心思想之一&#xff1a;控制反转。这里不再赘述&#xff0c;看我的文章即可了解&#xff1a;spring基础思想IOC其次就是java的反射&#xff0c;反射机制是spring的重要实现核心&#xff0c;今天我看spring的三级缓存解决循坏引用的问题时&#xff0c;发现一个…