常用HiveQL总结
最近在用Hive做多维数据分析,总结一些常用HiveQL命令。
1. 建表
以纯文本数据建表:
create table `dmp.dim_con_adx_id_name` (`adx_id` string comment 'ADX ID', `adx_name` string comment 'ADX名称', `update_dt` string comment '更新时间(天粒度)'
)
comment 'ADX的ID与名称映射表'
row format delimited
fields terminated by ','
stored as textfile
;
若未指定为外部表(external table),则默认为托管表(managed table)。二者的区别在于load与drop操作:托管表用load data inpath
加载数据(路径可为本地目录,也可是HDFS目录),该操作会将该文件放在HDFS目录:/user/hive/warehouse/ 下;而外部表的数据是在location
中指定,一般配合partition描述数据的生成信息;drop托管表时会将元数据与/user/hive/warehouse/下的数据一起删掉,而drop外部表时只会删除元数据。将本地文件加载到托管表:
load data local inpath 'adx.csv' overwrite into table dmp.dim_con_adx_id_name;
以orc file数据建外部表表:
create external table `dmp.dwd_evt_ad_user_action_di` (`uid` string comment '用户ID', `adx_name` string comment 'ADX名称', `media_name` string comment '媒体名称', `is_exposure` string comment '是否曝光', `is_click` string comment '是否点击'
)
comment '广告用户点击天表'
partitioned by (dt string comment '天分区')
stored as orc
location '/<hdfs path>'
;
2. Partition
增加partition并指定location:
alter table dmp.dwd_evt_ad_user_action_di add if not exists partition (dt='20160520') location '20160520';
重新设置partition的location:
-- must be an absolute path
alter table dmp.dwd_evt_ad_user_action_di partition (dt='20160520') set location '<hdfs path>';
删除partition
alter table dmp.dwd_evt_ad_user_action_di drop if exists partition (dt='20160520') ignore protection;
查看所有的paritition,以及查看某一partition的详细信息:
show partitions dwd_evt_ad_user_action_di;describe formatted dwd_evt_ad_user_action_di partition (dt='20160520');
3. UDF
Hive的UDF非常丰富,基本能满足大部分的需求。
正则匹配获取相应字符串:
regexp_extract(dvc_model, '(.*)_(.*)', 2) as imei
复杂数据类型map、struct、指定schema的struct、array、union的构造如下:
map(key1, value1, key2, value2, ...)
struct(val1, val2, val3, ...)
named_struct(name1, val1, name2, val2, ...)
array(val1, val2, ...)
create_union(tag, val1, val2, ...)
获取复杂数据类型的某列值:
array: A[n]
map: M[key]
struct: S.x
条件判断case when,比如,在left join中指定默认值:
select uid, media, case when b.tags is NULL then array(named_struct('tag','EMPTY', 'label','EMPTY')) else b.tagsend as tags
from (select uidfrom dwd_evt_ad_user_action_diwhere dt = '{biz_dt}'and is_exposure = '1'
) a
left outer join dwb_par_multi_user_tags_dd b
on a.uid = b.uid;
4. UDTF
UDTF主要用来对复杂数据类型进行平铺操作,比如,explode平铺array与map,inline平铺array<struct>
;这种内置的UDTF要与lateral view配合使用:
select myCol1, col2 FROM baseTable
lateral view explode(col1) myTable1 AS myCol1;select uid, tag, label
from dwb_par_multi_user_tags_dd
lateral view inline(tags) tag_tb;
-- tags: array<struct<tag:string,label:string>>
5. 多维分析
Hive 提供grouping set、rollup、cube关键字进行多维数据分析,可以解决自定义的维度组合、上钻维度(\(n+1\)种)组合、所有的维度组合(\(2^n\)种)的需求。比如:
SELECT a, b, SUM( c )
FROM tab1
GROUP BY a, b GROUPING SETS ( (a, b), a, b, ( ) )-- equivalent aggregate query with group by
SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b
UNION
SELECT a, null, SUM( c ) FROM tab1 GROUP BY a, null
UNION
SELECT null, b, SUM( c ) FROM tab1 GROUP BY null, b
UNION
SELECT null, null, SUM( c ) FROM tab1GROUP BY a, b, c, WITH ROLLUP
-- is equivalent to
GROUP BY a, b, c GROUPING SETS ( (a, b, c), (a, b), (a), ( ))GROUP BY a, b, c WITH CUBE
-- is equivalent to
GROUP BY a, b, c GROUPING SETS ( (a, b, c), (a, b), (b, c), (a, c), (a), (b), (c), ( ))
此外,Hive还提供了GROUPING__ID
函数对每一组合的维度进行编号,以区分该统计属于哪一维度组合,比如:
select adx_name, media_name, grouping__id, count(*) as pv
from dwd_evt_ad_user_action_di
group by adx_name, media_name with rollup;
以指定分隔符保存结果到本地目录:
explain
INSERT OVERWRITE LOCAL DIRECTORY '/home/<path>/<to>'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
select media_name, count(distinct uid) as uv
from dwd_evt_ad_user_action_di
where day_time = '2016-05-20' and is_exposure = '1'
group by media_name;
转载于:https://www.cnblogs.com/en-heng/p/5513176.html
常用HiveQL总结相关推荐
- hive load data外部表报错_从0开始学大数据-Hive基础篇
Hive起源于Facebook,是基于 Hadoop HDFS 分布式文件系统的分布式 数据仓库 架构.它为数据仓库的管理提供了许多功能:数据ETL(抽取.转换和加载)工具.数据存储管理和大型数据集的 ...
- 大数据学习之Hive
什么是Hive Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取.转化.加载,这是一种可以存储.查询和分析存储在Hadoop中的大规模数据的机制.hive数据仓库工具能将结构化的数据文件 ...
- 西南大学大数据8天实训
大数据实训第一天日志 第一天 第二天 第三天 第四天 第五天 第六天 第七天 第八天 学习内容总结 CentOS安装 安装vmWare workstation 添加虚拟机,安装CentOS操作系统 配 ...
- 计算机学研究生课程,厦门大学计算机学系研究生课程.doc
厦门大学计算机学系研究生课程 厦门大学计算机科学系研究生课程 <> 主讲教师:林子雨 二零一年月 目录 一. Hive简介1 二. Hive安装1 三. Hive配置3 四. Hive的常 ...
- HiveQL学习笔记(二):Hive基础语法与常用函数
本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...
- Hadoop综合大作业补交4次作业:获取全部校园新闻,网络爬虫基础练习,中文词频统计,熟悉常用的Linux操作...
1.用Hive对爬虫大作业产生的文本文件(或者英文词频统计下载的英文长篇小说)进行词频统计. (1)开启所有的服务,并创建文件夹wwc (2)查看目录下所有文件 (3)把hdfs文件系统中文件夹里的文 ...
- HiveSQL常用优化方法全面总结
转载自 HiveSQL常用优化方法全面总结 Hive作为大数据领域常用的数据仓库组件,在平时设计和查询时要特别注意效率.影响Hive效率的几乎从不是数据量过大,而是数据倾斜.数据冗余.job或I/O ...
- sql优化常用的几种方法_Hive常用性能优化方法实践全面总结
Apache Hive作为处理大数据量的大数据领域数据建设核心工具,数据量往往不是影响Hive执行效率的核心因素,数据倾斜.job数分配的不合理.磁盘或网络I/O过高.MapReduce配置的不合理等 ...
- HiveQL学习笔记(四):Hive窗口函数
本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...
最新文章
- 使用bitblt提高GDI+绘图的效率(转)
- 古剑奇谭二服务器维护,《古剑奇谭二》10月4日例行维护更新公告
- c语言map函数k v都是int,Go语言sync.Map(在并发环境中使用的map)
- leaflet知识整理
- java 资料大全-转
- 专家答疑:在ERP系统中确保销售订单准确性
- DataNode的流式接口
- 迁移学习中使用下载好的权重
- radare2命令介绍
- 给oracle数据库某一列数据的前面或者后面增加字符,合并两列的值
- MATLAB--黄金分割法
- 当下最实用计算机编程语言,目前最流行的计算机编程语言是什么?
- 微博热搜数据变化趋势视频化展示
- Ubuntu 18.04安装全面战争三国游戏 (by quqi99)
- Pytorch如何约束神经网络中权重/偏执的范围
- 汇率实时行情查询接口
- iPhone手机 -- 如何找到开发者选项
- MIT6.828_HW9_barriers
- 跳出IT运维“死循环” 看河南省统计局如何“运”筹“维”幄
- 南邮 OJ 1446 嘉娃的难题
热门文章
- 王者服务器维修2019年四月份,2019王者荣耀4周年庆版本更新时间介绍[图]
- Linux redis安装教程,Linux 下redis5.0.0安装教程详解
- 真刑啊!蔚来员工用公司服务器挖矿,已供认不讳
- 最新曝光的iPhone大漏洞:传文件会泄露个人隐私,2年多了苹果知而不改
- 北航成AAAI 2021最大赢家,两篇一作斩获最佳论文、提名奖,研究皆与Transformer相关...
- 移动开发必须要了解的易盾加固生态
- 【作死】更新macOS Mojave后Vagrant无法使用
- android--------Socket的简单了解
- 华为交换机SSH登录失败原因
- 判断分辨网站是否伪静态的方法