菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2793
0

hive 视图及索引

原创
05/13 14:22
阅读数 3387

1.使用视图降低查询复杂度
使用视图主要是为了将查询语句分隔为多个小的,更可控的片段,降低复杂度。
下面是一个嵌套子查询的查询:

FROM (
    SELECT * FROM people JOIN cart
    ON (cart.people_id = people.id) WHERE firstname = 'John'
) a SELECT a.lastname WHERE a.id = 3;

将嵌套的子查询变成一个视图:

CREATE VIEW shorter_join AS
SELECT * FROM people JOIN cart 
ON (cart.people_id = people.id) WHERE firstname = 'John';

这样一来,之前的查询语句就成了:

SELECT lastname FROM shorter_join WHERE id  = 3;

2.限制查询结果
通过创建视图来限制访问数据用来保护信息不被随意访问:

CREATE TABLE userinfo (
firstname string,
lastname string,
ssn string,
password string);

CREATE VIEW techops_employees AS
SELECT firstname, lastname, ssn FROM userinfo 
WHERE department = 'techops';

上述在视图只能查询前三个字段,限制了第四个字段密码的访问。

3.对map类型的视图
创建表:

CREATE EXTERNAL TABLE dynamictable(
cols map<string, string>)
ROW FORMAT DELIMITED
FILEDS TERMINATED BY '\004'
COLLECTION ITEMS TERMINATED BY '\001'
MAP KEYS TERMINATED BY '\002'
STORED AS TEXTFILE;

创建视图:

CREATE VIEW shipments(time, part) AS
SELECT cols["time"], cols["parts"]
FROM dynamictable
WHERE cols["type"] = 'response';

定义一个视图并不会 具体化 操作任何实际数据,视图实际上是对其所使用的表和列的一个查询语句固化的过程。因此,如果视图所涉及到的表或者列不再存在时,会导致视图查询失败。

索引
建立索引可以帮助裁剪掉一张表的一些数据块,这样能减少MR的输入数据量,并非所有的查询都可以通过建立索引获得好处。
通过EXPLAIN命令可以查看某个查询语句是否用到索引。
hive中的索引维护也需要额外的存储空间,创建也需要消耗计算资源,需要在建立索引为查询带来的好处和需要付出的代价之间做出权衡。

我们对之前创建的employees表建立索引:

CREATE INDEX employees_index 
ON TABLE employees (country)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
WITH DEFERRED REBUILD
IDXPROPERTIES ('creator' = 'me')
IN TABLE employees_index_table
PARTITIONED BY (country, name)
COMMENT '';

其中AS语句指定了索引处理器,一个实现索引接口的Java类,IN TABLE 表示索引将在一张新表中保留索引数据,指定DEFERRED REBUILD,新索引将呈现空白状态,在任何时候都可以进行第一次索引创建或者使用ALTER INDEX对索引进行重建:

ALTER INDEX employees_index
ON TABLE employees PARTITION (country = 'US')
REBUILD;

显示索引

SHOW INDEX ON employees;

删除索引

DROP INDEX IF EXISTS employees_index ON TABLE employees;

发表评论

0/200
2793 点赞
0 评论
收藏
为你推荐 换一批