hive(02)、数据仓库Hive的基本使用

Wesley13
• 阅读 615

        在上篇《 hive(01)、基于hadoop集群的数据仓库Hive搭建实践 》一文中我们搭建了分布式的数据仓库Hive服务,本文主要是在上文的基础上结合Hadoop分布式文件系统,将结构化的数据文件映射为一张数据库表,将sql语句转换为MapReduce任务进行运行的具体实践。Hive帮助无开发经验的数据分析人员,有能力处理大数据还可以构建标准化的MapReduce开发过程,因此我们学习大数据就有必要学习下Hive了。

一、环境准备

1.hadoop集群环境

2.完整的Hive服务环境(连接了远程元数据库服务)

注:hadoop集群或者hive服务没有搭建,请从参考前面的文章

二、实践准备

1.启动hadoop集群

启动hadoop三台机器,然后在主节点机器上启动hadoop集群:start-all.sh

hive(02)、数据仓库Hive的基本使用

2.启动Hiveserver服务

在hive机器上启动hiveserver服务:hive --service hiveserver2 或者hive --service hiveserver2 &

3.启动Hive Metastore服务

在hive机器上启动Hive Metastore服务:hive --service metastore或者hive --service metastore &      

hive(02)、数据仓库Hive的基本使用

看到如下信息,说明启动完成:

hive(02)、数据仓库Hive的基本使用

4.验证启动

在终端输入jps -ml查看:

hive(02)、数据仓库Hive的基本使用

可以看到hadoop集群个hive服务启动都正常

三、实践过程

1.启动hive客户端

在hive机器上启动hiveserver服务:hive 或者hive shell

hive(02)、数据仓库Hive的基本使用

2.基本操作

<1>.创建表

在hive控制台输入脚本:

CREATE TABLE TB_USER(id int,name string,phone string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

hive(02)、数据仓库Hive的基本使用

<2>.正则匹配查找表

在hive控制台输入:show tables '*user*';

hive(02)、数据仓库Hive的基本使用

<3>.查看表结构

在hive终端输入:desc 表名

hive(02)、数据仓库Hive的基本使用

<4>.增删表字段

我们给tb_user表先增加一个email字段: ALTER TABLE tb_user ADD COLUMNS (email string);

hive(02)、数据仓库Hive的基本使用

<5>.表重命名

我们将tb_user重新命名成tb_user_back表:ALTER TABLE tb_user RENAME TO tb_user_back;

hive(02)、数据仓库Hive的基本使用

<6>.删除表

首先创建一个tb_user表,然后删除tb_user_back表:DROP TABLE tb_user_back;

hive(02)、数据仓库Hive的基本使用

<7>.插入数据 

Hive插入数据有以下几种方式:

1>.从本地文件系统中导入数据到Hive表;

首先我们从本地文件系统中导入数据到Hive的tb_user表中:

我们在hive机器的home目录下创建user.txt文件,内容如下hive(02)、数据仓库Hive的基本使用

然后在hive终端执行:

LOAD DATA LOCAL INPATH '/home/user.txt' OVERWRITE INTO TABLE tb_user;

hive(02)、数据仓库Hive的基本使用

在HDFS中查看刚刚导入的数据:

hive(02)、数据仓库Hive的基本使用

2>.从HDFS上导入数据到Hive表;

创建表tb_user_hdfs,然后从hdfs上导入user.txt的数据

hive(02)、数据仓库Hive的基本使用

在HDFS中查看刚刚导入的数据:

hive(02)、数据仓库Hive的基本使用

3>.从别的表中查询出相应的数据并导入到Hive表中;

创建表tb_user_end_tab,然后从tb_user表查询导入数据

CREATE TABLE TB_USER_END_TAB(id int,name string,phone string)  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

INSERT OVERWRITE TABLE tb_user_end_tab SELECT * FROM tb_user;

hive(02)、数据仓库Hive的基本使用

4>.在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中;

新建  tb_user_new_tab表并从tb_user表中导入数据

CREATE TABLE tb_user_new_tab AS SELECT * FROM tb_user;

hive(02)、数据仓库Hive的基本使用

CREATE TABLE tb_user_new_tab LIKE tb_user;这是只克隆表结构不导数据

<8>.导出数据

1>.通过Hive导出到本地文件系统

INSERT OVERWRITE LOCAL DIRECTORY '/home/user' SELECT * FROM tb_user;

hive(02)、数据仓库Hive的基本使用 查看导出的数据:

hive(02)、数据仓库Hive的基本使用

2>.从hdfs中导出数据

参见《hadoop(02)、使用JAVA API对HDFS进行基本操作》中hdfs下载文件的操作

3.查询操作

<1>.普通的条件、排序查询

FROM (SELECT * FROM tb_user) A SELECT A.* WHERE A.ID>0 LIMIT 2;

FROM (SELECT * FROM tb_user) A SELECT A.* WHERE A.ID>0 LIMIT 3;

FROM (SELECT * FROM tb_user) A SELECT A.* WHERE A.ID>0 ORDER BY A.ID DESC LIMIT 2;

hive(02)、数据仓库Hive的基本使用

<2>.连接查询

为了测试我们给tb_user表加入多几条数据:

hive(02)、数据仓库Hive的基本使用  

SELECT A.* FROM tb_user_hdfs A JOIN tb_user B ON A.ID=B.ID;

hive(02)、数据仓库Hive的基本使用

SELECT A.* FROM tb_user_hdfs A JOIN tb_user B ON A.ID=B.ID WHERE A.NAME='xiaoming';

hive(02)、数据仓库Hive的基本使用

<3>.聚合查询

SELECT COUNT(DISTINCT ID) FROM tb_user; 

hive(02)、数据仓库Hive的基本使用

<4>.分组查询

SELECT ID,PHONE FROM tb_user GROUP BY ID,PHONE;

hive(02)、数据仓库Hive的基本使用

SELECT ID,PHONE FROM tb_user GROUP BY ID,PHONE HAVING ID>2;

hive(02)、数据仓库Hive的基本使用

4.视图操作

hive也有对视图的操作,下面我们进行视图的创建和删除

hive(02)、数据仓库Hive的基本使用

四、Hive终端下交互命令

quit,exit:  退出hive终端

reset: 重置配置为默认值

set = : 修改特定变量的值

set :  输出用户覆盖的hive配置变量

set -v : 输出所有Hadoop和Hive的配置变量

add FILE[S] *, add JAR[S] *, add ARCHIVE[S] * : 添加 一个或多个 file, jar, archives到分布式缓存

list FILE[S], list JAR[S], list ARCHIVE[S] : 输出已经添加到分布式缓存的资源

list FILE[S] *, list JAR[S] *,list ARCHIVE[S] * : 检查给定的资源是否添加到分布式缓存

delete FILE[S] *,delete JAR[S] *,delete ARCHIVE[S] * : 从分布式缓存删除指定的资源

! :  从Hive shell执行一个shell命令

dfs :  从Hive shell执行一个dfs命令

: 执行一个Hive 查询,然后输出结果到标准输出

source FILE :  在CLI里执行一个hive脚本文件

五、总结

         本文中是对hive的一些基本操作和常用的操作的实践,在实际开发中是应用比较多的,在实践中好多地方尝试了好几遍,遇到了很多问题,通过查询网上的资料都解决了 ,在此记录帮助和我一样在学习hive的同学,同时文中有不足的地方也请大家通过留言提出来,共同学习。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这