Hive执行计划之hive依赖及权限查询和常见使用场景

您所在的位置:网站首页 怎么样查到对方的位置 Hive执行计划之hive依赖及权限查询和常见使用场景

Hive执行计划之hive依赖及权限查询和常见使用场景

#Hive执行计划之hive依赖及权限查询和常见使用场景| 来源: 网络整理| 查看: 265

目录概述1.explain dependency的查询与使用2.借助explain dependency解决一些常见问题2.1.识别看似等价的SQL代码实际上是不等价的:2.2 通过explain dependency验证将过滤条件在不同位置的查询区别3.查看SQL操作涉及到的相关权限信息

概述

Hive查看执行计划的命令中还有两个不怎么常用但很重要的命令,接下来详细介绍一下。

有一个问题:如何在hiveSQL执行之前就探查到这段逻辑的血缘依赖关系?

hive血缘是很多生产级数仓必须要提供的功能,大多数解决方案都是使用hive hooks的方法通过SQL执行后解析得到hive表的依赖关系。

这个方案能细粒度到字段级依赖,属于很完善的一个解决方案,但有很多场景我们需要在SQL执行之前就得到依赖关系,那么如何解决的呢?

1.explain dependency的查询与使用

explain dependency 提供了这样的一个解决方案,它可以查询一段SQL需要的数据来源,以JSON的形式展现结果数据。里面主要包含两部分内容:

input_tables:描述一段SQL依赖的数据来源表,里面存储的是hive表名的列表,格式如下:

{"tablename":"库名@表名","tabletype":"表的类型(外部表/内部表)"}

input_partitions:描述一段SQL依赖的数据来源表分区,里面存储的是分区名称的列表,格式如下:

{"partitionName":"库名@表名@分区列=分区列的值"}

如果查询的表为非分区表,则显示为空。

可以通过以下例子来进行比对,其中例1是查询非分区普通表SQL的explain dependency,例2是查询分区表SQL的explain dependency。

例1 使用explain dependency查看SQL非分区普通表。

explain dependency -- 统计年龄小于30岁各个年龄里,昵称里带“小”的人数 select age,count(0) as num from temp.user_info_all_no where age < 30 and nick like '%小%' group by age;

输出结果内容:

{"input_tables":[{"tablename":"temp@user_info_all_no","tabletype":"MANAGED_TABLE"}],"input_partitions":[]}

例2 使用explain dependency查看SQL查询分区表。

explain dependency -- 统计年龄小于30岁各个年龄里,昵称里带“小”的人数,其中ymd字段为分区字段 select age,count(0) as num from temp.user_info_all where ymd >= '20230501' and age < 30 and nick like '%小%' group by age;

输出结果内容:

{"input_tables":[{"tablename":"temp@user_info_all","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"temp@user_info_all@ymd=20230501"},{"partitionName":"temp@user_info_all@ymd=20230502"},{"partitionName":"temp@user_info_all@ymd=20230503"},{"partitionName":"temp@user_info_all@ymd=20230504"},{"partitionName":"temp@user_info_all@ymd=20230505"},{"partitionName":"temp@user_info_all@ymd=20230529"}]} 2.借助explain dependency解决一些常见问题

explain dependency的使用场景有以下几个:

场景一,快速排除。快速排除因为读不到相应分区的数据而导致任务数据输出异常。例如,在一个以天为分区的任务中,上游任务因为生产过程不可控因素出现异常或者空跑,导致下游任务引发异常。通过这种方式,可以快速查看SQL读取的分区是否出现异常。

场景二,理清表的输入,帮助理解程序的运行,特别是有助于理解有多重子查询,多表连接的依赖输入。

场景三,提前通过解析hiveSQL脚本进行血缘依赖解析,用于一些定制化数据平台工具开发中的血缘构建。

explain dependency的使用能帮助开发者解决哪些问题呢?

2.1.识别看似等价的SQL代码实际上是不等价的:

对于接触SQL不久的程序员来说,很多人容易将

select * from a left join b on a.no=b.no and a.f>1 and a.f1 and a.f= '20230501' and a.ymd = '20230501' and a.ymd = '20230501' and b.ymd = '20230501' and b.ymd = '20230501' and a.ymd = '20230501' and b.ymd = '20230501' and a.ymd = '20230501' and ymd = '20230501' and ymd = '20230501' and ymd = '20230501' and b.ymd = '20230501' and ymd = '20230501' and ymd = '20230501' and ymd = '20230501' and a.ymd



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3