Hive--临时表的三种方式

这篇具有很好参考价值的文章主要介绍了Hive--临时表的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、临时数据方案

1、with as 

1.1 使用demo

with t1 as (

    select

        imei

        ,src_pkg

        ,src_type

        ,app_version_name

    from bi_quickgame.dw_qgcrpk_boot_di

    where day '${etl_date}'

    group by

        imei, src_pkg, src_type, app_version_name

)

1.2 with as 执行分析

执行sql :

EXPLAIN

with as(

select regexp_replace(reflect("java.util.UUID""randomUUID"), "-"""AS id --生成一个随机id

,'zengkun' as name

)

select from t

union all

select from t

;

拓展:hive  reflect  介绍:hive新特性reflect函数介绍 - hustzzl - 博客园

执行结果:

产生2个id

总结:结果中可以看到,产生了两个不一样的id,说明reflect函数被执行了两次,即with as中的子查询被执行了两次

查看执行路径:

Explain

STAGE DEPENDENCIES:

  Stage-1 is a root stage

  Stage-0 depends on stages: Stage-1

STAGE PLANS:

  Stage: Stage-1

    Map Reduce

      Map Operator Tree:

          TableScan

            alias: _dummy_table

            Row Limit Per Split: 1

            Statistics: Num rows: 1 Data size: 1 Basic stats: COMPLETE Column stats: COMPLETE

            Select Operator

              expressions: regexp_replace(reflect('java.util.UUID','randomUUID'), '-', '') (type: string), 'zengkun' (type: string)

              outputColumnNames: _col0, _col1

              Statistics: Num rows: 1 Data size: 1 Basic stats: COMPLETE Column stats: COMPLETE

              Union

                Statistics: Num rows: 2 Data size: 2 Basic stats: COMPLETE Column stats: COMPLETE

                File Output Operator

                  compressed: false

                  Statistics: Num rows: 2 Data size: 2 Basic stats: COMPLETE Column stats: COMPLETE

                  table:

                      input format: org.apache.hadoop.mapred.TextInputFormat

                      output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

          TableScan

            alias: _dummy_table

            Row Limit Per Split: 1

            Statistics: Num rows: 1 Data size: 1 Basic stats: COMPLETE Column stats: COMPLETE

            Select Operator

              expressions: regexp_replace(reflect('java.util.UUID','randomUUID'), '-', '') (type: string), 'zengkun' (type: string)

              outputColumnNames: _col0, _col1

              Statistics: Num rows: 1 Data size: 1 Basic stats: COMPLETE Column stats: COMPLETE

              Union

                Statistics: Num rows: 2 Data size: 2 Basic stats: COMPLETE Column stats: COMPLETE

                File Output Operator

                  compressed: false

                  Statistics: Num rows: 2 Data size: 2 Basic stats: COMPLETE Column stats: COMPLETE

                  table:

                      input format: org.apache.hadoop.mapred.TextInputFormat

                      output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

  Stage: Stage-0

    Fetch Operator

      limit: -1

      Processor Tree:

        ListSink

 总结: TableScan 了两次,并且是相同的两次

1.3 with as 执行总结

 with as 不会减少表的扫描,一个任务中重复使用会执行多次(可以简单理解with AS 生成了个视图)

2、CREATE TEMPORARY TABLE 创建临时表

2.1 使用demo

-- 获取所有除曝光的所有埋点

create temporary table bi_gamecenter_dev.tmp_da_gc_origin_event_di_1 as

select

    t.*

from bi_gamecenter_dev.dw_gc_oprt_log_h t

where day  '${etl_date}'

and not (  --delete the exposure data

     action '/clientRequest/userOperationLog'

     and (

        fields['exposure_stat'is not null

        or fields['appexpo'is not null

        or fields['search_exposure'is not null

        or fields['exposure'is not null

     )

);

2.2 TEMPORARY TABLE 介绍

Hive从0.14.0开始提供创建临时表的功能,表只对当前session有效,session退出后,表自动删除

创建的临时表仅仅在当前会话是可见的,数据将会被存储在用户的暂存目录中,并在会话结束时被删除。如果创建临时表的名字与当前数据库下的一个非临时表相同,则在这个会话中使用这个表名字时将会使用的临时表,而不是非临时表,用户在这个会话内将不能使用原表,除非删除或者重命名临时表。

临时表有如下限制:

  1. 不支持分区字段
  2. 不支持创建索引
  3. 在Hive1.1.0之后临时表可以存储到memory,ssd或者default中,可以通过配置 hive.exec.temporary.table.storage来实现

3、创建真实表作为临时表

直接创建真是表,并且落地hdfs,每次使用过后删除

使用demo:

-- 前天排行榜访问数据

drop table IF EXISTS bi_gamecenter_dev.tmp_gc_board_exposure_1_${etl_datekey};

create table bi_gamecenter_dev.tmp_gc_board_exposure_1_${etl_datekey} as

select --曝光

    origin_event as origin,

    app_version_code,

    imei

from

    bi_gamecenter_dev.dw_gc_exposure_log_d

where day = date_sub('${etl_date}',1) 

and   origin_event in ('530','531','532','533')

-- 过风控

and risk_flag = 0

;

drop table IF EXISTS bi_gamecenter_dev.tmp_gc_board_exposure_1_${etl_datekey};

二、临时表方式对比

临时表大概三种临时表,进行横向对比

临时表方法

优点

缺点

使用注意

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

到了这里,关于Hive--临时表的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三种SQL实现聚合字段合并(presto、hive、mysql)

    需求:按照项目名,以逗号合并参与人

    2024年02月16日
    浏览(33)
  • mybatisplus开启sql打印的三种方式

            使用mybatisplus自带的log-impl配置,可以在控制台打印出sql语句、执行结果的数据集、数据结果条数等详细信息,这种方法适合再调试的时候使用,因为这个展示的信息详细,更便于调试,查找问题进行优化。缺点就是如果执行的sql语句过多,则输出的日志就会很多,

    2024年02月05日
    浏览(45)
  • Spark SQL join的三种实现方式

    join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操作。 对于Spark来说有3种Join的实现,每种Join对应的不同的应用场景(SparkSQL自动决策

    2024年02月11日
    浏览(38)
  • sql文件导入数据库的三种方式

    方式一:在数据库的表中直接右键运行sql文件    方式二:终端窗口 cmd,管理员身份运行 C:WINDOWSsystem32mysql -uroot -p 输入密码 use 数据库名; mysql use reggie; source sql文件路径(不能含有中文) 方式三:在数据库或终端输入sql指令 新建查询--输入sql语句--运行

    2024年02月03日
    浏览(40)
  • Hive基础知识(十五):Hive中SQL排序方式全解

    Order By:全局排序,只有一个 Reducer 1)使用 ORDER BY 子句排序 ASC(ascend): 升序(默认) DESC(descend): 降序 2)ORDER BY 子句在 SELECT 语句的结尾 3)案例实操 (1)查询员工信息按工资升序排列 (2)查询员工信息按工资降序排列 按照员工薪水的2 倍排序 按照部门和工资升序排

    2024年01月19日
    浏览(41)
  • Hive 中执行 SQL语句 报错 :FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.

    在命令输入 hive 启动后: 解决方案: **错误原因:**服务端未开启服务,在hive服务端使用命令:hive --service metastore 然后再启动hive , 就可以正常使用sql语句了。 **其他原因:**有的是mysql没有启动,下面有完整的hive 启动流程 启动hive 流程(很多问题往往是少了步骤导致的)

    2024年02月15日
    浏览(42)
  • PostgreSQL数据库命令行执行SQL脚本的三种方式

    生成环境中,出于安全性等原因,往往不提供数据库连接工具,所以对数据库的更新和升级就得通过命令行来实现。本文总结了三种命令行执行sql脚本的方式。 命令格式: psql [option…] [dbname] [username] 常用参数介绍: -h:指定IP地址或主机名。 -p:指定端口,默认为5432。 -U:

    2024年02月11日
    浏览(48)
  • 使用hive sql 为hive增加或者创建自增列,自增id的五种方式

    *注意:此篇完全是废话,是错误演示文档 创建带有自增ID的Hive表的方法是使用Hive中的 SERDE (序列化和反序列化)和 ROW FORMAT 来为表添加自增ID。具体步骤如下: 在上面的代码中,我们首先使用 CREATE TABLE 语句创建一个名为 your_table 的表,并指定了表的列和数据类型。

    2023年04月18日
    浏览(31)
  • 还原Sql Server数据库BAK备份文件的三种方式及常见错误

    这是演示的是Sql Server 2008R2版本,不同版本可能有细微差别 右键点击数据库→还原数据库    在还原的源中选择源设备→点击选择框  在指定备份中点击添加→选择具体文件→确定→确定  勾选用于还原的备份集→这时目标数据库中会自动生成目标数据库名,在此选择即可→

    2023年04月08日
    浏览(46)
  • 1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解

    1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解 2、hive相关概念详解–架构、读写文件机制、数据存储 3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表 4、hive的使用示例详解-事务表、视图、物化视图、DDL

    2024年02月17日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包