一、实验目的

(1)理解 Hive 作为数据仓库在 Hadoop 体系结构中的角色。
(2)熟练使用常用的 HiveQL。


二、实验平台

  • 操作系统:Ubuntu18.04(或Ubuntu16.04);
  • Hadoop版本:3.1.3;
  • Hive版本:3.1.2;
  • JDK版本:1.8。

三、数据集

准备工作:

  • 由《Hive编程指南》(O’Reilly系列,人民邮电出版社)提供,下载地址:
    https://raw.githubusercontent.com/oreillymedia/programming_hive/master/prog-hive-1st-ed-data.zip

  • 备用下载地址:
    https://www.cocobolo.top/FileServer/prog-hive-1st-ed-data.zip

  • 下载慢可参考我上传的资源:林子雨Hive数据集下载

解压后可以得到本实验所需的 stocks.csvdividends.csv 两个文件。

进入你的 Downloads(下载)文件夹,右键解压刚下载的数据压缩包,进入 prog-hive-1st-ed-data 文件夹,右键打开终端:

cd ~/Downloads/prog-hive-1st-ed-data
sudo cp ./data/stocks/stocks.csv /usr/local/hive
sudo cp ./data/dividends/dividends.csv /usr/local/hive

进入 Hadoop 目录,启动 Hadoop:

cd /usr/local/hadoop
sbin/start-dfs.sh

启动 MySQL:

service mysql start

切换到 Hive 目录下,启动 MySQL 和 Hive:

cd /usr/local/hive
bin/hive

四、实验步骤

(1)创建一个内部表 stocks,字段分隔符为英文逗号,表结构如下所示:

stocks 表结构:

col_name data_type
exchange string
symbol string
ymd string
price_open float
price_high float
price_low float
price_close float
volume int
price_adj_close float

代码:

create table if not exists stocks
(
`exchange` string,
`symbol` string,
`ymd` string,
`price_open` float,
`price_high` float,
`price_low` float,
`price_close` float,
`volume` int,
`price_adj_close` float
)
row format delimited fields terminated by ',';

查看表:

hive> describe stocks;
OK
exchange                string
symbol                  string
ymd                     string
price_open              float
price_high              float
price_low               float
price_close             float
volume                  int
price_adj_close         float
Time taken: 0.062 seconds, Fetched: 9 row(s)
hive>

(2)创建一个外部分区表 dividends(分区字段为 exchange 和 symbol),字段分隔符为英文逗号,表结构如下所示:

dividends 表结构

col_name data_type
ymd string
dividend float
exchange string
symbol string

代码:

create external table if not exists dividends
(
`ymd` string,
`dividend` float
)
partitioned by(`exchange` string ,`symbol` string)
row format delimited fields terminated by ',';

查看表:

hive> describe dividends;
OK
ymd                     string
dividend                float
exchange                string
symbol                  string                                      # Partition Information
# col_name              data_type               comment
exchange                string
symbol                  string
Time taken: 0.106 seconds, Fetched: 9 row(s)
hive>

(3)从 stocks.csv 文件向 stocks 表中导入数据:

代码:

load data local inpath '/usr/local/hive/stocks.csv' overwrite into table stocks;

(4) 创建一个未分区的外部表 dividends_unpartitioned,并从 dividends.csv 向其中导入数据,表结构如下所示:

dividends_unpartitioned 表结构

col_name data_type
ymd string
dividend float
exchange string
symbol string

代码:

create external table if not exists dividends_unpartitioned
(
`exchange` string ,
`symbol` string,
`ymd` string,
`dividend` float
)
row format delimited fields terminated by ',';

导入数据:

load data local inpath '/usr/local/hive/dividends.csv' overwrite into table dividends_unpartitioned;

(5)通过对 dividends_unpartitioned 的查询语句,利用 Hive 自动分区特性向分区表 dividends 各个分区中插入对应数据。

代码:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=1000;
insert overwrite table dividends partition(`exchange`,`symbol`) select `ymd`,`dividend`,`exchange`,`symbol` from dividends_unpartitioned;

(6)查询IBM公司(symbol = IBM)从 2000 年起所有支付股息的交易日(dividends 表中有对应记录)的收盘价(price_close)。

操作语句如下:

select s.ymd,s.symbol,s.price_close
from stocks s
LEFT SEMI JOIN
dividends d
ON s.ymd=d.ymd and s.symbol=d.symbol
where s.symbol='IBM' and year(ymd)>=2000;

输出如下(折叠部分输出):

2010-02-08   IBM 121.88
2009-11-06  IBM 123.49
2009-08-06  IBM 117.38
...
2000-05-08  IBM 109.75
2000-02-08  IBM 118.81
Time taken: 8.75 seconds, Fetched: 41 row(s)

(7)查询苹果公司(symbol = AAPL)2008 年 10 月每个交易日的涨跌情况,涨显示 rise,跌显示 fall,不变显示 unchange。

操作语句如下:

select ymd,
casewhen price_close-price_open>0 then 'rise'when price_close-price_open<0 then 'fall'else 'unchanged'
end as situation
from stocks
where symbol='AAPL' and substring(ymd,0,7)='2008-10';

输出如下(折叠部分输出):

2008-10-31   rise
2008-10-30  rise
...
2008-10-02  fall
2008-10-01  fall
Time taken: 0.1 seconds, Fetched: 23 row(s)

(8)查询 stocks 表中收盘价(price_close)比开盘价(price_open)高得最多的那条记录的交易所(exchange)、股票代码(symbol)、日期(ymd)、收盘价、开盘价及二者差价。

操作语句如下:

select `exchange`,`symbol`,`ymd`,price_close,price_open,price_close-price_open as `diff`
from
(select *from stocksorder by price_close-price_open desclimit 1
)t;

输出如下:

NASDAQ   INFY    2000-02-11  670.06  534.5   135.56
Time taken: 4.476 seconds, Fetched: 1 row(s)

9)从 stocks 表中查询苹果公司(symbol=AAPL)年平均调整后收盘价(price_adj_close)大于 50 美元的年份及年平均调整后收盘价。

操作语句如下:

selectyear(ymd) as `year`,avg(price_adj_close) as avg_price from stocks
where `exchange`='NASDAQ' and symbol='AAPL'
group by year(ymd)
having avg_price > 50;

输出如下:

2006 70.81063753105255
2007    128.27390423049016
2008    141.9790115054888
2009    146.81412711976066
2010    204.72159912109376
Time taken: 2.347 seconds, Fetched: 5 row(s)

(10)查询每年年平均调整后收盘价(price_adj_close)前三名的公司的股票代码及年平均调整后收盘价。

操作语句如下:

select t2.`year`,symbol,t2.avg_price
from
(select*,row_number() over(partition by t1.`year` order by t1.avg_price desc) as `rank`from(selectyear(ymd) as `year`,symbol,avg(price_adj_close) as avg_pricefrom stocksgroup by year(ymd),symbol)t1
)t2
where t2.`rank`<=3;

输出如下(折叠部分输出):

NULL stock_symbol    NULL
1962    IBM 2.0072222134423634
1962    GE  0.16876984293025638
...
2009    GTC 174.11607115609306
2010    ISRG    319.75360107421875
2010    AMEN    313.875
2010    GTC 214.36719848632814
Time taken: 7.715 seconds, Fetched: 140 row(s)

五、总结

实验6 熟悉Hive的基本操作相关推荐

  1. 实验六:熟悉Hive的基本操作

    由于CSDN上传md文件总是会使图片失效 完整的实验文档地址如下: https://download.csdn.net/download/qq_36428822/85709631?spm=1001.2 ...

  2. 数字图像处理实验--实验项目一 图像的基本操作和基本运算

    目录 前言 实验项目一 图像的基本操作和基本运算 1.[图像的读取操作] 2 [图像的基本运算] 3[ 图像的几何变换] 4[图像的灰度变换] 前言 数字图像处理(Digital Image Proc ...

  3. 计算机网络实验指导书实验报告,计算机网络实验一 熟悉常用的网络命令实验报告模板...

    实验一熟悉常用的网络命令实验报告 序号:姓名:学号:成绩指导教师: 1.实验目的: 学会使用常用ping ,ipconfig, nslookup, arp ,tracert等常用网络测试命令检测网络连 ...

  4. python软件包自带的集成开发环境-实验一 熟悉Python的集成开发环境

    实验一 熟悉Python的集成开发环境 一.实验目的与要求 1.了解什么是Python: 2.了解Python的特性: 3.掌握下载和安装Python的方法: 4.学习执行Python命令和脚本文件的 ...

  5. Hive的基本操作-数据库的创建和删除

    Hive 的基本操作 创建数据库 create database if not exists myhive; use myhive; 说明:hive的表存放位置模式是由hive-site.xml当中的 ...

  6. 实验一线性表的基本操作实现及其应用(JavaScript实现)

    实验一线性表的基本操作实现及其应用(JavaScript实现) 实验目的 熟练掌握线性表的结构特点, 掌握顺序表的基本操作. 巩固 C++相关的程序设计方法与技术. 学会使用顺序表解决实际问题. 实验 ...

  7. 实验一熟悉matlab环境,数字信号处理报告实验一:熟悉MATLAB环境.doc

    数字信号处理报告实验一:熟悉MATLAB环境.doc 实验一熟悉MATLAB环境一 实验目的1. 熟悉MATLAB的主要操作命令.2. 学会简单的矩阵输入和数据读写.3. 掌握简单的绘图命令.4. 用 ...

  8. 熟悉linux运行环境,实验一 熟悉Ubuntu环境

    实验一熟悉Ubuntu环境 [实验目的] 1.了解Ubuntu系统基本操作方法,学会独立使用该系统. 2.熟悉Ubuntu下如何编辑.编译和运行一个C语言程序. 3.学会利用gcc.gdb编译.调试C ...

  9. 实验一 熟悉常用的Linux操作,实验2-熟悉常用的HDFS操作

    <实验2-熟悉常用的HDFS操作>由会员分享,可在线阅读,更多相关<实验2-熟悉常用的HDFS操作(5页珍藏版)>请在人人文库网上搜索. 1.实验2熟悉常用的HDFS操作1 实 ...

  10. 实验一 熟悉常用的Linux操作和Hadoop操作

    文章目录 题目 实验环境 实验内容 熟悉常用的Linux命令 安装Hadoop 安装ssh服务端 安装Java环境并设置环境变量 安装单机Hadoop hadoop伪分布式安装 出现的问题 but t ...

最新文章

  1. fork是linux函数吗,linux fork()函数
  2. LevelDB (1)概述
  3. 乱谈数学--我理解的函数极限运算
  4. Java和WebSocket开发网页聊天室
  5. login组件的两种用法_Android-模块化、组件化、插件化、热修复-组件化-组件间的通信(本地,下沉,bus,路由)...
  6. sql根据类别拆分上下级_运用SQL对黑五销售数据进行分析
  7. Kafka(三)-- Kafka主要参数
  8. Mac安装metasploit-framework【亲测有用】
  9. faster rcnn的tensorflow代码的理解
  10. nginx网关--openresty
  11. React 进修之路(1)
  12. 通过“”斐波那契数列“”学习函数递归
  13. java进阶06 线程初探
  14. 波斯顿动力机器人为啥那么牛逼?
  15. 使用java代码画一棵圣诞树
  16. 安卓依赖包关系:support->Androidx->Jetpack
  17. HTML页面悬浮球,html滑动仿悬浮球菜单
  18. 智能家居无线方案ZIGBEE、Z-Wave、WIFI、蓝牙、红外、GPRS以及NB-IOT对比
  19. Unable to set dev_loss_tmo and fast_io_fail_tmo in multipath.conf
  20. APIView(认证,权限,限流,过滤,分页,序列化,排序)

热门文章

  1. 关于批量取消微博关注
  2. 我用css精灵图拼接了自己的英文名字,不会还有人不知道精灵图技术吧?
  3. 华为鸿蒙11公测版,首升鸿蒙2.0系统!华为官宣这10款机型率先公测EMUI11-互联网/电商-文章-小虾米...
  4. AJAX框架衣柜改造出租屋,小伙爆改城中村出租屋,衣柜挂墙上第一次见,完工后房东愣了!...
  5. ocr识别身份证护照阅读器
  6. Hexo+Icarus3+live2d给博客添加看板娘
  7. 深度Linux deepin更新,防火墙操作
  8. 微信公众号商城前景分析
  9. Matlab 仿真——直流电机速度控制(1)直流电机建模
  10. 携程——聪明的猴子 (容斥定理)