Hive4.0新功能 您所在的位置:网站首页 hive31特性 Hive4.0新功能

Hive4.0新功能

2023-10-31 04:04| 来源: 网络整理| 查看: 265

Hive3.X在2020年正式发布,对于很多企业来说仍然停留在1.X,甚者在使用0.X版本中。即使如此,也不能阻止同学们学习的脚步。当然笔者相信仍然还有很多同学还没学习Hive3.X的新特性,那么没关系,本篇先带大家学习一个Hive4.0版本的新特性--Scheduled Queries,提前预热一下。 本篇分别从功能支持的场景、原理、语法使用、demo案例一一进行讲解。

介绍

关于Scheduled Queries功能,其实就是我们现在使用的调度功能。当然Hive4.0对于定时执行计划的场景包括如下: 1、定时从外部系统拉数据,存入hive 2、定期更新列统计信息。 3、重构物化视图

原理

1、首先用户定义执行计划,然后存储到MetaStore中 2、HiveServer会定期读取MetaStore进行执行,并把执行的信息保留在MetaStore中。

语法 --创建定时调度 CREATE SCHEDULED QUERY --具体调度策略 [ ] --执行人,默认情况下以当前用户执行 [] --是否开启 --具体的查询计划定义 --修改定时调度 ALTER SCHEDULED QUERY (||||); --删除定时调度 DROP SCHEDULED QUERY ;

对于scheduleSpecification语法:   1、基于CRON      例如:CRON '0 */10 * * * ? *' 每10分钟执行一次   2、基于EVERY      EVERY [integer] (SECOND|MINUTE|HOUR) [(OFFSET BY|AT) timeOrDate]      例如:        EVERY 2 MINUTES EVERY HOUR AT '0:07:30' EVERY DAY AT '11:35:30'

对于ExecutedAs syntax语法使用: EXECUTED AS

对于enableSpecification语法使用: (ENABLE[D] | DISABLE[D])

对于Defined AS 的语法使用: [DEFINED] AS

对于executeSpec的语法使用: EXECUTE:将下次执行时间调整为现在。通常用于调试

案例1:定时查询 create table t (a integer); -- create a scheduled query; every 10 minute insert a new row create scheduled query sc1 cron '0 */10 * * * ? *' as insert into t values (1); -- depending on hive.scheduled.queries.create.as.enabled the query might get create in disabled mode -- it can be enabled using: alter scheduled query sc1 enabled; -- inspect scheduled queries using the information_schema select * from information_schema.scheduled_queries s where schedule_name='sc1'; +-----------------------+------------------+------------+----------------------+-------------------+---------+-----------+----------------------+ | s.scheduled_query_id | s.schedule_name | s.enabled | s.cluster_namespace | s.schedule | s.user | s.query | s.next_execution | +-----------------------+------------------+------------+----------------------+-------------------+---------+-----------+----------------------+ | 1 | sc1 | true | hive | 0 */10 * * * ? * | dev | select 1 | 2020-02-03 15:10:00 | +-----------------------+------------------+------------+----------------------+-------------------+---------+-----------+----------------------+ -- wait 10 minutes or execute by issuing: alter scheduled query sc1 execute; select * from information_schema.scheduled_executions s where schedule_name='sc1' order by scheduled_execution_id desc limit 1; +---------------------------+------------------+----------------------------------------------------+-----------+----------------------+----------------------+------------+------------------+---------------------+ | s.scheduled_execution_id | s.schedule_name | s.executor_query_id | s.state | s.start_time | s.end_time | s.elapsed | s.error_message | s.last_update_time | +---------------------------+------------------+----------------------------------------------------+-----------+----------------------+----------------------+------------+------------------+---------------------+ | 496 | sc1 | dev_20200203152025_bdf3deac-0ca6-407f-b122-c637e50f99c8 | FINISHED | 2020-02-03 15:20:23 | 2020-02-03 15:20:31 | 8 | NULL | NULL | +---------------------------+------------------+----------------------------------------------------+-----------+----------------------+----------------------+------------+------------------+---------------------+ 案例2:重构物化视图 --参数设置 set hive.support.concurrency=true; set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; set hive.strict.checks.cartesian.product=false; set hive.stats.fetch.column.stats=true; set hive.materializedview.rewriting=true; --创建表 CREATE TABLE emps ( empid INT, deptno INT, name VARCHAR(256), salary FLOAT, hire_date TIMESTAMP) STORED AS ORC TBLPROPERTIES ('transactional'='true'); CREATE TABLE depts ( deptno INT, deptname VARCHAR(256), locationid INT) STORED AS ORC TBLPROPERTIES ('transactional'='true'); --加载数据 insert into emps values (100, 10, 'Bill', 10000, 1000), (200, 20, 'Eric', 8000, 500), (150, 10, 'Sebastian', 7000, null), (110, 10, 'Theodore', 10000, 250), (120, 10, 'Bill', 10000, 250), (1330, 10, 'Bill', 10000, '2020-01-02'); insert into depts values (10, 'Sales', 10), (30, 'Marketing', null), (20, 'HR', 20); insert into emps values (1330, 10, 'Bill', 10000, '2020-01-02'); --创建物化试图 CREATE MATERIALIZED VIEW mv1 AS SELECT empid, deptname, hire_date FROM emps JOIN depts ON (emps.deptno = depts.deptno) WHERE hire_date >= '2016-01-01 00:00:00'; --创建定时执行计划 create scheduled query mv_rebuild cron '0 */10 * * * ? *' defined as alter materialized view mv1 rebuild; --插入一条新记录 insert into emps values (1330, 10, 'Bill', 10000, '2020-01-02'); --查看结果 SELECT empid, deptname FROM emps JOIN depts ON (emps.deptno = depts.deptno) WHERE hire_date >= '2018-01-01'; --等待10min或者现在执行 alter scheduled query mv_rebuild execute; --再次查看结果 SELECT empid, deptname FROM emps JOIN depts ON (emps.deptno = depts.deptno) WHERE hire_date >= '2018-01-01'; 计划启用禁用 --启用 set hive.scheduled.queries.create.as.enabled=true; --启用执行计划 alter scheduled query sc1 enabled; --禁用 set hive.scheduled.queries.create.as.enabled=false; 元数据存储

对于执行信息的保留策略通过metastore.scheduled.queries.execution.max.age参数配置。 1、information_schema.scheduled_queries:调度计划定义信息

2、information_schema.scheduled_executions:调度计划执行信息



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有