一、临时数据方案
1、with as
1.1 使用demo
|
1.2 with as 执行分析
执行sql :
|
拓展:hive reflect 介绍:hive新特性reflect函数介绍 - hustzzl - 博客园
执行结果:
产生2个id
总结:结果中可以看到,产生了两个不一样的id,说明reflect函数被执行了两次,即with as中的子查询被执行了两次。
查看执行路径:
|
总结: TableScan 了两次,并且是相同的两次
1.3 with as 执行总结
with as 不会减少表的扫描,一个任务中重复使用会执行多次(可以简单理解with AS 生成了个视图)
2、CREATE TEMPORARY TABLE 创建临时表
2.1 使用demo
|
2.2 TEMPORARY TABLE 介绍
Hive从0.14.0开始提供创建临时表的功能,表只对当前session有效,session退出后,表自动删除。
创建的临时表仅仅在当前会话是可见的,数据将会被存储在用户的暂存目录中,并在会话结束时被删除。如果创建临时表的名字与当前数据库下的一个非临时表相同,则在这个会话中使用这个表名字时将会使用的临时表,而不是非临时表,用户在这个会话内将不能使用原表,除非删除或者重命名临时表。
临时表有如下限制:
- 不支持分区字段
- 不支持创建索引
- 在Hive1.1.0之后临时表可以存储到memory,ssd或者default中,可以通过配置 hive.exec.temporary.table.storage来实现
3、创建真实表作为临时表
直接创建真是表,并且落地hdfs,每次使用过后删除
使用demo:
|
二、临时表方式对比
临时表大概三种临时表,进行横向对比
临时表方法 |
优点 |
缺点 |
使用注意 |
---|---|---|---|
with as | 1.使用方便,无需关注结果数据内容。 2.写法简易,不需要建表,直接使用即可 3.可读性强 |
1.如果多次使用,会多次scan表,降低效率 2.数据自查的时候,不容易定位问题 |
如果多次使用,会多次scan表! |
create temporary table | 1.使用较为方便,单个进程中存在,自动删除。 2.具备复用性,在相同任务中,重复使用结果。 |
1.任务结束既删除,不方便过程数据校验。 2.无法创建分区表,只能简单创建临时表。 |
无 |
create table | 1.直接创建真实表,并且落地hdfs,方便过程数据校验。 2.可以创建分区临时表等操作,丰富临时表。 |
1.使用不方便,每次需要先drop再create,完成后再drop。 |
记得给临时表带参数,方便任务回滚! |
总结:文章来源:https://www.toymoban.com/news/detail-525959.html
目前使用的三种方式各有优劣,需要在对应场景使用。文章来源地址https://www.toymoban.com/news/detail-525959.html
到了这里,关于Hive--临时表的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!