Hive 架构

Hive SQL执行流程
(1)解析器(SQLParser):将 SQL 字符串转换成抽象语法树(AST)
(2)语义分析器(Semantic Analyzer):将 AST 进一步抽象为 QueryBlock(可以理解为一个子查询划分成一个 QueryBlock)
(2)逻辑计划生成器(Logical Plan Gen):由 QueryBlock 生成逻辑计划
(3)逻辑优化器(Logical Optimizer):对逻辑计划进行优化
(4)物理计划生成器(Physical Plan Gen):根据优化后的逻辑计划生成物理计划
(5)物理优化器(Physical Optimizer):对物理计划进行优化
(6)执行器(Execution):执行该计划,得到查询结果并返回给客户端


char和varchar的区别
(1)char类型的长度是固定的,不足的部分用隐藏空格填充,varchar的长度是可变的。这就表示,存储字符串’abc’,使用char(10),表示存储的字符将占10个字节(包括7个空字符);使用varchar(10),则表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。
(2)char最大长度是255字符;varchar最大长度是65535个字节。
(3)存储效率上:char即使字符串较短也占用完整的 n 个字符的存储空间,有可能浪费存储。varchar:仅占用实际字符串长度的存储空间,更加节省。
(4)char类型的效率比varchar的效率稍高。
(5)使用 char 类型来存储固定长度的字符串,以便于优化存储和查询效率。使用 varchar 类型来存储长度可变的字符串,以节省存储空间并提高灵活性。
说一下UDF、UDAF、UDTF的区别?
UDF(User-Defined Functions):
UDF(User-defined functions)用户自定义函数,简单说就是输入一行输出一行的自定义算子。是大多数 SQL 环境的关键特性,用于扩展系统的内置功能。(一对一)
UDF主要用于处理单个行的数据,将一行输入映射到一行输出。它们通常用于对单个列或多个列进行转换和计算,如计算平方根、字符串拼接、日期格式转换等操作。UDF可以接受零个或多个输入参数,并返回一个值。它们是Hive中最基本的自定义函数类型,适用于简单的数据转换、格式化和计算操作,尤其是在需要对列数据进行逐行处理时。
UDAF(User-Defined Aggregate Functions):
UDAF用于聚合数据,通常在GROUP BY子句中使用,将多行数据聚合成单个值。它们接受多行数据作为输入,返回单个聚合值,如计算平均值、求和、最大值、最小值等。UDAF可以与GROUP BY一起使用,也可以不使用,允许用户对数据进行分组聚合操作。它们允许用户在查询中汇总数据并生成一个单一的聚合结果。
UDTF(User-Defined Table-Generating Functions):
UDTF(User-Defined Table-Generating Functions),用户自定义生成函数。它就是输入一行输出多行的自定义算子,可输出多行多列,又被称为 “表生成函数”。(一对多)
UDTF用于生成多行数据,通常在查询中用于拆分、解析或转换数据,并生成多个输出行。它们接受输入参数,并生成一个或多个输出表格,每个表格包含多行数据。例如,将文本数据拆分成多行、将JSON数据展开为多个行等。
4万+

被折叠的 条评论
为什么被折叠?



