@SmartSi
Stay Hungry, Stay Foolish
展开
-
Hive 高分笔记
Hive 高分笔记原创 2022-11-20 15:59:49 · 1348 阅读 · 2 评论 -
Hive SQL 中的断点分组技术详解
断点分组(Breakpoint Grouping)是一种针对时间序列或状态连续性数据的分析技术,尤其适用于处理用户行为日志、设备状态记录等场景。在 Hive SQL 中,由于其分布式计算特性,断点分组的实现需要兼顾性能与逻辑简洁性。本文将深入探讨 Hive 中该技术的核心原理、多种实现方案、适用场景及优化策略。原创 2025-03-07 23:27:34 · 328 阅读 · 0 评论 -
Hive 实战:位图 Bitmap 系列-位图计算函数
ClickHouse 提供了一系列用于位图索引和计算的函数,这些功能特别适用于处理大量的分布式聚合,可以高效地进行复杂的位运算。而在 Hive 中没有内置的等效函数,我们可以通过创建用户自定义函数来实现。在这我们基于 RoaringBitmap 实现了一系列的位图函数。原创 2024-06-15 13:32:50 · 1228 阅读 · 0 评论 -
Hive 实战:位图 Bitmap 系列-group_bitmap UDAF 实现解析
在 ClickHouse 中,groupBitmap 函数用于从整数列聚合生成位图,常用于高效地进行复杂的位运算。而在 Hive 中没有内置的等效函数,我们可以通过创建一个用户自定义聚合函数(UDAF)来实现 groupBitmap。这里将详细介绍如何在 Hive 中实现一个类似 groupBitmap 的自定义函数,包括 UDAF 的定义、编译、注册以及使用步骤。原创 2024-06-10 12:44:33 · 1770 阅读 · 2 评论 -
Hive 实战:位图 Bitmap 系列-bitmap_and 函数实现解析
在 ClickHouse 中,bitmapAnd 函数用于计算两个位图 Bitmap 的交集,常用于高效地进行复杂的位运算。而在 Hive 中没有内置的等效函数,我们可以通过创建一个用户自定义函数(UDF)来实现 bitmapAnd。这里将详细介绍如何在 Hive 中实现一个类似 bitmapAnd 的 UDF,包括 UDF 的定义、编译、注册以及使用步骤。原创 2024-06-08 18:05:51 · 1388 阅读 · 0 评论 -
Hive 2.3.4 does not implement the requested interface org.roaringbitmap.BitmapDataProvider
错误信息提示 `org.roaringbitmap.RoaringBitmap` 没有实现所需的 `org.roaringbitmap.BitmapDataProvider` 接口原创 2024-05-22 07:45:03 · 114 阅读 · 0 评论 -
Apache Hive 通过 JDBC Storage Handler 联邦查询
如今,很多公司可能会在内部使用多种数据存储和处理系统。这些不同的系统解决了对应的使用案例。除了传统的 RDBMS (比如 Oracle DB,Teradata或PostgreSQL) 之外,我们还会使用 Apache Kafka 来获取流和事件数据。使用 Apache Druid 处理实时系列数据(real-time series data),使用 Apache Phoenix 进行快速索引查找。此外,我们还可能使用云存储服务或 HDFS 批量存储数据。转载 2023-07-31 09:22:41 · 226 阅读 · 0 评论 -
Hive 1.2.2 Unsupported major.minor version 51.0
Hive 1.2.2 Unsupported major.minor version 51.0原创 2023-02-28 23:48:03 · 144 阅读 · 0 评论 -
Hive 2.3.4 SemanticException [Error 10025]: Line 18:7 Expression not in GROUP BY key ‘xxx‘
Hive SemanticException [Error 10025]: Line 18:7 Expression not in GROUP BY key 'xxx'原创 2023-02-28 23:30:03 · 410 阅读 · 0 评论 -
Hive ROW_NUMBER TopN 性能优化
为使 Map 阶段中 Partition 各分组数据尽可能均匀,增加随机列,将其作为 Partition 中一参数。进行分组,并在每个分组内根据时间进行排序。如果某一个或者某几个频道有大量的用户访问,那么就会极易发生数据倾斜。那么怎么才能避免数据倾斜快速实现 TopN 呢?假设我们要查看每个频道下第一次出现的用户,常用解决方案会使用。原创 2023-02-17 22:42:06 · 669 阅读 · 0 评论 -
Hive 公用表表达式 CTE 使用指南
Common Table Expression(公用表表达式),简称 CTE,由 WITH 子句中指定的简单查询派生的临时结果集,用于简化 SQL。CTE 默认是不对数据进行物化,即相当于视图,只是为一个 SQL 语句定义了一个变量,每次使用这个 SQL 语句时只需要这个 SQL 变量即可。开发过程中结合 CTE,可以提高 SQL 语句可读性,便于轻松维护复杂查询。CTE 仅在单个语句的执行范围内定义。原创 2023-02-16 23:34:56 · 831 阅读 · 0 评论 -
Hive 排除 SELECT 中某列
在 Hive 表中可能存在很多列,也有可能就存在几列。如果我们想要表中所有列,毫无疑问我们可以使用SELECT *。但在某些情况下,我们可能拥有 100 多列,并且我们只不需要其中几列。在这种情况下,之前都是手动的添加SELECT查询中的所有列名。由于列数很多,比较啰嗦。因此,我们希望能在 Hive 中从 SELECT 查询中排除某些列。原创 2023-02-16 22:50:50 · 1580 阅读 · 0 评论 -
Hive SQL 行转列与列转行
Hive SQL 行转列与列转行原创 2023-02-15 00:03:13 · 160 阅读 · 0 评论 -
Hive SORT BY vs ORDER BY vs DISTRIBUTE BY vs CLUSTER BY
在这篇文章中,我们主要来了解一下 SORT BY,ORDER BY,DISTRIBUTE BY 和 CLUSTER BY 在 Hive 中的表现。原创 2023-02-12 22:04:18 · 139 阅读 · 0 评论 -
Hive 源码解读 Driver 语义分析器 SemanticAnalyzer
我们可以看到 AST 抽象语法树还是很抽象,不够结构化,并且也不携带表、字段相关的信息。为了方便翻译为 MapReduce 程序,AST 需要进一步的抽象和结构化转化为 QueryBlock,在这个过程中语义分析器 SemanticAnalyzer 起到了重要的作用。原创 2023-01-15 16:40:47 · 306 阅读 · 0 评论 -
Hive 如何实现钩子 Hooks
业界有许多开源的数据治理和元数据管理框架,可以在复杂的场景下满足元数据管理的需求。其中比较出名的 Apache Atlas 就是利用 Hive 的 Hooks 实现 Hive 的元数据管理。Hooks 是一种事件和消息机制,与插件机制比较类似,可以将事件绑定在 Hive 的执行流程中,而无需重新编译 Hive。根据不同的 Hook 类型,可以在不同的阶段触发运行。原创 2023-01-13 22:21:20 · 320 阅读 · 0 评论 -
Hive 源码解读 Driver 将 HQL 语句转换为 AST
Hive 使用 ANTLR3 实现 HQL 的词法和语法解析。ANTLR 是一种语言识别的工具,可以用来构造领域语言。这里不详细介绍 ANTLR,具体可以查阅ANTLR4 初识语法分析器生成工具 ANTLR。在这只需要了解使用 ANTLR 构造特定的语言只需要编写一个语法文件,定义词法和语法规则即可。ANTLR 通过词法分析器 (Lexer)、语法分析器 (Parser) 以及树分析器 (Tree Parser)等实现了词法分析、语法分析、语义分析、中间代码生成的过程。原创 2023-01-12 23:35:53 · 314 阅读 · 0 评论 -
Hive 源码解读 CliDriver HQL 命令处理
Hive 将 HQL 语句拆分为不同的 HQL 命令,最终交由 processCmd 方法来处理原创 2023-01-09 23:37:10 · 243 阅读 · 0 评论 -
Hive 源码解读 CliDriver HQL 语句拆分
Hive 版本:2.3.4原创 2023-01-08 23:29:11 · 200 阅读 · 0 评论 -
Hive 源码解读 CliDriver HQL 读取与参数解析
Hive 源码解读 CLI 入口 CliDriver 初始化工作原创 2022-12-27 23:24:45 · 203 阅读 · 0 评论 -
Hive 源码解读 CLI 命令解读
Hive 变量内部是以 Java 字符串的方式存储的,用户可以在查询中引用变量。命令在 hivevar 命名空间自定义变量,两者是等价的,都可以让用户在命令行中自定义用户变量以便在 Hive 脚本中引用。变量和属性是在不同的上下文中使用的术语,但是在大多数情况下它们的功能是相同的。通过上面语句可以发现 dt 属性是定义在 hiveconf 命名空间下的,而不是定义在 hivevar 命名空间下。通过 SET 查看 dt 的值可以发现变量 dt 是定义在 hivevar 命名空间下的。原创 2022-12-23 20:21:50 · 733 阅读 · 0 评论 -
Hive 通过 Jdbc 连接 HiveServer2
如果想通过 JDBC 来访问 HiveServer2,需要开启 HiveServer2 服务原创 2022-12-21 21:12:40 · 974 阅读 · 0 评论 -
Hive 源码解读 准备篇 Debug 讲解
使用 Hive 执行 HQL 查询时遇到 bug,解决办法无非几种,explain HQL、查看日志、远程 Debug,本文就将详细讲解如何使用 Idea 远程 Debug。原创 2022-12-21 09:38:37 · 560 阅读 · 1 评论 -
Hive 3.1.3 编译出错 ldap-client-api:jar:0.1-SNAPSHOT 获取不到
顶层中存在一个 org.apache.directory.client.ldap:ldap-client-api,使用的是 0.1 版本,但 org.apache.directory.server:apacheds-server-integ 中也存在一个 org.apache.directory.client.ldap:ldap-client-api,版本为 0.1-SNAPSHOT,并且因为编译时找不到而失败。这个问题在 4.0.0-alpha-1 得到解决,具体可以查看。原创 2022-12-18 21:04:28 · 546 阅读 · 0 评论 -
Hive 3.1.2 编译出现 Unknown host snapshots.maven.codehaus.org
错误的原因是 codehaus 服务器关闭,网页 http://snapshots.maven.codehaus.org/maven2/ 打不开。Hive 可以编译了。转载 2022-12-18 10:39:36 · 280 阅读 · 0 评论 -
深入理解 Hive UDAF
用户自定义聚合函数(UDAF)支持用户自行开发聚合函数完成业务逻辑。从实现上来看 Hive 有两种创建 UDAF 的方式,第一种是 Simple 方式,第二种是 Generic 方式。} }AbstractGenericUDAFResolver 提供了一种简单的方法将以前实现 GenericUDAFResolver 接口的 UDAF 迁移到 GenericUDAFResolver2 接口上。原创 2022-11-21 14:35:49 · 1436 阅读 · 0 评论 -
Hive Count Distinct 优化
我们利用 Hive 对嵌套语句的支持,将原来一个 MapReduce 作业转换为两个作业,在第一阶段选出全部的非重复 id,在第二阶段再对这些已去重的 id 进行计数。本文我们就来分析一个简单语句的优化过程。我们看到作业运行时的 Reduce Task 个数为1,对于统计大数据量时,这会导致最终 Map 的全部输出由单个的 Reduce Task 处理。从上述优化过程我们可以看出,一个简单的统计需求,如果不理解 Hive 和 MapReduce 的工作原理,它可能会比优化后的执行过程多四、五倍的时间。转载 2022-11-11 22:33:14 · 1315 阅读 · 0 评论 -
Hive 分桶 Bucket
通常 Hive 中的分区功能提供了一种将 Hive 表数据分隔成多个文件/目录的方法。当只有有限个分区,分区大小差不多大情况下,分区会产生不错的效果。但在有些情况下并不能如我们所愿,比如,当我们根据国家对表进行分区时,一些较大的国家会有较大的分区(例如:4-5个国家就占总数据的70-80%),然而一些小国家分区会比较小(剩余的所有国家可能只占全部数据的20-30%)。Hive 中的分区提供了一个隔离数据和优化查询的便利方式,不过并非所有的数据都可形成合理的分区,例如,上面的情形。原创 2022-11-11 08:17:15 · 1123 阅读 · 0 评论 -
Hive 如何使用 Grouping Sets
这篇文章描述了 SELECT 语句 GROUP BY 子句的增强聚合功能 GROUPING SETS。GROUPING SETS 子句是 SELECT 语句的 GROUP BY 子句的扩展。通过 GROUPING SETS 子句,你可采用多种方式对结果分组,而不必使用多个 SELECT 语句来实现这一目的。这就意味着,能够减少响应时间并提高性能。...原创 2022-08-13 22:23:08 · 698 阅读 · 0 评论 -
Hive 如何实现自定义函数 UDF
当 Hive 提供的内置函数无法满足你的业务处理需要时,此时可以考虑使用用户自定义函数 UDF 来满足不同的计算需求。UDF 在使用上与普通的内建函数类似。原创 2022-08-07 14:55:56 · 646 阅读 · 0 评论 -
Hive 2.3.4 Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
从上面的异常信息 Could not connect to meta store using any of the URIs provided,我们可以知道 Hive 连接 MetaStore 失败,所以需要判断一下 Metadata 服务是否在运行。原创 2022-08-07 14:26:35 · 454 阅读 · 0 评论 -
Hive 2.3.4 Name node is in safe mode. The reported blocks xxx has reached the threshold 0.9990 of to
在启动 Hive 时抛出如下异常:2. 分析HDFS 在启动开始时会进入安全模式,这时文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个 DataNode上 数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。可以等待其自动退出安全模式,也可以使用手动命令来离开安全模式:...原创 2022-08-07 09:26:13 · 549 阅读 · 0 评论 -
Hive 安装与配置
可以从 http://hive.apache.org/downloads.html 下载你想要的版本,在这我们使用的是2.3.7版本。由于上一步骤已经配置了环境变量,我们可以在任意目录下。这里我们使用 MySQL 存储 Hive 元数据。Mac 操作系统、Hive 2.3.7 版本。现在我们完成了 Hive 安装与配置。创建存储 Hive 元数据的数据库。在这我们已经提前下载好驱动包。...原创 2022-08-06 17:22:29 · 409 阅读 · 0 评论 -
在 Zeppelin 中如何使用 Hive
1. 准备工作我们来看看强大的 Zeppelin 能够给 Hive 带来什么吧。首先需要安装 Hive 和 Zeppelin。具体请参考如下两篇文章:Zeppelin 安装与初体验Hive 安装与配置完成以上步骤我们才能进行下一步。2. Hive 服务HiveServer2 是一种可选的 Hive 内置服务,可以允许远程客户端使用不同编程语言向 Hive 提交请求并返回结果。在 Zeppelin 中使用 Hive,也需要开启 HiveServer2 服务:hive --service hi原创 2022-05-29 15:05:38 · 618 阅读 · 0 评论 -
Hive 元数据服务 MetaStore
1. 概念MetaSore 是 Hive 元数据存储的地方。Hive 数据库、表、函数等的定义都存储在 MetaStore 中。根据系统配置方式,统计信息和授权记录也可以存储在这。Hive 或者其他执行引擎在运行时可以使用这些数据来确定如何解析,授权以及有效执行用户的查询。MetaStore 分为两个部分:服务和后台数据的存储。2. 配置参数这里只会展示与 MetaStore 相关的配置参数,与 MetaSote 不相关的配置参数可以在这查阅。配置参数参数说明hive.metas原创 2022-04-26 23:27:20 · 7557 阅读 · 0 评论 -
Hive Join 优化之 Map Join
1. Join 如何运行首先,让我们讨论一下 Join 如何在 Hive 中运行。Common Join 操作如下图所示被编译为 MapReduce 任务。Common Join 任务涉及 Map 阶段和 Reduce 阶段。Mapper 从 Join 表中读取数据并将 Join 的 key 和 value 以键值对形式输出到中间文件中。Hadoop 在 Shuffle 阶段对这些键值对进行排序和合并。Reducer 将排序结果作为输入,并进行 Join。因为在 Shuffle 阶段需要排序和合并,因此代原创 2021-11-07 13:59:20 · 672 阅读 · 0 评论 -
[Hive]JsonSerde使用指南
注意:重要的是每行必须是一个完整的JSON,一个JSON不能跨越多行,也就是说,serde不会对多行的Json有效。 因为这是由Hadoop处理文件的工作方式决定,文件必须是可拆分的,例如,Hadoop将在行尾分割文本文件。// this will work{ "key" : 10 }// this will not work{ "key" : 10 }2. 下载Jar使用之前先下载翻译 2017-04-14 11:03:29 · 7856 阅读 · 1 评论 -
[Hive]Union使用指南
1. union语法select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement ...UNION将多个SELECT语句的结果集合并为一个独立的结果集。当前只能支持UNION ALL(bag union)。不消除重复行。每个select语句返回的列的数量和名字必须一样翻译 2017-03-07 20:37:05 · 25393 阅读 · 0 评论 -
Hive Lateral View 使用指南
1. 语法lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*fromClause: FROM baseTable (lateralView)*2. 描述Lateral View一般与用户自定义表生成函数(如explode())结合使用。 如内置表生成函数中所述,UDTF为每原创 2017-03-17 19:07:25 · 38906 阅读 · 3 评论 -
[Hive]窗口函数与分析函数
本文介绍了用于窗口函数和分析函数的Hive QL增强功能。所有窗口和分析函数操作都按照SQL标准。 当前版本支持以下窗口函数和分析函数:1 窗口函数LEAD 返回分区中当前行后面行(可以指定第几行)的值。 如果没有行,则返回NULL。LAG 返回分区中当前行之前行(可以指定第几行)的值。 如果没有行,则返回NULL。FIRST_VALUE 返回相对于窗口中第一行的指定列的值。LAST_VALUE翻译 2017-02-22 14:24:52 · 3144 阅读 · 0 评论