环境
  虚拟机:VMware 10
  Linux版本:CentOS-6.5-x86_64
  客户端:Xshell4
  FTP:Xftp4
  jdk8
  hadoop-3.1.1
  apache-hive-3.1.1

一、Hive Lateral View
Lateral View用于和UDTF函数(explode、split)结合来使用。
首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚拟表。
主要解决在select使用UDTF做查询过程中,查询只能包含单个UDTF,不能包含其他字段、以及多个UDTF的问题

语法:
LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)

举例:统计人员表中共有多少种爱好、多少个城市?

hive> select * from psn2;
OK
psn2.id psn2.name psn2.likes psn2.address psn2.age
小明1 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明2 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明3 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明4 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明5 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明6 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明1 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明2 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明3 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明4 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明5 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
小明6 ["lol","book","movie"] {"beijing":"shangxuetang","shanghai":"pudong"}
Time taken: 0.138 seconds, Fetched: row(s)
hive> select explode(likes) from psn2;
OK
col
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
lol
book
movie
Time taken: 0.294 seconds, Fetched: row(s)
hive> select count(distinct(myCol1)), count(distinct(myCol2)) from psn2
> LATERAL VIEW explode(likes) myTable1 AS myCol1
> LATERAL VIEW explode(address) myTable2 AS myCol2, myCol3;
Query ID = root_20190216171853_af297af9-dcc6-4e1e--fa0969727b23
Total jobs =
Launching Job out of
Number of reduce tasks determined at compile time:
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Starting Job = job_1548397153910_0012, Tracking URL = http://PCS102:8088/proxy/application_1548397153910_0012/
Kill Command = /usr/local/hadoop-3.1./bin/mapred job -kill job_1548397153910_0012
Hadoop job information for Stage-: number of mappers: ; number of reducers:
-- ::, Stage- map = %, reduce = %
-- ::, Stage- map = %, reduce = %, Cumulative CPU 4.08 sec
-- ::, Stage- map = %, reduce = %, Cumulative CPU 7.24 sec
MapReduce Total cumulative CPU time: seconds msec
Ended Job = job_1548397153910_0012
MapReduce Jobs Launched:
Stage-Stage-: Map: Reduce: Cumulative CPU: 7.24 sec HDFS Read: HDFS Write: SUCCESS
Total MapReduce CPU Time Spent: seconds msec
OK
_c0 _c1
3 2
Time taken: 16.894 seconds, Fetched: row(s)
hive>

二、hive View视图
和关系型数据库中的普通视图一样,hive也支持视图
特点:
  不支持物化视图(oracle支持)
  只能查询,不能做加载数据操作
  视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询
  view定义中若包含了ORDER BY/LIMIT语句,当查询视图时也进行ORDER BY/LIMIT语句操作,view当中定义的优先级更高
  view支持迭代视图

View语法
创建视图:

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name
[(column_name [COMMENT column_comment], ...) ]
[COMMENT view_comment]
[TBLPROPERTIES (property_name = property_value, ...)]
AS SELECT ... ;

举例:注意 视图在HDFS下不存在文件

hive> create view v_psn2 as select id,name from psn2;
OK
id name
Time taken: 0.127 seconds
hive> show tables;
OK
tab_name
cell_drop_monitor
cell_monitor
docs
logtbl
person
person3
psn2
psn21
psn22
psn3
psn31
psn4
psnbucket
student
test01
v_psn2
wc
Time taken: 0.02 seconds, Fetched: row(s)
hive> select * from v_psn2;
OK
v_psn2.id v_psn2.name
小明1
小明2
小明3
小明4
小明5
小明6
小明1
小明2
小明3
小明4
小明5
小明6
Time taken: 0.11 seconds, Fetched: row(s)
hive> drop view v_psn2;
OK
Time taken: 0.08 seconds
hive> select * from v_psn2;
FAILED: SemanticException [Error ]: Line : Table not found 'v_psn2'
hive>

三、Hive 索引

目的:优化查询以及检索性能

给表psn2创建索引:
create index t1_index on table psn2(name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild
in table t1_index_table;

as:指定索引器;
in table:指定索引表,若不指定默认生成在default__psn2_t1_index__表中

create index t1_index on table psn2(name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild;

查询索引
show index on psn2;

重建索引(建立索引之后必须重建索引才能生效)
ALTER INDEX t1_index ON psn2 REBUILD;

删除索引
DROP INDEX IF EXISTS t1_index ON psn2;

【Hive学习之六】Hive Lateral View &视图&索引的更多相关文章

  1. Hive之explode和lateral view

    Hive之explode 一. explode, 行转列. 1.1. 用于array类型的数据 table_name 表名 array_col 为数组类型的字段 new_col array_col被e ...

  2. Hive学习之六 《Hive进阶— —hive jdbc》 详解

    接Hive学习五 http://www.cnblogs.com/invban/p/5331159.html 一.配置环境变量 hive jdbc的开发,在开发环境中,配置Java环境变量 修改/etc ...

  3. hive学习(四) hive的函数

    1.内置运算符 1.1关系运算符 运算符 类型 说明 A = B 所有原始类型 如果A与B相等,返回TRUE,否则返回FALSE A == B 无 失败,因为无效的语法. SQL使用”=”,不使用”= ...

  4. hive学习(二) hive操作

    hive   ddl 操作官方手册https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL hive  dml 操作官方手 ...

  5. hive学习(三) hive的分区

    1.Hive 分区partition 必须在表定义时指定对应的partition字段 a.单分区建表语句: create table day_table (id int, content string ...

  6. Hive学习笔记——Hive中的分桶

    对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记 ...

  7. Hive学习:Hive连接JOIN用例详解

    1 准备数据: 1.1 t_1 01 张三 02 李四 03 王五 04 马六 05 小七 06 二狗 1.2 t_2 01 11 03 33 04 44 06 66 07 77 08 88 1.3 ...

  8. hive lateral view 与 explode详解

    ref:https://blog.csdn.net/bitcarmanlee/article/details/51926530 1.explode hive wiki对于expolde的解释如下: e ...

  9. hive学习

    大数据的仓库Hive学习  10期-崔晓光 2016-06-20  大数据   hadoop   10原文链接 我们接着之前学习的大数据来学习.之前说到了NoSql的HBase数据库以及Hadoop中 ...

随机推荐

  1. Javabean非空变量校验工具

    摘要 调研java Class getDeclaredFields() 与getFields()的区别,设计请求参数为Javabean时,基于反射机制校验其中非空变量的公共方法. java Class ...

  2. 腾讯互动课堂(Tencent Interact Class,TIC)SDK 词汇表

    词汇表 https://cloud.tencent.com/document/product/266/11732 封装格式 封装格式(Format)是将已经编码压缩好的视频流和音频流按照一定的格式规范 ...

  3. (1.14)mysql锁问题之MyIsam

    1.mysql锁概述 BDB被InnoDB代替了,MyIsam在8.0也被抛弃了 2.MyIsam表锁(读写是串行的) [2.1]查看表锁争用情况. MyIsam存储引擎只支持表锁. 查看表锁争用情况 ...

  4. 20171228 C#值类型和引用类型

    public class RefPoint //定义的引用类型 { public int x; public RefPoint(int x) { this.x = x; } } public stru ...

  5. what's the python之基本运算符及字符串、列表、元祖、集合、字典的内置方法

    计算机可以进行的运算有很多种,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.字符串和列表的算数运算只能用+和*,字典没有顺序,所以不能进行算数运算和比较运算.比较运算中= ...

  6. Linux系统启动排错实验集合

    Centos6系统启动流程 1. post  加电自检  检查硬件环境 2. 选择一个硬件类型引导启动           mbr 446字节   grub  stage1 3. 加载boot分区的文 ...

  7. 001-mock.js安装使用

    一.基础 1.1.安装 //安装 npm install mockjs --save 1.2.使用 // 使用 Mock var Mock = require('mockjs') Mock.mock( ...

  8. java poi导入Excel(个人代码)

    案例使用的框架:jsp+spring+mybaties <form id="importForm" name="importForm" method=&q ...

  9. crm 理解

    1:crm 就是一个 能够随时(通过labtop,mobile phone)掌握客户所有信息(过往的交易,)的工具.  通过足够的数据分析,能够更好的了解客户. 目的: a:使客户保留下来. b:赚取 ...

  10. 异常处理的捕捉:try{}catch(异常类 变量)finally{最终执行}

    可以对异常进行针对性处理的方式.try{ //需要被检查的异常 }catch(异常类  变量)//该变量用于接收发生的异常{ //处理异常的代码 }finally{ //一定会被执行的代码. }