Hive视图

目录

Hive动态分区中的视图和map类型

相关知识

[Hive 分区Hive 中的表分区比较简单,就是将同一组数据放到同一个 HDFS 目录下,当查询中过滤条件指定了某一个分区值时候,只将该分区对应的目录作为 Input,从而减少 MapReduce 的输入数据,提高查询效率。](#Hive 分区Hive 中的表分区比较简单,就是将同一组数据放到同一个 HDFS 目录下,当查询中过滤条件指定了某一个分区值时候,只将该分区对应的目录作为 Input,从而减少 MapReduce 的输入数据,提高查询效率。)

[动态分区启用 Hive 动态分区,只需要在 Hive 会话中设置两个参数:](#动态分区启用 Hive 动态分区,只需要在 Hive 会话中设置两个参数:)

[map类型Hive 之所以能在大数据领域比较受欢迎,很大一部分原因在于相比其他SQL类存储系统支持更加复杂的数据类型,map 就是其中一种。](#map类型Hive 之所以能在大数据领域比较受欢迎,很大一部分原因在于相比其他SQL类存储系统支持更加复杂的数据类型,map 就是其中一种。)

Hive使用视图降低查询复杂度

[编程要求平台中有一个表 employee, 建表的语法如下:](#编程要求平台中有一个表 employee, 建表的语法如下:)

Hive动态分区中的视图和map类型

相关知识

Hive 分区

Hive 中的表分区比较简单,就是将同一组数据放到同一个 HDFS 目录下,当查询中过滤条件指定了某一个分区值时候,只将该分区对应的目录作为 Input,从而减少 MapReduce 的输入数据,提高查询效率。

创建一个分区的案例如下:

  • CREATE EXTERNAL TABLE t_lxw1234 (
  • id INT,
  • ip STRING COMMENT '访问者IP',
  • avg_view_depth DECIMAL(5,1),
  • bounce_rate DECIMAL(6,5)
  • ) COMMENT 'lxw的大数据田地-lxw1234.com'
  • PARTITIONED BY (month STRING, day STRING)
  • ROW FORMAT DELIMITED
  • FIELDS TERMINATED BY ','
  • STORED AS textfile;

在创建表时候,使用 PARTITIONED BY 关键字来指定该表为分区表,后面括号中指定了分区的字段和类型,分区字段可以有多个,在 HDFS 中对应多级目录。

比如,上面的表 t_lxw1234 分区 month='2015-06',day='2015-06-15'对应 HDFS 上的路径为:/user/hive/warehouse/default.db/t_lxw1234/month=2015-06/day=2015-06-15/,当查询中指定了 month='2015-06' AND day='2015-06-15',MapReduce 直接从该目录中读取数据,如果只指定了 month='2015-06',那么 MapReduce 将 /month=2015-06/ 下所有的子目录都作为 Input。

对以上案例进行分区操作入下:

分区追加数据:INSERT INTO TABLE t_lxw1234 PARTITION (month = '2015-06',day = '2015-06-15') SELECT * FROM dual;

使用INSERT添加分区:ALTER TABLE t_lxw1234 ADD PARTITION (month = '2015-06',day = '2015-06-15') location 'hdfs://namenode/tmp/lxw1234/month=2015-06/day=2015-06-15/';

查看表的所有分区:show partitions t_lxw1234;

删除分区:ALTER TABLE t_lxw1234 DROP PARTITION (month = '2015-01', day = '2015-01-25');

动态分区

启用 Hive 动态分区,只需要在 Hive 会话中设置两个参数:

  1. set hive.exec.dynamic.partition=true;
  2. set hive.exec.dynamic.partition.mode=nonstrict;

map类型

Hive 之所以能在大数据领域比较受欢迎,很大一部分原因在于相比其他SQL类存储系统支持更加复杂的数据类型,map 就是其中一种。

案例:

  1. map结构的表结构创建

  2. hive> create table employee(id string, perf map<string, int>)
  3. > ROW FORMAT DELIMITED
  4. > FIELDS TERMINATED BY '\t'
  5. > COLLECTION ITEMS TERMINATED BY ','
  6. > MAP KEYS TERMINATED BY ':';
  7. 原始数据格式

  8. 1 job:80,team:60,person:70
  9. 2 job:60,team:80
  10. 3 job:90,team:70,person:100
  11. 数据导入

  12. hive> LOAD DATA LOCAL INPATH '/home/work/data/test7.txt' INTO TABLE employee;
  13. 数据查询

  14. hive> select perf'person' from employee;
  15. 70
  16. NULL
  17. 使用explode()函数查询

  18. hive> select explode(perf) as (p_name,p_score) from employee limit 4;
  19. job 80
  20. team 60
  21. person 70
  22. 使用explode()和lateral view结合查询

  23. hive> select id,p_name,p_score from employee lateral view explode(perf) perf as p_name,p_score limit 3;
  24. 1 job 80
  25. 1 team 60
  26. 1 person 70
  27. 使用size()函数查看map结构中的键值对个数也可查看array中的元素个数

  28. hive> select size(perf) from employee
  29. 3
  30. 2
  31. 3

编程要求

根据提示,在右侧编辑器补充代码。

平台中创建了一个带有 map 类型字段的表,创建语法如下:

  1. create table person(id int, name string, family map<string, string>)
  2. > ROW FORMAT DELIMITED
  3. > FIELDS TERMINATED BY ' '
  4. > COLLECTION ITEMS TERMINATED BY ','
  5. > MAP KEYS TERMINATED BY ':';

导入的数据格式为:

  1. 1 Mary ma:Maria,fa:Bob,da:Lily,son:John
  2. 2 Bob ma:Kristin,fa:Leon,da:Mary
  3. 3 John ma:Maria,fa:Bob,son:David

请你建立一个视图 children_of_Maria,存放所有母亲叫做 Maria 的人的信息。

复制代码
create view children_of_Maria
as
select id, name, family
from person
where family['ma'] = 'Maria';

Hive使用视图降低查询复杂度

编程要求

平台中有一个表 employee, 建表的语法如下:

  1. CREATE TABLE IF NOT EXISTS employee(
  2. Id int,
  3. Name string,
  4. Salary int,
  5. Designation string,
  6. Dept string
  7. )
  8. row format delimited
  9. fields terminated by','
  10. lines terminated by'\n'
  11. stored as textfile;

导入的数据如下:

  1. 1201,Mary,45000,Technical manager,TP
  2. 1201,Bob,45000,Proofreader,PR
  3. 1203,Kristin,40000,Technical writer,TP
  4. 1204,Krian,40000,Hr Admin,HR
  5. 1205,Krathi,30000,Op Admin,Admin
  6. 1206,John,45000,Technical manager,TP
  7. 1207,Jake,50000,Proofreader,PR
  8. 1208,Adela,60000,Technical writer,TP
  9. 1209,Betty,55000,Hr Admin,HR
  10. 1210,Sam,40000,Op Admin,Admin

你需要在右边的代码框中编写 Hive SQL 语句。实现选出所有 Salary 超过 50000 的人的信息存为视图 rich ,然后展示视图的信息。

复制代码
CREATE VIEW IF NOT EXISTS rich AS
SELECT *
FROM employee
WHERE Salary > 50000;
相关推荐
奇点爆破XC11 小时前
Hadoop大数据生态(Ambari管理)组件服务详解
大数据·hadoop·ambari
isNotNullX12 小时前
企业数据中台建设,ETL工具选错了会踩哪些坑?
数据仓库·etl·原型模式
SelectDB技术团队14 小时前
预约发布会|核心产品力首发,如何构建面向 Agent 时代的企业级数据引擎
数据库·数据仓库·人工智能·数据分析·可观测·apache doris·selectdb
段一凡-华北理工大学15 小时前
工业领域的Hadoop架构学习~系列文章22:Hadoop生态展望 - 面向未来的技术演进
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
Nefu_lyh15 小时前
【Hive】六、Hive 运算逻辑:数学 / 逻辑 / 条件 / 日期 / 字符串函数
数据仓库·hive·hadoop
ChaITSimpleLove15 小时前
Etl.Net 2.2.0 项目深度分析
数据仓库·.net·etl·大数据处理·数据管道·数据处理引擎
知识分享小能手15 小时前
Hadoop学习教程,从入门到精通, HDFS分布式文件系统 — 完整知识点与案例代码(3)
hadoop·学习·hdfs
陆水A1 天前
【实时数仓·3】Flink多表JOIN状态爆炸——Event Time Temporal JOIN + TTL分层治理
大数据·数据仓库·数据分析·flink·数据库开发·bigdata
段一凡-华北理工大学1 天前
工业领域的Hadoop架构学习~系列文章20:故障诊断与根因分析 - 从表象到本质的智能推理
大数据·人工智能·hadoop·学习·架构·高炉炼铁·工业智能体
Francek Chen1 天前
【大数据处理与分析】MapReduce:05 MapReduce的具体应用
大数据·hadoop·分布式·mapreduce