Hive-01之数仓、架构、数据类型、DDL、内外部表

一、主题

  1. hive的核心概念
  2. hive与数据库的区别
  3. hive的架构原理
  4. hive的安装部署
  5. hive的交互式方式
  6. hive的数据类型
  7. hive的DDL语法操作

二、要点

1.数据仓库的基本概念

1.数据仓库的基本概念

英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持目的而创建。

数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。

2.数据仓库的主要特征

数据仓库是面向主题的(Subject-Oriented)、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策。

3. 数据仓库与数据库区别

数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别。

操作型处理,叫联机事务处理 OLTP(On-Line Transaction Processing,),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。

分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析,支持管理决策。

首先要明白,数据仓库的出现,并不是要取代数据库。

数据库是面向事务的设计,数据仓库是面向主题设计的。

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

数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。

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

以银行业务为例。数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,这里,可以简单地理解为用数据库记账。数据仓库是分析系统的数据平台,它从事务系统获取数据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立ATM了。

显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。事务系统是实时的,这就要求时效性,客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。而分析系统是事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但是,只要能够提供有效的分析数据就达到目的了。

数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。

4.数据仓库分层架构

按照数据流入流出的过程,数据仓库架构可分为三层——源数据数据仓库数据应用。

数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。

源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。

数据仓库层(DW):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。

数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。

数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。

⭐️4-1. 为什么要对数据仓库分层?
  1. 用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据;不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大。

  2. 通过大量的冗余数据来更好的应对源业务系统的变更;

  3. **通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完成,相当于把一个复杂的工作拆成了多个简单的工作,**把一个大的黑盒变成了一个白盒,每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。

2. Hive是什么

1 hive的概念

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一个MapReduce的客户端

在这里插入图片描述

2 Hive与数据库的区别

在这里插入图片描述

  • Hive 具有 SQL 数据库的外表,但应用场景完全不同。
  • == Hive 只适合用来做海量离线数据统计分析,也就是数据仓库 ==。
3 Hive的优缺点
  • 优点

    • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。

    • 避免了去写MapReduce,减少开发人员的学习成本。

    • Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

  • 缺点

    • Hive 不支持记录级别的增删改操作
    • Hive 的查询延迟很严重
      • hadoop jar xxxx.jar xxx.class /input /output
        • 进行任务的划分,然后进行计算资源的申请
        • map 0% reduce 0%
        • map 10% reduce 0%
    • Hive 不支持事务
⭐️4 Hive架构原理

在这里插入图片描述

  • 1、用户接口:Client
  • CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
  • 2、元数据:Metastore

    • 元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;

      • 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
  • 3、Hadoop集群

    • 使用HDFS进行存储,使用MapReduce进行计算。
  • 4、Driver:驱动器

    • 解析器(SQL Parser)
      • 将SQL字符串转换成抽象语法树AST
      • 对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误
    • 编译器(Physical Plan):将AST编译生成逻辑执行计划
    • 优化器(Query Optimizer):对逻辑执行计划进行优化
    • 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说默认就是mapreduce任务

在这里插入图片描述

3. Hive的安装部署

​ 注意hive就是一个构建数据仓库的工具,只需要在一台服务器上安装就可以了,不需要在多台服务器上安装。

  • 1、提前先安装好mysql服务和hadoop集群

    • 详细见https://www.cnblogs.com/brianzhu/p/8575243.html
  • 2、下载hive的安装包

    • http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.14.2.tar.gz
  • 3、规划安装目录

    • /kkb/install
  • 4、上传安装包到node03服务器中的/kkb/soft路径下

  • 5、解压安装包到指定的规划目录

    • cd /kkb/soft/
      tar -zxf hive-1.1.0-cdh5.14.2.tar.gz -C /kkb/install/
      
  • 6、修改配置文件

    • 进入到Hive的安装目录下的conf文件夹中

      • cd /kkb/install/hive-1.1.0-cdh5.14.2/conf/

      • mv hive-env.sh.template hive-env.sh

      • vim hive-env.sh

      #配置HADOOP_HOME路径
 	 	export HADOOP_HOME=/kkb/install/hadoop-2.6.0-cdh5.14.2/
      #配置HIVE_CONF_DIR路径
  		export HIVE_CONF_DIR=/kkb/install/hive-1.1.0-cdh5.14.2/conf
	*  vim hive-site.xml
		<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
		      <configuration>
		              <property>
		                      <name>javax.jdo.option.ConnectionURL</name>
		                      <value>jdbc:mysql://node03:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=latin1&amp;useSSL=false</value>
		              </property>
		      
		              <property>
		                      <name>javax.jdo.option.ConnectionDriverName</name>
		                      <value>com.mysql.jdbc.Driver</value>
		              </property>
		              <property>
		                      <name>javax.jdo.option.ConnectionUserName</name>
		                      <value>root</value>
		              </property>
		              <property>
		                      <name>javax.jdo.option.ConnectionPassword</name>
		                      <value>123456</value>
		              </property>
		              <property>
		                      <name>hive.cli.print.current.db</name>
		                      <value>true</value>
		              </property>
		              <property>
		                      <name>hive.cli.print.header</name>
		                  <value>true</value>
		              </property>
		          <property>
		                      <name>hive.server2.thrift.bind.host</name>
		                      <value>node03.kaikeba.com</value>
		              </property>
		      </configuration>
	* 修改hive的日志配置文件路径,便于我们排查hive出现的错误问题,node03执行以下命令,定义hive的日志文件存放路径
			mkdir -p /kkb/install/hive-1.1.0-cdh5.14.2/logs/
     		cd /kkb/install/hive-1.1.0-cdh5.14.2/conf/
      		mv hive-log4j.properties.template hive-log4j.properties
      		vim hive-log4j.properties
      		#更改以下内容,设置我们的日志文件存放的路径
      		hive.log.dir=/kkb/install/hive-1.1.0-cdh5.14.2/logs/
* ps: ==需要将mysql的驱动包上传到hive的lib目录下==

  * 例如 mysql-connector-java-5.1.38.jar

4. hive的交互方式

  • 先启动hadoop集群和mysql服务
1 Hive交互shell
cd /kkb/install/hive-1.1.0-cdh5.14.2
bin/hive
2 Hive JDBC服务
  • 启动hiveserver2服务

    • 前台启动

      cd /kkb/install/hive-1.1.0-cdh5.14.2
      bin/hive --service hiveserver2
      
    • 后台启动

      	cd /kkb/install/hive-1.1.0-cdh5.14.2
      	nohup  bin/hive --service hiveserver2  &
      
  • beeline连接hiveserver2

    重新开启一个会话窗口,然后使用beeline连接hive

   cd /kkb/install/hive-1.1.0-cdh5.14.2
   bin/beeline
   beeline> !connect jdbc:hive2://node03:10000
3 Hive的命令
  • hive -e sql语句
    • 使用 –e 参数来直接执行hql的语句
cd /kkb/install/hive-1.1.0-cdh5.14.2/
bin/hive -e "show databases"
  • hive -f sql文件

    • 使用 –f 参数执行包含hql语句的文件

    • node03执行以下命令准备hive执行脚本

    • cd /kkb/install/
      vim hive.sql
      
      文件内容如下
      create database if not exists myhive;
      
      通过以下命令来执行我们的hive脚本
      cd /kkb/install/hive-1.1.0-cdh5.14.2/
      bin/hive -f /kkb/install/hive.sql 
      

⭐️5、Hive的数据类型

1 基本数据类型
类型名称描述举例
booleantrue/falsetrue
tinyint1字节的有符号整数1
smallint2字节的有符号整数1
int4字节的有符号整数1
bigint8字节的有符号整数1
float4字节单精度浮点数1.0
double8字节单精度浮点数1.0
string字符串(不设长度)“abc”
varchar字符串(1-65355长度,超长截断)“abc”
timestamp时间戳1563157873
date日期20190715

数据类型转换

  1. 隐式类型转换
  2. 手动类型转换 cast(字段 as 目标类型) 如:cast(age as int)
2 复合数据类型
类型名称描述举例
array一组有序的字段,字段类型必须相同 array(元素1,元素2)Array(1,2,3)
map一组无序的键值对 map(k1,v1,k2,v2)Map(‘a’,1,‘b’,2)
struct一组命名的字段,字段类型可以不同 struct(元素1,元素2)Struct(‘a’,1,2,0)
  • array字段的元素访问方式:

    • 下标获取元素,下标从0开始

      • 获取第一个元素

        • array[0]
  • map字段的元素访问方式

    • 通过键获取值

      • 获取a这个key对应的value

        • map[‘a’]
  • struct字段的元素获取方式

    • 定义一个字段c的类型为struct{a int;b string}
      • 获取a和b的值
        • 使用c.a 和c.b 获取其中的元素值
          • 这里可以把这种类型看成是一个对象
create table complex(
         col1 array<int>,
         col2 map<string,int>,
         col3 struct<a:string,b:int,c:double>
)

3 复合类型使用说明和实战

参考文档

3-1、参数说明
创建表的时候可以指定每行数据的格式,如果使用的是复合数据类型,还需要指定复合数据类型中的元素分割符
ROW FORMAT DELIMITED 
	[FIELDS TERMINATED BY char [ESCAPED BY char]] 
	[COLLECTION ITEMS TERMINATED BY char]
	[MAP KEYS TERMINATED BY char] 
	[LINES TERMINATED BY char]
		
其中这里 
FIELDS TERMINATED BY char 	         指定每一行记录中字段的分割符
COLLECTION ITEMS TERMINATED BY char  指定复合类型中多元素的分割符
MAP KEYS TERMINATED BY char         指定map集合类型中每一个key/value之间的分隔符
LINES TERMINATED BY char            指定每行记录的换行符,一般有默认 就是\n 
3-2、Array类型
  • array中的数据为相同类型,例如,假如array A中元素[‘a’,‘b’,‘c’],则A[1]的值为’b’

  • 准备数据文件

    • t_array.txt (字段空格分割)
  1 zhangsan beijing,shanghai
  2 lisi shanghai,tianjin
  • 建表语法
  create table t_array(
  id string,
  name string,
  locations array<string>
  ) row format delimited fields terminated by ' ' collection items terminated by ',';
  • 加载数据
  load data local inpath '/home/hadoop/t_array.txt' into table t_array;
  • 查询数据

    select id,name,locations[0],locations[1] from t_array;
    
3-3、Map类型
  • map类型中存储key/value类型的数据,后期可以通过[“指定key名称”]访问

  • 准备数据文件

    • t_map.txt (字段空格分割)

      1 name:zhangsan#age:30
      2 name:lisi#age:40
      
  • 建表语法

 create table t_map(
 id string,
 info map<string,string>
 ) row format delimited fields terminated by ' ' collection items terminated by '#' map keys terminated by ':';
  • 加载数据
  load data local inpath '/home/hadoop/t_map.txt' into table t_map;
  • 查询数据
  select id,info['name'],info['age'] from t_map;
3-4、Struct类型
  • 可以存储不同类型的数据

    • 例如c的类型为struct{a INT; b INT},我们可以通过c.a来访问域a
  • 准备数据文件

    • t_struct.txt (字段空格分割)

      1 zhangsan:30:beijing
      2 lisi:40:shanghai
      
  • 建表语法

    create table t_struct(
    id string,
    info struct<name:string, age:int,address:String>
    ) row format delimited fields terminated by ' ' collection items terminated by ':' ;
    
  • 加载数据

    load data local inpath '/home/hadoop/t_struct.txt' into table t_struct;
    
  • 查询数据

    select id,info.name,info.age,info.address from t_struct;
    

6、Hive的DDL操作

1 hive的数据库DDL操作
1、创建数据库
hive > create database db_hive;
# 或者
hive > create database if not exists db_hive;
  • 数据库在HDFS上的默认存储路径是==/user/hive/warehouse/*.db==
2、显示所有数据库
  hive> show databases;
3、查询数据库
hive> show databases like 'db_hive*';
4、查看数据库详情
hive> desc database db_hive;
5、显示数据库详细信息
hive> desc database extended db_hive;
6、切换当前数据库
hive > use db_hive;
7、删除数据库
#删除为空的数据库
hive> drop database db_hive;

#如果删除的数据库不存在,最好采用if exists 判断数据库是否存在
hive> drop database if exists db_hive;

#如果数据库中有表存在,这里需要使用cascade强制删除数据库
hive> drop database if exists db_hive cascade;
2 hive的表DDL操作
1 、建表语法介绍
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 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, ...) 分桶
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format]  row format delimited fields terminated by “分隔符”
[STORED AS file_format] 
[LOCATION hdfs_path]

官网地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

2 、字段解释说明
  • create table

    • 创建一个指定名字的表
  • EXTERNAL

    • 创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),指定表的数据保存在哪里
  • COMMENT

    • 为表和列添加注释
  • PARTITIONED BY

    • 创建分区表
  • CLUSTERED BY

    • 创建分桶表
  • SORTED BY

    • 按照字段排序(一般不常用)
  • ROW FORMAT

    • 指定每一行中字段的分隔符

      • row format delimited fields terminated by ‘\t’
  • STORED AS
    • 指定存储文件类型
      • 常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)
      • 如果文件数据是纯文本,可以使用STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE
  • LOCATION

    • 指定表在HDFS上的存储位置。
3、 创建内部表
  • 1、直接建表
    • 使用标准的建表语句
use myhive;
create table stu(id int,name string);

可以通过insert  into  向hive表当中插入数据,但是不建议工作当中这么做
insert  into stu(id,name) values(1,"zhangsan");
select * from  stu;
  • 2、查询建表法
    • 通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据
create table if not exists myhive.stu1 as select id, name from stu;
  • 3、like建表法
    • 根据已经存在的表结构创建表
create table if not exists myhive.stu2 like stu;
  • 4、查询表的类型
hive > desc formatted myhive.stu;

在这里插入图片描述

创建内部表并指定字段之间的分隔符,指定文件的存储格式,以及数据存放的位置

create  table if not exists myhive.stu3(id int ,name string)
row format delimited fields terminated by '\t' stored as textfile location       '/user/stu2';
4、 创建外部表

外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉

create external table myhive.teacher (t_id string,t_name string) row format delimited fields terminated by '\t';
  • 创建外部表的时候需要加上**external** 关键字
  • location字段可以指定,也可以不指定
    • 指定就是数据存放的具体目录
    • 不指定就是使用默认目录 /user/hive/warehouse

在这里插入图片描述

向外部表当中加载数据:

我们前面已经看到过通过insert的方式向内部表当中插入数据,外部表也可以通过insert的方式进行插入数据,只不过insert的方式,我们一般都不推荐,实际工作当中我们都是使用load的方式来加载数据到内部表或者外部表

load数据可以从本地文件系统加载或者也可以从hdfs上面的数据进行加载

  • 从本地文件系统加载数据到teacher表当中去,将我们附件当汇总的数据资料都上传到node03服务器的/kkb/install/hivedatas路径下面去

    mkdir -p /kkb/install/hivedatas
    #将数据都上传到/kkb/install/hivedatas路径下,然后在hive客户端下执行以下操作
    load data local inpath '/kkb/install/hivedatas/teacher.csv' into table myhive.teacher;
    
  • 从hdfs上面加载文件到teacher表里面去(将teacher.csv文件上传到hdfs的/kkb/hdfsload/hivedatas路径下)

    cd /kkb/install/hivedatas
    hdfs dfs -mkdir -p /kkb/hdfsload/hivedatas
    hdfs dfs -put teacher.csv /kkb/hdfsload/hivedatas
    # 在hive的客户端当中执行
    load  data  inpath  '/kkb/hdfsload/hivedatas'  overwrite into table myhive.teacher;
    
5、 内部表与外部表的互相转换
  • 1、内部表转换为外部表
#将stu内部表改为外部表
alter table stu set tblproperties('EXTERNAL'='TRUE');
  • 2、外部表转换为内部表
#把emp外部表改为内部表
alter table teacher set tblproperties('EXTERNAL'='FALSE');
⭐️6、 内部表与外部表的区别
  • 1、建表语法的区别

    • 外部表在创建的时候需要加上external关键字
  • 2、删除表之后的区别

    • 内部表删除后,表的元数据和真实数据都被删除了
  • 外部表删除后,仅仅只是把该表的元数据删除了,真实数据还在,后期还是可以恢复出来

⭐️7、内部表与外部表的使用时机

​ 内部表由于删除表的时候会同步删除HDFS的数据文件,所以确定如果一个表仅仅是你独占使用,其他人不适用的时候就可以创建内部表,如果一个表的文件数据,其他人也要使用,那么就创建外部表

一般外部表都是用在数据仓库的ODS层

内部表都是用在数据仓库的DW层

⭐️8、hive的分区表

如果hive当中所有的数据都存入到一个文件夹下面,那么在使用MR计算程序的时候,读取一整个目录下面的所有文件来进行计算,就会变得特别慢,因为数据量太大了,实际工作当中一般都是计算前一天的数据,所以我们只需要将前一天的数据挑出来放到一个文件夹下面即可,专门去计算前一天的数据。这样就可以使用hive当中的分区表,通过分文件夹的形式,将每一天的数据都分成为一个文件夹,然后我们计算数据的时候,通过指定前一天的文件夹即可只计算前一天的数据。

在大数据中,最常用的一种思想就是分治思想,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了

在这里插入图片描述

在文件系统上建立文件夹,把表的数据放在不同文件夹下面,加快查询速度。

创建分区表语法

hive (myhive)> create table score(s_id string,c_id string, s_score int) partitioned by (month string) row format delimited fields terminated by '\t';

创建一个表带多个分区

hive (myhive)> create table score2 (s_id string,c_id string, s_score int) partitioned by (year string,month string,day string) row format delimited fields terminated by '\t';

加载数据到分区表当中去

 hive (myhive)>load data  local inpath '/kkb/install/hivedatas/score.csv' into table score partition  (month='201806');

加载数据到多分区表当中去

hive (myhive)> load data local inpath '/kkb/install/hivedatas/score.csv' into table score2 partition(year='2018',month='06',day='01');

查看分区

hive (myhive)> show  partitions  score;

添加一个分区

hive (myhive)> alter table score add partition(month='201805');

同时添加多个分区

hive (myhive)> alter table score add partition(month='201804') partition(month = '201803');

注意:添加分区之后就可以在hdfs文件系统当中看到表下面多了一个文件夹

删除分区

hive (myhive)> alter table score drop partition(month = '201806');

外部分区表综合练习:

需求描述:现在有一个文件score.csv文件,里面有三个字段,分别是s_id string, c_id string,s_score int,字段都是使用 \t进行分割,存放在集群的这个目录下/scoredatas/day=20180607,这个文件每天都会生成,存放到对应的日期文件夹下面去,文件别人也需要公用,不能移动。需求,创建hive对应的表,并将数据加载到表中,进行数据统计分析,且删除表之后,数据不能删除

需求实现:

数据准备:

node03执行以下命令,将数据上传到hdfs上面去

将我们的score.csv上传到node03服务器的/kkb/install/hivedatas目录下,然后将score.csv文件上传到/kkb/install/hivedatas目录下去

cd /kkb/install/hivedatas/
hdfs dfs -mkdir -p /scoredatas/day=20180607
hdfs dfs -put score.csv /scoredatas/day=20180607/

创建外部分区表,并指定文件数据存放目录

hive (myhive)> create external table score4(s_id string, c_id string,s_score int) partitioned by (day string) row format delimited fields terminated by '\t' location '/scoredatas';

进行表的修复,说白了就是建立我们表与我们数据文件之间的一个关系映射

hive (myhive)> msck  repair   table  score4;

修复成功之后即可看到数据已经全部加载到表当中去了

三、拓展

  • hive cli命令窗口查看本地文件系统

    • 与操作本地文件系统类似,这里需要使用 ! (感叹号),并且最后需要加上 ;(分号)
    • 例如
      • !ls /;
  • hive cli命令窗口查看HDFS文件系统

    • 与查看HDFS文件系统类似
      • dfs -ls / ;
  • hive的底层执行引擎有3种

    • mapreduce(默认)
    • tez(支持DAG作业的计算框架)mr1–>mr2 -->mr3
    • spark(基于内存的分布式计算框架)

四、总结

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Markdown 语法简洁讲解】

Markdown 语法简洁语法讲解 什么是 Markdown1. 标题2. 列表3.文本样式4. 链接与图片5. 代码6. 表格7. 分割线8. 流程图9. 数学公式10. 快捷键11. 字体、字号与颜色 什么是 Markdown Markdown 是一种轻量级标记语言&#xff0c;通过简单的符号实现排版格式化&#xff0c;专注于…

数据如何安全“过桥”?分类分级与风险评估,守护数据流通安全

信息化高速发展&#xff0c;数据已成为企业的核心资产&#xff0c;驱动着业务决策、创新与市场竞争力。随着数据开发利用不断深入&#xff0c;常态化的数据流通不仅促进了信息的快速传递与共享&#xff0c;还能帮助企业快速响应市场变化&#xff0c;把握商业机遇&#xff0c;实…

Linux网络 TCP全连接队列与tcpdump抓包

TCP全连接队列 在 Linux 网络中&#xff0c;TCP 全连接队列&#xff08;也称为 Accept 队列&#xff09;是一个重要的概念&#xff0c;用于管理已经完成三次握手&#xff0c;即已经处于 established 状态但尚未被应用程序通过 accept( ) 函数处理的 TCP 连接&#xff0c;避免因…

网络流算法: Edmonds-Karp算法

图论相关帖子 基本概念图的表示: 邻接矩阵和邻接表图的遍历: 深度优先与广度优先拓扑排序图的最短路径:Dijkstra算法和Bellman-Ford算法最小生成树二分图多源最短路径强连通分量欧拉回路和汉密尔顿回路网络流算法: Edmonds-Karp算法网络流算法: Dinic算法 环境要求 本文所用…

Python的那些事第三十六篇:基于 Vega 和 Vega-Lite 的数据可视化解决方案,Altair 声明式可视化库

Altair 声明式可视化库:基于 Vega 和 Vega-Lite 的数据可视化解决方案 摘要 在数据科学和分析领域,有效的数据可视化是理解数据、发现模式和传达见解的关键。Python 作为数据科学的主要编程语言之一,提供了多种数据可视化库。其中,Altair 是一个基于 Vega 和 Vega-Lite 的…

文件描述符与重定向

1. open系统调用 在 Linux 中, open() 系统调用用于打开一个文件或设备&#xff0c;并返回一个文件描述符&#xff0c;通过该描述符可以进行文件读写操作。open() 可以用于创建新文件或打开已存在的文件&#xff0c;具体行为取决于传递给它的参数。 需要包含的头文件&#xf…

【WPF】绑定报错:双向绑定需要 Path 或 XPath

背景 最开始使用的是 TextBlock: <ItemsControl ItemsSource"{Binding CameraList}"><ItemsControl.ItemsPanel><ItemsPanelTemplate><StackPanel Orientation"Horizontal"/></ItemsPanelTemplate></ItemsControl.Item…

【Linux高级IO】五种IO模型 多路转接(select)

目录 1. 五种IO模型 1.1 阻塞式IO 1.2 非阻塞IO 1.3 信号驱动IO 1.4 多路转接 1.5 异步IO 2. 同步通信与异步通信 3. 多路转接 3.1 select 总结 1. 五种IO模型 1.1 阻塞式IO 阻塞式IO最为常见&#xff0c;在内核将数据准备好之前, 系统调用会一直等待&#xff0c;所有的…

Linux服务升级:Almalinux 升级 DeepSeek-R1

目录 一、实验 1.环境 2.Almalinux 部署 Ollama 3.Almalinux 升级 DeepSeek-R1 4.Almalinux 部署 docker 5. docker 部署 DeepSeek-R1 6.Almalinux 部署 Cpolar (内网穿透) 7.使用cpolar内网穿透 二、问题 1.构建容器失败 一、实验 1.环境 &#xff08;1&#xff09…

深度剖析数据分析职业成长阶梯

一、数据分析岗位剖析 目前&#xff0c;数据分析领域主要有以下几类岗位&#xff1a;业务数据分析师、商业数据分析师、数据运营、数据产品经理、数据工程师、数据科学家等&#xff0c;按照工作侧重点不同&#xff0c;本文将上述岗位分为偏业务和偏技术两大类&#xff0c;并对…

CosyVoice2整合包 特殊声音标记,声音克隆更逼真,新增批量生成

新增批量生成,可用于制作直播话术音频 特殊声音标记 符号示例1_语气加强<strong> </strong>每天都<strong>付出</strong>和<strong>精进</strong>&#xff0c;才能达到巅峰。2_呼吸声[breath][breath] 吸气,[breath] 呼气! [breath] 吸,[b…

vector习题

完数和盈数 题目 完数VS盈数_牛客题霸_牛客网 一个数如果恰好等于它的各因子(该数本身除外)之和&#xff0c;如&#xff1a;6321。则称其为“完数”&#xff1b;若因子之和大于该数&#xff0c;则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述&#xff…

如何保证 Redis 缓存和数据库的一致性?

如何保证 Redis 缓存和数据库的一致性&#xff1f; 1. 问题出现场景 先修改数据库&#xff0c;再删除缓存 删除数据库数据成功了&#xff0c;但是删除缓存却失败了&#xff0c;缓存中仍保留的是旧数据 先删除缓存&#xff0c;再删除数据库 如果 Redis 缓存删除成功后&#xf…

信刻光盘安全隔离与信息交换系统让“数据摆渡”安全高效

随着数据传输、存储及信息技术的飞速发展&#xff0c;信息安全保护已成为重中之重。各安全领域对跨网数据交互的需求日益迫切&#xff0c;数据传输的安全可靠性成为不可忽视的关键。为满足业务需求并遵守保密规范&#xff0c;针对于涉及重要秘密信息&#xff0c;需做到安全的物…

网络原理--TCP/IP(2)

我们在之前已经介绍到TCP协议的核心机制二,接下来我们将继续介绍其他的核心机制。 核心机制三:连接管理 即建立连接,断开连接,在正常情况下,TCP要经过三次握⼿建⽴连接,四次挥⼿断开连接。 建立连接:TCP是通过“三次握手” 在生活中的握手就是打招呼,,但握手操作没有…

Windows PicPick Professional-v7.3.2-中文版

Windows PicPick Professional-中文版 链接&#xff1a;https://pan.xunlei.com/s/VOKGwGVGWUDl7L8cW4D1A1W4A1?pwdw5qz# - 更新了中文翻译&#xff0c;默认取消检测升级&#xff0c;删除多国语言

校园二手交易微信小程序的设计与实现(论文源码调试讲解)

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…

数据结构之各类排序算法代码及其详解

1. 排序的概念 排序是一种常见的算法概念&#xff0c;用于将一组数据按照特定的顺序进行排列。排序算法的目的是将一组数据按照递增或递减的顺序重新排列。常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。排序算法的选择通常取决于数据规模、数据分布…

6.6.6 嵌入式SQL

文章目录 2个核心问题识别SQL语句主语言和SQL通信完整导图 2个核心问题 SQL语句嵌入高级语言需要解决的2个核心问题是&#xff1a;如何识别嵌入语句&#xff1f;如何让主语言&#xff08;比如C,C语言&#xff09;和SQL通信&#xff1f; 识别SQL语句 为了识别主语言中嵌入的SQL…

keil主题(vscode风格)

#修改global.prop文件&#xff0c;重新打开keil即可 # Keil uVision Global Properties File # This file is used to customize the appearance of the editor# Editor Font editor.font.nameConsolas editor.font.size10 editor.font.style0# Editor Colors editor.backgro…