首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hive SQL底层执行过程详细剖析(好文收藏)

Hive直接访问存储在 HDFS 中或者 HBase 中的文件,通过 MapReduce、Spark 或 Tez 执行查询。...我们今天来聊的就是 Hive 底层是怎样将我们写的 SQL 转化为 MapReduce 等计算引擎可识别的程序。...,该元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词修建分区; 步骤5:编译器生成的计划是分阶段的DAG,每个阶段要么是 map/reduce 作业,要么是一个元数据或者HDFS上的操作。...阶段四:优化逻辑执行计划 Hive中的逻辑查询优化可以大致分为以下几类: 投影修剪 推导传递谓词 谓词下推 将Select-Select,Filter-Filter合并为单个操作 多路 Join 查询重写以适应某些列值的...MapReduce Group By的实现 Distinct的实现原理 以下面这个SQL为例,讲解 distinct 的实现: select dealid, count(distinct uid) num

8.9K32
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    hive函数大全:11大类、109个函数

    注意:精度在hive中是个很大的问题,类似这样的操作最好通过round指定精度 hive> select round(8.4 % 4 , 2) from lxw_dual; 0.4 6....字符串连接函数:concat 语法: concat(string A, string B…) 返回值: string 说明:返回输入字符串连接后的结果,支持任意个输入字符串 举例: hive>...)统计结果中col不同值相加的结果 举例: hive> select sum(t) from lxw_dual; 100 hive> select sum(distinct t) from lxw_dual...)统计结果中col不同值相加的平均值 举例: hive> select avg(t) from lxw_dual; 50 hive> select avg (distinct t) from lxw_dual...参数B控制内存消耗的近似精度,B越大,结果的准确度越高。默认为10,000。当col字段中的distinct值的个数小于B时,结果为准确的百分位数 13.

    6K10

    Hive优化器原理与源码解析系列--优化规则HiveAggregateProjectMergeRule(十六)

    在某些情况下,此规则具有修剪的效果:聚合将使用比Projetct投影操作更少的列。 在CalciteAPI中关于构建Aggregate汇总操作对象组成元素。...Project投影:从输入RelNode中计算一组“SELECT EXPRESSIONS”的关系表达式。...判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。...输入的字段是基于0的。如果有多个输入,则它们将连续编号。...初始化groupset字段索引与投影中字段索引的映射关系,并判断Project投影的行表达式,是一个字段的引用,而不是函数表达式,否则将无法应用此优化。

    69720

    腾讯云大数据TBDS 助力国有大行一表通业务性能翻三倍!

    2.银行业一表通业务介绍 一表通业务是监管机构为了推进统一的监管数据体系,规范监管数据指标的定义和口径,确定统一的业务监测取数的规则,试行建立统一的监管数据采集规范和平台。...导致的 RuntimeException问题,窗口函数中包含 count(distinct)计数操作时导致的异常,不支持事务表 update/delete/merge 语句等等; 问题原因 Hive...问题; ●修复了 count(distinct) 过多导致的查询结果错误; ●修复了窗口函数中包含 count(distinct) 计数操作时,CBO 抛出异常问题; 功能增强,如: ●支持 JDBC...的支持不够完善,需修复常见的 bug,支持客户用到的数据类型,函数,表达式,算子等; 解决方案 (1)Vectorization Vectorization 是 Hive 中的一项重要优化技术,通过批量处理数据来提高查询性能...● StarRocks + Iceberg,湖仓一体,更高一层级的性能 另外,在新一代腾讯云 TBDS 产品中,通过采集分析作业执行计划数据,提供了作业智能洞察分析能力,让作业优化门槛更低,在业务投产初期就能识别作业运行效率问题

    42510

    浅谈离线数据倾斜

    02 Hive数据倾斜 理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值...因为在hive中当遇到map失败重算时,就会出现数据重复(数据丢失)的问题,可以参见平台说明:https://cf.jd.com/pages/viewpage.action?...4)count distinct大量相同特殊值,使用sum…group by代替count(distinct) 例如 select a,count(distinct b) from t group by...总结: 1.对于join,在判断小表不大于1G的情况下,使用map join 2.对于group by或distinct,设定 hive.groupby.skewindata...,无法对B进行划分处理,否则会导致数据正确性问题,这也是Spark项目所面临的难题。

    53230

    【Hive】hive 数据倾斜、优化策略、hive执行过程、垃圾回收

    ,min 等聚集函数,通常不会有数据倾斜问题 主要表现: 任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce子任务未完成,因为其处理的数据量和其他的 reduce...(一个reduce task中) count(distinct),在数据量大的情况下,容易数据倾斜,因为 count(distinct)是按 group by 字段分组,按 distinct 字段排序...在 hive 中,直接提供了能够在 HQL 语句指定该次查询使用 map join map join 的用法是在查询/子查询的SELECT关键字后面添加/*+ MAPJOIN(tablelist) *...值推至不同对 Reduce 中 Reduce: Reducer 根据 Key 值进行 Join 操作,并且通过 Tag 来识别不同的表中的数据 具体实现过程: group by SELECT...在 MapReduce 的编程案例中,我们得知,一个MR Job的 MapTask 数量是由输入分片 InputSplit 决定的。

    1.7K22

    一文学完所有的Hive Sql(两万字最全详解)

    ,表结构恢复不了,需要自己重新创建;truncate 清空的表是不进回收站的,所以无法恢复truncate清空的表 所以 truncate 一定慎用,一旦清空将无力回天 向hive表中加载数据 直接向分区表中插入数据...:concat 语法: concat(string A, string B…) 返回值: string 说明:返回输入字符串连接后的结果,支持任意个输入字符串 hive> select concat('...B, string C) 返回值: string 说明:将字符串A中的符合java正则表达式B的部分替换为C。...test_t2; RANK 和 DENSE_RANK使用 RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位 。...DENSE_RANK()生成数据项在分组中的排名,排名相等会在名次中不会留下空位。

    3.1K73

    Hive日常操作必会,学会事半功倍。

    表查询语法 SELECT [ALL | DISTINCT] select_expression, select_expression, ......,因此只有一个 reducer,因为多个 reducer 无法保证全局有序,当只有一个 reducer 时,会导致当输入规模较大时,耗费较长的计算时间。...就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理; group by 语句中 select 指定的字段必须是“分组依据字段”,其他字段若想出现在 select 中则必须包含在聚合函数中...(2). where 在分组和聚集计算之前选取输入行(它控制哪些行进入聚集计算),而 having 在分组和聚集之后选取分组的行。 (3)....选择条件可以包含字符或数字 %:代表零个或多个字符(任意个字符) _:代表一个字符 rlike 子句是 hive 中这个功能的一个扩展,其可以通过 Java 的正则表达式这个更强大的语言来指定匹配条件。

    62020

    「Hive进阶篇」万字长文超详述hive企业级优化

    distinct 和 group by参数调优解决数据倾斜问题二、hive优化1....提前数据收敛在子查询中,有些条件能先过滤的尽量放在子查询里先过滤,减少子查询输出的数据量。...简称PPD,指的是在不影响数据结果的情况下,将过滤表达式尽可能移动至靠近数据源的位置,以使真正执行时能直接跳过无关的数据,这样在map执行过滤条件,可以减少map端数据输出,起到了数据收敛的作用,降低了数据在集群上传输的量...,整个表达式的谓词将不会被下推。...x % 10,这样数据就会随机进入 reduce 中,防止出现有的文件过大或过小9. count(distinct ) 和 group by在计算去重指标的时候,比如不同年龄段的用户数这个指标,一般都是采用

    1.3K41

    数据分析工具篇——HQL原理及优化

    或者where中需要用到的)列;同时在value中还会包含表的Tag信息,用于标明此value对应哪个表; 按照key进行排序; 2)Shuffle阶段: 根据key的值进行hash,并将key/value...3)Reduce阶段: 根据key的值完成join操作,期间通过Tag来识别不同表中的数据。...hive.auto.convert.join=true;# 表示将运算转化成map join方式 使用的前提条件是需要的数据在 Map 的过程中可以访问到。 ?...…代替子查询; 4.2)尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段; 5) 在map阶段读取数据前,FileInputFormat会将输入文件分割成split...; 7)设置map个数: map个数和来源表文件压缩格式有关,.gz格式的压缩文件无法切分,每个文件会生成一个map; set hive.hadoop.supports.splittable.combineinputformat

    1.4K20

    (下)史上最全干货!Flink SQL 成神之路(全文 18 万字、138 个案例、42 张图)

    4.2.2.模糊函数 在模糊函数引用中,用户只需在 SQL 查询中指定函数名就可以引用 UDF,例如:select myfunc(x) from mytable。...functions 或 UDTF):输入一条条输出多条,对标 Hive 中的 UDTF; 聚合函数(Aggregate functions 或 UDAF):输入多条输出一条,对标 Hive 中的 UDAF...因为在 SQL 表达式中,如果我们想对数据先分组再进行聚合取值,能选择的就是 select max(xxx) from source_table group by key1, key2。...在 HiveModule 中包含了 hive 内置的 udf。...,性能就会提升很大 ⭐ (常用)去重 filter 子句:在 count distinct 中使用 filter 子句于 Hive SQL 中的 count(distinct if(xxx, user_id

    3.6K22

    「干货」Hive常用10大应用技巧『Hive系列2』

    解决痛点:对于工作中经常应用Hive,以及准备去面试的同学,相信此篇文章会让你有所收获。 01 Hive运行顺序 在应用Hive过程中,你是否有过这样的疑问?...针对类似问题,只要清楚了Hive SQL的运行顺序,便会迎刃而解,顺序如下: (步骤7) SELECT count(*) as col1 (步骤8) DISTINCT (步骤1) FROM (步骤3)...,查询无法运行。...07 distinct与group by的区别「计数场景」 在去重计数场景中,我们经常应用count(distinct)来进行处理;有时也会先在内层通过group by聚合,然后再在外层计数count(...原理:distinct需要将col列中的全部内容都存储在一个内存中,可以理解为一个hash结构,key为col的值,最后计算hash结构中有多少个key即可得到结果。

    1.7K10

    五万字 | Hive知识体系保姆级教程

    使用语法如下: explain query; 在 hive cli 中输入以下命令(hive 2.3.7): explain select sum(id) from test1; 得到结果: STAGE...使用explain dependency查看SQL查询非分区普通表,在 hive cli 中输入以下命令: explain dependency select s_age,count(1) num from...在 hive cli 中输入以下命令: explain authorization select variance(s_score) from student_tb_orc; 结果如下: INPUTS...确实无法减少数据量引发的数据倾斜 在一些操作中,我们没有办法减少数据量,如在使用 collect_list 函数时: select s_age,collect_list(s_score) list_score...详细介绍可查看:Hive解析Json数组超全讲解 8. sort by 和 order by 的区别 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序

    3.9K31

    五万字 | Hive知识体系保姆级教程

    使用语法如下: explain query; 在 hive cli 中输入以下命令(hive 2.3.7): explain select sum(id) from test1; 得到结果: STAGE...使用explain dependency查看SQL查询非分区普通表,在 hive cli 中输入以下命令: explain dependency select s_age,count(1) num from...在 hive cli 中输入以下命令: explain authorization select variance(s_score) from student_tb_orc; 结果如下: INPUTS...确实无法减少数据量引发的数据倾斜 在一些操作中,我们没有办法减少数据量,如在使用 collect_list 函数时: select s_age,collect_list(s_score) list_score...详细介绍可查看:Hive解析Json数组超全讲解 8. sort by 和 order by 的区别 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序

    2.1K21

    Hadoop Hive sql语法详解

    Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的...它最适合应用在基于大量不可变数据的批处理作业。 HIVE的特点:可伸缩(在Hadoop的集群上动态的添加设备),可扩展,容错,输入格式的松散耦合。...Hive 的官方文档中对查询语言有了很详细的描述,请参考:http://wiki.apache.org/hadoop/Hive/LanguageManual ,本文的内容大部分翻译自该页面,期间加入了一些在使用过程中需要注意到的事项...在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如: •select concat(key,concat(';',key)) from dual;...weekday, COUNT(1) FROM u_data_new GROUP BY weekday; 处理Apache Weblog 数据 将WEB日志先用正则表达式进行组合,再按需要的条件进行组合输入到表中

    2.1K30

    最强最全面的Hive SQL开发指南,超四万字全面解析!

    ,表结构恢复不了,需要自己重新创建;truncate 清空的表是不进回收站的,所以无法恢复truncate清空的表 所以 truncate 一定慎用,一旦清空将无力回天 向hive表中加载数据 直接向分区表中插入数据...:concat 语法: concat(string A, string B…) 返回值: string 说明:返回输入字符串连接后的结果,支持任意个输入字符串 hive> select concat('...中的符合java正则表达式B的部分替换为C。...user_pv; 结果如下: RANK 和 DENSE_RANK 使用: RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位。...DENSE_RANK()生成数据项在分组中的排名,排名相等会在名次中不会留下空位。

    7.6K55

    Presto 在有赞的实践之路

    目前我们的方案是共同使用一个 Hive,通过为专门新建一个库,在创建库的时候指定Location的方式去关联到 Presto 集群的 HDFS NameService。...此外,我们会为这种业务提供深度的性能测试,调整相应的配置,比如将 Task Concurrency 改成1,在并发量高的测试场景中,反而由于减少了线程间切换,性能会更好。...四、Presto 在有赞使用中的遇到的问题 4.1 HDFS 小文件问题 HDFS 小文件问题在大数据领域是个常见的问题。我们发现我们的数仓 Hive 表有些表的文件有几千个,查询特别慢。...于是深入调研了下,Spark,Hive TEZ,Calcite 之类的发觉 count distinct 在 SQL 优化器那边会被优化掉,来解决数据倾斜的问题。...简单来说: 单列的 count distinct: select A, count(distinct B) from T group by A.

    98120

    Hive_

    1,表达式2)如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。   ...UDF(User-Defined Function)是用户自定义的一种标量函数,输入一行数据,输出一个值。 在 HiveQL 查询语句中,可以使用 UDF 函数处理查询中的表达式。...在 Hive 中,UDF/UDTF 用于自定义函数,可以让用户在 Hive 中扩展 SQL 功能。使用自定义函数可以方便地在 SQL 中实现各种自定义逻辑,从而满足更为复杂的数据处理需求。   ...8.2 行列过滤   列处理:在SELECT中,只拿需要的列,如果有,尽量使用分区过滤,少用SELECT *。   ...不过,有时Hive的输入数据量是非常小的。在这种情况下,为查询触发执行任务时消耗可能会比实际job的执行时间要多的多。对于大多数这种情况,Hive可以通过本地模式在单台机器上处理所有的任务。

    30520

    hiveql函数笔记(二)

    1、数据查询 //提高聚合的性能 SET hive.map.aggr=true; SELECT count(*),avg(salary) FROM employees; //木匾不允许在一个查询语句中使用多于一个的函数...表达式 SELECT count(DISTINCT symbol) FROM stocks; 表生成函数: explode(APPAY array)  返回0到多行结果,每行都对应输入的array数组中的一个元素...,partNameN)  其中N>=1,从URL中解析出N个部分信息。其输入参数是:URL,以及多个要抽取的部分的名称。...例如trim(' hive ')的结果是'hive ' regexp_replace(STRING s,STRING regex,STRING replacement) 按照JAVA正则表达式regex...例如trim('hive')的结果是'hive' split(STRING s,STRING pattern)  按照正则表达式pattern分隔字符串s,并将分割后的部分以字符串数组的方式返回。

    86511
    领券