前言

  前面已经讲了如何部署在hadoop集群上部署hive,现在我们就做一个很小的实例去熟悉HIVE QL.使用的数据是视频播放数据包括视频编码,播放设备编码,用户账号编码等,我们在这个数据基础上做一些简单查询统计等。

点击此处下载实例样本数据

这是20170901 14点的部分播放日志

动起来

同步数据

  实际上我这块数据是通过flume收集日志到hdfs上的,后续我也会简单介绍一下怎么通过flume收集日志到hdfs。当然,下载我们的样例数据以后也可以通过${HADOOP_HOME}/bin/hdfs dfs -put命令

  • 建立相关目录:比如我的放在${HADOOP_HOME}/bin/hdfs dfs -mkdir /user/admin/logs/video_play/20170901/14 每层建立,最好两层是对应的表分区day ,hour
  • 建表 :
create external table log_video_play_request (logindex string,request_date string,video_auiddigest string,puiddigest string ,
ver int,auiddigest string comment 'account identify',duiddigest string comment 'device identify',
device_sign string ,xy_app_key string,ip string,port bigint,user_agent string, fromparameter string,
zone bigint,sns_name string,sns_type bigint,country_code string,consume_country_code string,
play_duration bigint,video_duration bigint,trace_id string,review_state int)
partitioned by (day string ,hour string) row format delimited
fields terminated by '&'
stored as textfile
location '/user/admin/logs/video_play'
  • 接下来就是hive表加载数据了,大家可以参考这篇博文Hive数据加载(内部表,外部表,分区表)

    在这里大家在hive里面执行alter table log_video_play_request add partition(day='20170901',hour='14');

    注:select * from .. limit 10;试一下,如果结果为空,使用Load data inpath '/user/admin/logs/vide_play/20170901/14' overwrite into table log_video_play_request partition(day='20170901',hour='14')

hive QL DDL语句

表操作语句

  • 通用建表语句
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table\_name
[(col\_name data\_type [col\_comment],...)]
[COMMENT table\_comment]
[PARTITIONED BY (col\_name data\_type [col\_comment], col\_name data\_type [COMMENT col\_comment],...)]
[ROW FORMAT row\_format]
[STORED AS file\_format]
[LOCATION hdfs\_path]
  • 重命名表: ALTER TABLE table_name RENAME TO new_table_name
  • 添加字段:ALTER TABLE table_name ADD COLUMNS(col_name data_type [COMMENT col_comment],...)
  • 添加或者删除分区: ALTER TABLE table_name ADD PARTITION(pt1='xx',....) LOCATION 'hdfs_path'

    ALTER TABLE table_name DROP PARTITION(....)
  • 删除表: DROP TABLE table_name

其他操作语句

  • 创建/删除视图 hive不支持物化视图,而从数仓的角度来说视图应用场景基本没有 CREATE VIEW [col_name] as SELECT ...
  • 创建/删除函数 udf udaf等后续会专门介绍
  • show/describe: show paratitios table_name describe table_name[DOT col_name] describle table_name partition_spec

hive QL DML语句

插入数据到表

  • 向数据表中加载文件:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]
INOT TABLE table\_name
[PARTITION (partcol1=val1,partcol2=val2 ...)]
  • 将查询结果插入数据表中
INSERT OVERWRITE TABLE tablename [PARTITION (partcol1=val1,partcol2=val2 ...)]
select ....

SQL操作

  • 基本语法:select where groupby distinct having join 等
  • 多路插入: multi insert
FROM src
insert overwrite table1 select ... where ...
insert overwrite table2 select ... where ...

多路插入还是很常见并且非常好的应用,一张日志表往往有多次的计算,用multi insert 可以节省多次的IO开销

实例

根据我们上面的log_video_play_request

select * from log\_video\_play\_request where day = 20170901 limit 10;
#查看各个模块播放
select count(1) as total ,fromparameter from log\_video\_play\_request where day = 20170901 group by fromparameter order by total desc limit 100;
#查看top创作者(视频被播放次数最多的用户)
select count(1) as total,video\_auiddigest from log\_video\_play\_request where day = 20170901 group by video\_auiddigest order by total desc limit 100;

# hadoop入门第六篇:Hive实例的更多相关文章

  1. Hadoop入门第五篇:Hive简介以及部署

    标签(空格分隔): Hadoop Hive hwi 1.Hive简介   之前我一直在Maxcompute上进行大数据开发,所以对数仓这块还算比较了解,在接受Hive的时候基本上没什么大的障碍.所以, ...

  2. Hadoop入门第四篇:手动搭建自己的hadoop小集群

    前言 好几天没有更新了,本来是应该先写HDFS的相关内容,但是考虑到HDFS是我们后面所有学习的基础,而我只是简单的了解了一下而已,后面准备好好整理HDFS再写这块.所以大家在阅读这篇文章之前,请先了 ...

  3. Android JNI入门第六篇——C调用Java

    本篇将介绍在JNI编程中C调用Java实现. 源码下载地址:http://download.csdn.net/detail/xyz_lmn/4868265 关键代码: java: public cla ...

  4. Android入门第六篇之ListView (一)

    本文来自http://blog.csdn.net/hellogv/ ListView是一个经经常使用到的控件,ListView里面的每一个子项Item能够使一个字符串,也能够是一个组合控件.先说说Li ...

  5. Visualforce入门第六篇_2017.3.1

    Visualforce实现过滤.数据列表显示.分页功能 可以参考salesforce官网开发文档:https://trailhead.salesforce.com/modules/visualforc ...

  6. Hadoop入门第三篇-MapReduce试手以及MR工作机制

    MapReduce几个小应用 上篇文章已经介绍了怎么去写一个简单的MR并且将其跑起来,学习一个东西动手还是很有必要的,接下来我们就举几个小demo来体验一下跑起来的快感. demo链接请参照附件:ht ...

  7. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  8. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  9. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

随机推荐

  1. JDBC&&c3p0、事务、批处理、多线程 于一体的经典秘方QueryRunner

    目录: 基础篇_功能各自回顾 JDBC基础代码回顾(使用JdbcUtils工具简化) c3p0数据库连接池的使用(使用JdbcUtils工具简化) 大数据的插入(使用c3p0+JdbcUtils工具简 ...

  2. 运行shell脚本时报错"[[ : not found"解决方法

    问题描述 在运行shell脚本时报错,命令为: sh test.sh 报错如图: 脚本代码如下: #!/bin/bash # file:test.sh # author:13 # date:2017- ...

  3. 【SignalR学习系列】5. SignalR WPF程序

    首先创建 WPF Server 端,新建一个 WPF 项目 安装 Nuget 包 替换 MainWindows 的Xaml代码 <Window x:Class="WPFServer.M ...

  4. bootstrap-table 怎么自定义搜索按钮实现点击按钮进行查询

    bootstrap-table自带搜索框感觉有点丑,我们可以把搜索功能单独拉出来放到页面的某一个位置. 首先我们看一下官方演示: 如果你感觉集成的检索框不太好看,而且我们也不想让搜索框和列表放到一块去 ...

  5. SQL Server Alwayson创建代理作业注意事项

    介绍 Always On 可用性组活动辅助功能包括支持在辅助副本上执行备份操作. 备份操作可能会给 I/O 和 CPU 带来很大的压力(使用备份压缩). 将备份负荷转移到已同步或正在同步的辅助副本后, ...

  6. WCF Cookie处理

    wcf操作cookie看似很简单,如果不对Wcf研究一把还是很难的,基本上无从下手. 这里上一图 上面的结果,岂止是坑爹,简直就是坑爹!!! 废话不多说,直接上代码: cookie读取 var req ...

  7. TransactionTemplate编程式事务管理方式的进阶使用---自定义拓展模板类

    1, 前面一篇的文章介绍了TransactionTemplate的基本使用方法. 同事在其基础上又做了一层封装,这样更贴合本公司的业务与规范. 2, 首先定义了两个接口: ServiceTemplat ...

  8. Android Binder机制详解:手写IPC通信

    想要掌握一样东西,最好的方式就是阅读理解它的源码.想要掌握Android Binder,最好的方式就是写一个AIDL文件,然后查看其生成的代码.本文的思路也是来自于此. 简介 Binder是Andro ...

  9. 那些年,用C#调用过的外部Dll

    经常有人找到我咨询以前在csdn资源里分享的dll调用.算算也写过N多接口程序.翻一翻试试写篇随笔. 明华IC读写器DLL 爱迪尔门锁接口DLL 通用OPOS指令打印之北洋pos打印机dll 明泰非接 ...

  10. HDU5742 It's All In The Mind(思维题,水题)

    Problem Description Professor Zhang has a number sequence a1,a2,...,an. However, the sequence is not ...