Hive 实战
文章平均质量分 85
数据仓库已经是企业的数据竞争的核心了,学好数据仓库对提高自己和找到一份好的工作都至关重要,但是很多人对数仓的印象还是停留在写SQL的层面,其实今天的数仓更像是一个数据平台应用,本专栏主要专注于数仓工具学习、数仓建模以及业务建模、SQL 实战和平台建设,最后以3家公司的数仓建建设和实时数仓作为结尾项目
不二人生
刀光剑影江湖情,摧枯拉朽浪滔滔。功名利禄拂衣去,山高水远路迢迢。一个上得了厅堂下得了厨房、左手写诗右手写词的男人
展开
-
数据仓库实战教程
以hadoop 作为基础生态,从0到进行数仓建设,主要分为基础篇和实战篇两部分,基础篇主要是各种组件的学习和案例,实战篇主要是三家企业的数仓设计案例,最后是扩展篇主要是实时数仓。原创 2022-02-16 16:11:19 · 53565 阅读 · 0 评论 -
数仓工具—Hive语法之URL 函数
URL 的解析函数,在我们进行流量分析的时候其实非常有用,否则的话我们可能需要借助正则匹配来完成这样的功能。原创 2024-09-05 10:31:40 · 462 阅读 · 0 评论 -
数仓工具—Hive语法之替换函数和示例
rlike regexp 是一样的,都是正则匹配REGEXP_REPLACE 是正则替换REGEXP_REPLACE 是正则提取Translate 是字符替换like 是字符匹配,有自己的语法。原创 2024-07-16 19:11:42 · 34629 阅读 · 0 评论 -
数仓工具—Hive语法之事务表更新Transactional Table Update
在本文中,我们将讨论如何在 Hive 事务性表上使用更新连接。您可以使用 merge 语句作为 Hive 更新连接的替代方案。您也可以在不设置 ACID 属性的情况下更新 Hive 表。Apache Hive 支持涉及您正在更新的单张表的简单更新语句。您可以在 SET 子句中仅使用静态值使用 Hive 更新语句。例如,考虑以下使用两张表的更新语句。这类语句称为更新连接条件。例如,考虑以下示例,使用 MERGE 语句作为使用连接条件更新表的替代查询。实际上,更新语句要复杂得多,涉及两张或更多表。原创 2024-07-16 09:17:34 · 33451 阅读 · 0 评论 -
数仓工具—Hive语法之宏(Macro)
Hive中的宏是一组SQL语句,它们被存储并通过调用宏函数名称来执行。宏在当前会话期间存在。宏是临时的,如果你想拥有永久性的宏,最好创建用户定义的函数并在Hive中注册。在关系数据库管理系统(RDBMS)中,宏存储在数据字典中。Hive宏与关系型数据库中的宏略有不同。在我的其他文章中,我们讨论了如何使用用户定义的函数检查一个字符串是否为数字。然而,你也可以通过创建Hive宏来实现相同的功能。请注意,错误是因为参数’inputString’中的大写’S’以及表达式中的大写。,如何使用它们,以及一些宏的示例。原创 2024-07-15 16:02:21 · 33632 阅读 · 0 评论 -
数仓工具—Hive基础之临时表及示例
临时表是应用程序自动管理在大型或复杂查询执行期间生成的中间数据的一种便捷方式。Hive 0.14 及更高版本支持临时表。可以在用户会话中像使用普通表一样多次使用它们。在本文中,我们将介绍,以及如何创建和使用限制的示例。是限于用户会话的。您可以在用户会话中多次重复使用临时表。Hive 在创建它们的 Hive 会话结束时自动删除所有临时表。临时表中的数据存储在用户的临时目录而不是 Hive 仓库目录中。通常,位置将是。原创 2024-07-14 10:38:08 · 33089 阅读 · 0 评论 -
数仓工具—Hive进阶之常见的StorageHandler(24)
通过 JDBC 驱动程序,允许用户在Hive中创建表,并通过Hive查询引擎执行 SQL 查询,将查询传递到底层的关系型数据库。通过直接使用 JDBC 与底层数据库通信,实现了高效的数据传递。这样的效率保证了数据在Hive和关系型数据库之间的快速交互。使用常见的StorageHandler 可以在我们做数据集成的时候,可以极大的方便我们完成数据的交互。原创 2024-01-06 11:51:01 · 34943 阅读 · 0 评论 -
数仓工具—Hive进阶之StorageHandler(23)
当在Apache Hive中定义和操作表时,涉及到的数据的输入和输出以及数据的序列化和反序列化都需要明确定义,这就是 InputFormat、OutputFormat 和 SerDe 的作用。存储处理程序通过指定合适的 InputFormat、OutputFormat 和 SerDe,定义了与特定存储系统的交互方式。这种设计使得Hive能够适应各种存储系统,并提供了灵活性和可扩展性用于与Hadoop分布式文件系统(HDFS)集成。用于与HBase NoSQL数据库集成。原创 2024-01-06 11:17:35 · 35411 阅读 · 0 评论 -
数仓工具—Hive实战之GenericUDF使用详解(24)
GenericUDF 使用起来相比UDF 更复杂,但是我们也介绍了它支持复杂数据结构,性能更高,需要注意的是GenericUDF是抽象类不是接口,关于GenericUDF的使用的复杂案例可以参考我们的UDAF批量调用外部请求。原创 2023-02-08 12:29:28 · 38594 阅读 · 0 评论 -
数仓工具—Hive集成篇之UDF写ES(04)
遇到一个问题,让人很无语,前面其实我们介绍过Hive 写ES 或者是Hive 数据导出到ES 的方案,其实基本上就是两类但是今天遇到的这个场景,这两种方法都不太合适,我们的场景是在阿里云上的maxcompute 将数据写到华为云上的elasticsearch,maxcompute 由于是阿里云的基础组件由于阿里云提供了数据集成组件,所以maxcompute根本就不支持外部表,其实我们第一时间想到的就是那直接使用阿里云的数据集成工具不就好了嘛,问题是阿里云的集成工具对elasticsearch的支持只支持阿里原创 2022-11-25 20:58:46 · 38444 阅读 · 0 评论 -
数仓工具—Hive实战之生成连续序列(23)
其实我们看到生成序列的本质是要借助一串数字序列,然后在这个基础上通过一些运算来生成日期序列或者字母序列等生成数字序列我们借助posexplode 函数+space 函数。原创 2022-10-28 20:48:00 · 38817 阅读 · 0 评论 -
数据仓库实战教程
以hadoop 作为基础生态,从0到进行数仓建设,主要分为基础篇和实战篇两部分,基础篇主要是各种组件的学习和案例,实战篇主要是三家企业的数仓设计案例,最后是扩展篇主要是实时数仓。原创 2020-12-28 09:19:07 · 189991 阅读 · 18 评论 -
数仓工具—Hive语法之连续full join主键重复(24)
这一节主要介绍了full join 下关联主键重复的问题第一个问题就是严格限制关联条件顺序的情况下,结果还是不对的问题暂时没有找到原因,但是我们可以通过合并去重的方案第二个问题就是我们的关联条件有问题,我们可以通过严格限制关联条件顺序 和合并去重的方案 解决最后就是我们最初的问题没有解决,因为这个SQL 在很多其他类型数据库或者MPP都是返回两条结果,即使在本地的Hive 上也返回两条结果,但是在生产上返回三条,奇怪的是我们稍加改造,也就是将关联键由改成2的时候结果是正确的,所以这个问题暂时放着吧。原创 2022-10-12 12:20:13 · 39288 阅读 · 0 评论 -
数仓工具—Hive源码之SQL解析AntlrWorks的使用(10)
AntlrWorks 就是Antlr的一个idea ,提供了开发(editor),测试(interpreter),调试(debugger),以及代码生成的功能,其中调试是idea 的Antlr插件不具备的。到今天我们的工具就介绍完了,后面我们就可以专心的学习Antlr以及SQL解析了。原创 2022-09-30 10:33:18 · 40702 阅读 · 0 评论 -
数仓工具—Hive源码之SQL解析的应用SQL优化(9)
数据库作为核心的基础组件,是需要重点保护的对象。无用条件去除属于优化器的逻辑优化范畴,可以仅仅根据SQL本身以及表结构即可完成,其优化的情况也是较多的,代码在sql/sql_optimizer.cc文件中的remove_eq_conds函数。首先回顾在词法解析章节,我们介绍了SQL中的关键字,并且每个关键字都有一个16位的整数对应,而非关键字统一用ident表示,其也对应了一个16位整数。最近,在对SQL解析器和优化器探索的过程中,从一开始的茫然无措到有章可循,也总结了一些心得体会,在这里跟大家分享一下。原创 2022-09-28 12:39:57 · 41781 阅读 · 1 评论 -
数仓工具—Hive源码之SQL解析Antlr进阶(8)
我们这里总结一下使用Antlr 的一个流程步骤基于需求按照ANTLR4的规则编写自定义语法的语义规则, 保存成以g4为后缀的文件。使用ANTLR4工具处理g4文件,生成词法分析器、句法分析器代码、词典文件。编写代码继承Visitor类或实现Listener接口,开发自己的业务逻辑代码。其实我们看到最重要的就是实现Visitor接口,因为我们的逻辑在里面Listener模式通过walker对象自行遍历,不用考虑其语法树上下级关系。......原创 2022-08-30 11:38:40 · 40186 阅读 · 0 评论 -
数仓工具—Hive源码之SQL解析Antlr入门(7)
ANTLR 是 ANother Tool for Language Recognition的首字母,是一个语言类工具,主要充当翻译器、编译器、识别器、或者是分析器这样的一个角色,也就是将一些列规则翻译成特定语言代码(Java, C/C++, C#, Python, Ruby)的一个工具。说直白点就是定义语法规则文件—>生成特定语言解析规则文件的代码—>被特定的语言所识别,想想我们的Hive-Sql 是不是就是这样的,不然SQL怎么转化成MR程序。Antlr (ANother Tool for Langua原创 2022-08-27 10:51:14 · 40062 阅读 · 0 评论 -
数仓工具—Hive源码之SQL 解析(6)
从上述整个SQL编译的过程,可以看出编译过程的设计有几个优点值得学习和借鉴使用Antlr开源软件定义语法规则,大大简化了词法和语法的编译解析过程,仅仅需要维护一份语法文件即可。整体思路很清晰,分阶段的设计使整个编译过程代码容易维护,使得后续各种优化器方便的以可插拔的方式开关,譬如Hive 0.13最新的特性Vectorization和对Tez引擎的支持都是可插拔的。每个Operator只完成单一的功能,简化了整个MapReduce程序。原创 2022-08-24 20:56:34 · 40341 阅读 · 4 评论 -
数仓工具—Hive语法之join 扩展(23)
这一节其实主要是对join 的扩展,更多与join 相关的可以参考文章中的链接。原创 2022-08-22 09:08:31 · 40910 阅读 · 0 评论 -
数仓工具—Hive语法之Merge 语句(22)
这一节又我们学习了Hive的另外一个语法Merge,同时我们提供相关的同等替代语句,语法的学习很简单,那就是多练习。原创 2022-08-20 10:59:44 · 41877 阅读 · 0 评论 -
数仓工具—Hive进阶之性能优化最佳实践(22)
对Hive 表进行分区分桶选择合适文件存储格式避免产生大量小文件合适的表设计优化查询的SQL(尤其关联Join)使用TEZ 或者Spark 引擎来替代MR使用CBO优化器使用VECTORIZATION需要注意的是我们在文章中关于每个知识点,都扩展了相关的文章进去,如果想进一步了解,可以自行查阅。...原创 2022-08-17 13:42:34 · 40726 阅读 · 0 评论 -
数仓工具—Hive进阶之表设计最佳实践(21)
这一节我们总结了一些表设计相关的最佳实践,当然我们针对具体的业务场景的时候也可以有其他的一些建表实践,但我们这里主要关注通用场景,主要有选择合适的存储格式选择合适的压缩分区表分桶表。...原创 2022-08-17 09:52:43 · 39163 阅读 · 0 评论 -
数仓工具—Hive进阶之Statistics与Analyze Table命令(20)
主要介绍了统计信息(表/分区)的用途,以及统计信息如何收集,当然最主要的还是给hive 优化器使用。原创 2022-08-16 17:20:46 · 41332 阅读 · 0 评论 -
数仓工具—Hive进阶之查询最佳实践(19)
使用列名替代 * , 使用SORT BY 替代ORDER BY ,使用CBO 并且更新 Stats ,使用WHERE 替代HAVING过滤非统计字段,避免在谓词中使用函数原创 2022-08-15 17:00:38 · 40436 阅读 · 0 评论 -
数仓工具—Hive基础之报错后退出执行(24)
HiveCli和Beeline 给我们提供了执行SQL 文件执的功能,这时候我们就会将很多SQL写在一个文件中,然后执行批量SQL 文件,但是这个过程中如果前面的一个SQL 报错了,会发生什么?或者是如果执行过程中如果报错了,我们希望指定能停止执行,接下来我们就看一下如何在HiveCli和Beeline实现这一特性。hive.cli.errors.ignore 是Hive的一个命令行参数,参数值是True/False,当该参数是True的时候,会继续执行SQL 文件即使有SQL 报错了,否则执行报错的时原创 2022-07-11 16:14:17 · 43832 阅读 · 0 评论 -
数仓工具—Hive进阶之MultiDelimitSerDe(18)
Hive中的 InputFormat和 OutputFormat我们讲了,Hive的SerDe 我们也讲了,可以参考前面的文章Hive进阶之SerDeHive进阶之 InputFormat 和 OutputFormat我们今天单独介绍一个SerDe,它就是 MultiDelimitSerDe,单独介绍它是因为它比较特殊,前面我们也提到过,今天我们仔细看一下他的用法。你在Hive的项目里搜索MultiDelimitSerDe类,你会发现它处在hive-contrib模块,我们在hive的编译安装的环节说过,这原创 2022-07-10 11:07:58 · 43937 阅读 · 0 评论 -
数仓工具—Hive进阶之InputFormat和OutputFormat(17)
今天我们看一下Hive中的 InputFormat和 OutputFormat,前面我们在讲的时候也提到了,可以参考前面的文章 Hive进阶之SerDe,其实在前面的文章中我们已经提到了 InputFormat OutputFormat和Serde 之间的关系。Hive 的 outputformat/inputformat 与 hadoop 的 outputformat/inputformat 相当类似, inputformat 负责把输入数据进行格式化,然后提供给 hive , outputformat原创 2022-07-09 20:19:58 · 44295 阅读 · 0 评论 -
数仓工具—Hive集成篇之Kafka(03)
这个方案很多,随便举几个例子,但是在此之前建议你先阅读优化实战篇—UDAF批量调用外部请求(02) 在这篇文章中我们实现了在UDAF 中实现了多线程。不过今天我们介绍两种我们我们不需要引入其他组件就可以搞定的方案下面是我们的代码,主要是UDAF 进行批量数据发送下面是我们的使用,这样我们就记录下了每一批数据的发送情况这里需要处理的就是我们如何保证每个批次的大小,其实这个很简单,可以参考我们以前的文章,这里需要注意的是,我们一个批次不应该太大,如果太大重试成本就很高了。要实现KafkaStorageHan原创 2022-06-12 21:36:33 · 46281 阅读 · 4 评论 -
数仓工具—Hive集成篇之ClickHouse(02)
Hive 整合ClickHouse看官方文档说clickhouse现在支持HDFS和AWS S3作为数据存储的仓库,如果是这样的话,那就意味着基于clickhouse也可以实现"存储与计算分离"的架构设计了,那自然对于整个系统的可靠性和可扩展性是有极大帮助的。这里我们先看一下Hive 整合ClickHouse常见的方案方案一 HDFS引擎表按照ClickHouse 官方文档提供的方法,在ClickHouse 中创建HDFS引擎表,读取Hive的数据,将读取的数据插入到ClickHouse本地表中。原创 2022-05-19 21:11:16 · 48736 阅读 · 0 评论 -
数仓工具—Hive进阶之各种join 的执行计划(16)
Hive join 的执行计划今天我们接着学习hive 的执行计划,我们知道join 是我们在hive 中非常常见的一种操作,而且掌握它也是hive 性能调优的一个重要环节,今天我们来看一下hive 各种join 的执行计划。关于执行计划可以参考前面的文章:Hive进阶之执行计划Shuffle Join(Common Join)Shuffle Join 是一个Join的一个默认选项,它包含map stage 和 reduce stageMapper: 读取表数据并且输出关联的 key-value原创 2022-05-02 22:50:05 · 48762 阅读 · 0 评论 -
数仓工具—Hive语法之with扩展(21)
with 扩展其实前面我们已经讲过这个语法了,你可以参考Hive语法之with as和from,那为什么我们今天还要拿出来讲一次呢。我们总结一下这个语法的特点:with…as也叫做子查询部分,该语句允许hive定义一个SQL片段,供整个SQL 使用,有点类似变量或者视图可以简化我们的SQL,尤其我们多次使用的场景除了简化我们的SQL,而且还会将这个片段产生的结果集保存在内存中,后续的SQL均可以访问这个结果集,左右有点像物化视图或者是临时表,从而提高我们的查询性能。这里提到了一个概念物化视图,你原创 2022-04-29 22:16:23 · 50064 阅读 · 4 评论 -
数仓工具—Hive实战之UDF汉字首字母(22)
UDF 汉字首字母今天这个业务背景其实很简单,就是公司有很多品牌,我们要提取每个名牌的第一个汉字的首字母,例如"宝马"就是 B , 然后"福特" 就是F,“长安” 就是C 。业务背景差不多就是这样的,关于UDF 我就不再过多介绍了,已经介绍过无数次了,你可以参考前面的文章Hive实战之UDF分词Hive实战之UDF解析IP地址Hive实战之UDF 加密Hive 实战之UDF 复杂JSON 处理所以这里我们直接上代码,出解决思路就可以了pinyin4j 获取汉字的拼音pinyin4j是一原创 2022-04-11 14:54:24 · 50678 阅读 · 0 评论 -
数仓工具—Hive实战之UDF 复杂JSON 处理(21)
UDF 复杂JSON 处理这个的背景和我们前面的复杂JSON 处理是一样的,起源于我们将数据推送到ES ,不然的话我们直接存储字符串,然后使用hive 提供的json 解析函数处理就好了。阅读之前建议你阅读:[ Hive语法之json 解析](https://blog.csdn.net/king14bhhb/article/details/111999201) Hive语法之复杂json解析处理 Hive集成篇之ES方便你了解这个背景,以及我们为什么要这么做,我们在复杂js原创 2022-04-03 12:55:18 · 51039 阅读 · 0 评论 -
数仓工具—Hive实战之UDF 加密(20)
UDF 加密其实加密或者脱敏是我们使用UDF 非常常见的一种场景,本质上都是为了数据安全,加密例如我们对用户的基本信息加密,脱敏例如我们对用户的手机号码进行脱敏。更多UDF 可以参考我们前面的文章:Hive实战之UDF分词Hive实战之UDF解析IP地址常见的加解密算法开始直接我们先看一下常见的加解密算法以及它们的特点Base64 可逆不安全Base64不是安全领域下的加解密算法,只是一个编码算法,通常用于把二进制数据编码为可写的字符形式的数据,特别适合在http,mime协议下的网原创 2022-04-03 10:39:01 · 51343 阅读 · 0 评论 -
数仓工具—Hive集成篇之ElasticSerach(01)
hive 整合 eshive 整合 es 其实主要指的是,我们将hive里面的数据导出到ES,同理我们也可以使用hive 读取ES 里面的数据,下面我们就看一下如何实现,其实我们依赖的还是EsStorageHandler,这是elasticsearch官方给我们提供的这样一个依赖。添加相关以来jar包add jar /tmp/elasticsearch-hadoop-7.8.1/dist/elasticsearch-hadoop-7.8.1.jar;其实这个时候如果你遇到下面的包找不到问题Err原创 2022-03-30 17:21:04 · 50348 阅读 · 0 评论 -
数仓工具—Hive语法之复杂json解析处理(20)
复杂json解析处理其实前面我们写过json 的处理,可以参考 Hive语法之Json 数据处理,但是我们今天为什么又要提呢,事情的起因是要把数据导入到ES里面去,要导入的数据是算法处理的结果,是一个比较复杂的JSON。我直接将这个字段存储成了一个字符串,但是导入到ES 后傻眼了,发现这个格式在ES 里面并不能被解析,直接当成了一个字符串,我的数据如下{ "success":true, "status":200, "msg":"执行成功", "data":{原创 2022-03-28 22:45:39 · 50832 阅读 · 0 评论 -
数仓工具—Hive进阶之锁(15)
Hive中的锁Hive 锁机制是为了让 Hive 支持并发读写而设计的 ,另外要解决并发读写的情况下”脏读“ (Read uncommited)的问题。脏读的问题本身通过实现了原子的 reader/writer 已经得到解决(https://issues.apache.org/jira/browse/HIVE-829)和锁机制并不绑定。关闭锁机制可以通过设置 hive.support.concurrency=fasle 来解决锁的问题关闭锁机制会造成下面影响:并发读写同一份数据时,读操作可能会随原创 2022-02-26 12:25:44 · 52470 阅读 · 0 评论 -
数仓工具—Hive进阶之MSCK(14)
MSCKMSCK REPAIR TABLE命令主要是用来解决通过hdfs dfs -put或者hdfs api写入hive分区表的数据在hive中无法被查询到的问题。我们知道hive有个服务叫metastore,这个服务主要是存储一些元数据信息,比如数据库名,表名或者表的分区等等信息。如果不是通过hive的insert等插入语句,很多分区信息在metastore中是没有的。MSCK命令Hive stores a list of partitions for each table in its met原创 2022-02-26 12:00:17 · 53226 阅读 · 0 评论 -
数仓工具—Hive进阶之归档(13)
归档读者交流群已经开通了,有需要的可以私信进入读者交流群由于 HDFS 的设计,文件系统中文件的数量直接影响 namenode 中的内存消耗。虽然通常对于小型群集而言不是问题,但是当文件数大于 50 到 1 亿时,内存使用量可能会达到一台计算机上可访问内存的限制。在这种情况下,具有尽可能少的文件是有利的。关于这一点我们前面也提到过一个解决方案那就是处理小文件,你可以参考Hive进阶之优化小文件问题使用Hadoop Archives是减少分区中文件数量的一种方法。 Hive 具有内置支持,可将现有原创 2021-11-24 11:25:10 · 68746 阅读 · 0 评论 -
数仓工具—Hive进阶之谓词下推(12)
谓词下推听到谓词下推这个词,是不是觉得很高大上,找点资料看了半天才能搞懂概念和思想,借这个机会好好学习一下吧。首先我们要了解什么是谓词。谓词,用来描述或判定客体性质、特征或者客体之间关系的词项。也就是判断什么是什么或者不是什么的词。在SQL中,谓词就是返回boolean值即true和false的函数,或是隐式转换为boolean的函数。SQL中的谓词主要有 LKIE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS、=、!=谓词下推的两个层面引用范欣欣大佬的博客中写道,以原创 2021-11-23 12:33:33 · 69118 阅读 · 0 评论