首页 > 数据库 >Hive的SQL优化

Hive的SQL优化

时间:2023-04-11 17:26:23浏览次数:36  
标签:-- 数据 explain Hive SQL Operator 优化 stage

--HiveSQL优化

1.查看执行计划

  --基本信息

  explain select * from part1 where id<10;

  --显示输入属性

  explain dependency

  --查看SQL相关权限信息

  explain authorization

  --查看SQL向量化描述信息,显示为什么未对Map和Reduce进行矢量化

  explain vectorization

  --用实际的行数注释计划

  explain analyze

  --了解系统获得那哪些锁以运行指定查询

  explain locks

2.执行计划详解

--一个Hive查询被转换成一个由一个或多个stage组成的序列(有项无环图DAG)。这些stage可以是MapReduce stage ,也可以是负责元数据存储的stage,也可以是负责文件系统的操作(比如移动和重命名)的stage

--eg:select sun(id) from test1;

  (1)stage dependencies:各个stage之间的依赖

    stage-1是根stage,是开始的stage,stage-0依赖Stage-1,stage-1执行完执行stage-0.

  (2)stage plan;各个stage之间的执行计划

   (2.1)Map Operator Tree:MAP端的计划执行树

        TableScan:表扫描操作,map端第一个操作是加载表

        --alia:表名称

        --Statistics:表统计信息,包括表中数据条数,数据大小等

        Select Operator:选取操作

        --expressions:需要的字段名称及字段类型

        --outputColumnNames;输出的列的名称

        --Statistics:表统计信息,包含表中数据条数,数据大小等

        Group By Operator:分组聚合操作

        --aggregations:显示聚合函数信息

        --mode:聚合模式,值由hash:随机聚合,就是hash partition;partial:局部聚合;final;最终聚合。

        --keys:分组字段,没有分组没有这个字段

        --outputColumnNames:聚合后输出的列名

        --Statistics:表统计信息,包含分组聚合之后的数据条数,数据大小等

        Reduce Output Operator:输出到reduce操作

        --sort order:值为空 不排序;值为+ 正序排序,值为- 倒序排序;值为+-排列的为两列,第一列为正序,第二列为倒序

        Filter Operator:过滤操作

        --predicate;过滤条件,如sql中where id>1,则显示(id>1)

        Map Join Operator:join操作

        --condition map:join方式,如Inner Join 0 to 1 Left Outer Join 0 to 2

        --keys:join的条件字段

        --outputColumnNames:join完成后输出的字段

        --Statistics:join完成后生成的数据条数,大小等

        File Output Operator;文件输出操作

        --compressed:是否压缩

        --table:表信息,包含输入输出文件格式化方式,序列化方式

        Fetch Opertor:客户端获取数据操作

        --limit:值为-1表示不限制条数,其他值为限制条数

   (2.2)Reduce Operator Tree:Reduce端的执行计划树

3.explain dependency的用法

--用于描述一段SQL需要的数据来源,输出是个json格式的数据,里面包含以下内容:

  input_partitions:描述一段SQL依赖的数据来源表分区,里面存储的是分区名的列表,如果整段SQL中包含的表都是非分区表,则显示为空

  input_tables:描述一段SQL依赖的数据来源表,里面存储的是Hive表名的列表

  --使用场景

  (1)快速排除:快速排除因为读取不到相应分区的数据而导致任务数据出现异常。

  (2)理清表输入:帮助程序运行,特别有助于理解多重子查询,多表连接的依赖输出。

4.explain authorization

--可以知道SQL访问的数据来源(INPUTS)和数据输出(OUTPUTS),以及当前Hive的访问用户(CURRENT_USER)和操作(OPERATION)

 

标签:--,数据,explain,Hive,SQL,Operator,优化,stage
From: https://www.cnblogs.com/hole/p/17306924.html

相关文章

  • mysql中字段存储不区分大小写
    mysql中查询时,遇到字段不区分大小写的情况,大小写都能取到值//sql语句中"select*fromtab_userwherebinaryusername=?andpassword=?";binary可以做到区分大小写//MySQL中默认字段是不区分大小写的,如果要完成区分大小写的功能,在设计时要注意字符集的选择......
  • pymysql 操作数据库
    一、数据库操作应用场景1、检验测试数据接口发送请求后明确会对数据库中的某个字段进行修改,但响应结果中无该字段数据时。如:ihrm删除员工接口。is_delete字段,没有在响应结果中出现!需要借助数据库校验!2、构造测试数据测试数据使用一......
  • flask-sqlalchemy使用,flask-migrate使用
    flask-sqlalchemy使用,flask-migrate使用flask-sqlalchemy使用集成到flask中,我们可以用sqlalchemy来做,就是比较的繁琐现在有一个第三方的flask-sqlalchemy,可以快速的集成到flask中#使用flask-sqlalchemy集成1.下载flask-sqlalchemy#pipinstallflask-sqlalchemy2.导......
  • python爬虫案列11:爬取双色球历史开奖记录并存储到mysql
    开始之前要先在MySQL创建一个名为spider的数据库,在里面创建一个名caipiao的表,表里面三个字段,data,red,blue点击查看代码importrequestsimportpymysqlfromlxmlimportetree#连接数据库conn=pymysql.connect(host='localhost',port=3306,user='root',password='......
  • plsql控制语句(循环)
    --4.利用三种循环和goto手动循环语句求1到100的偶数和1.loop循环:declare--声明一个变量v_n和一个v_n和的变量v_sum并赋值为0v_nnumber(10):=0;v_sumnumber(10):=0;beginloop......
  • 爬虫案列10:python 连接mysql
    importpymysql#打开数据库连接db=pymysql.connect(host='localhost',user='root',password='root',database='pikachu',port=3306......
  • SQLServer 客户端链接服务器到Oracle数据库 全攻略
    引言和第三方公司进行接口对接时,发现某一个模块第三方只提供一个视图,还让我们直接调用他们数据库......
  • Linux 上 定时备份 postgresql 数据库
    Linux上定时备份postgresql数据库为了避免操作数据库的风险因此计划每天对postgresql数据库进行定时备份1.服务器地址:备份服务器地址10.10.10.101(虚构)postgresql数据库所在的服务器地址10.10.10.100(虚构)因为我有单独的备份数据库不在同一个服务器上操作首先要保证这......
  • sql提高 循环结构
    循环结构 分类:while、loop、repeat——对应java中:for、while、dowhile  循环控制:iterate类似于continue,继续,结束本次循环,继续下一次循环leave类似于break,跳出,结束当前所在的循环 1.while语法:【标签:】while循环条件do循环体;endwhile;联想:whil......
  • mysql查询报表数据补全12个月
    mysql中生成多行序列1SELECT2SUBSTRING_INDEX(3SUBSTRING_INDEX('1,2,3,4,5,6,7,8,9,10,11,12',',',help_topic_id+1),',',-1)ROWNUM4FROM5mysql.help_topic6WHERE7help_topic_id<(LENGTH('1,2,3,4......