Hive 中的临时表使用对比

14 篇文章 1 订阅
本文通过使用Spark-SQL测试,对比了在Hive中处理数据的不同方法,包括union all、with as子查询、创建临时视图以及缓存表的操作。讨论了各种方法的适用场景、效果和效率,强调了临时表和视图的生命周期以及Spark特有的缓存功能。
摘要由CSDN通过智能技术生成

说明(使用 spark-sql 测试)

需求说明:假设我们现在有 3 张表,如下图所示,分别为 tra_stock_infotra_stock_info_sstra_stock_info_sz

我们现在需要将 tra_stock_info_sstra_stock_info_sz 的数据插入到 tra_stock_info 表中,那么我们有几种方法呢?每种方法有什么区别呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

union

由于两个表中的数据不可能出现重复的情况,所以我们使用 union all 将查询结果进行关联,然后插入到 tra_stock_info 表中

注意:并未使用到临时表,只是把查询结果关联插入

insert overwrite table tra_stock_info

select 
       trade_date,
       sec_code,
       sec_name
from tra_stock_info_sz
union all
select 
       trade_date,
       sec_code,
       sec_name
from tra_stock_info_ss;

with…as

with as 也叫做子查询部分,首先定义一个 SQL 片段,该 SQL 片段会被整个 SQL 语句所用到,可以提高 SQL 语句的可读性,使 SQL 看起来逻辑更清晰

注意:with as 是当前 SQL 有效,可以亲自试一下,当 insert 的 SQL 执行完后,我们继续使用 t1 会发现报错不存在,因此可以总结为当前 SQL 有效

with t1 as (
    select trade_date,
           sec_code,
           sec_name
    from tra_stock_info_sz
),
     t2 as (
         select trade_date,
                sec_code,
                sec_name
         from tra_stock_info_ss
     )

insert
overwrite
table
tra_stock_info
select *
from t1
union all
select *
from t2;

create temporary view

如果在整个会话中多次使用某次的查询结果的话,可以把该次查询结果创建为临时视图,方便后续使用

保存的仅仅是一段查询语句的逻辑,而不是查询的结果集,使用一次就触发一次查询,如果逻辑复杂,不建议使用

注意:临时视图当前会话有效,视图则永久有效
注意:Spark 支持该语法,Hive 不支持该语法

create temporary view t1 as
select trade_date,
       sec_code,
       sec_name
from tra_stock_info_ss;

create temporary view t2 as
select trade_date,
       sec_code,
       sec_name
from tra_stock_info_sz;

insert
overwrite
table
tra_stock_info
select *
from t1
union all
select *
from t2;

cache table

将查询结果缓存到内存中,一次查询,多次使用

注意:Spark 支持该语法,Hive 不支持该语法

cache table t1 as
select trade_date,
       sec_code,
       sec_name
from tra_stock_info_ss;

cache table t2 as
select trade_date,
       sec_code,
       sec_name
from tra_stock_info_sz;

insert
overwrite
table
tra_stock_info
select *
from t1
union all
select *
from t2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值