- 博客(39)
- 资源 (43)
- 收藏
- 关注
原创 Kafka一天一个小问题:Kafka为什么查询速度快
Kafka为什么查询速度快分段Kafka解决查询效率的手段之一是将数据文件分片,数据文件以该段中最小的offset命名。这样在查找指定offset的Message的时候,用二分查找就可以定位到该Message在哪个段(segment)中。稀疏索引为了进一步提高查找的效率,Kafka为每个分段后的数据文件建立了索引文件,文件名与数据文件的名字是一样的,只是文件扩展名为.index。索引包含两个部分(均为4个字节的数字),分别为相对offset和position。index文件中并没有为
2021-08-31 13:03:04 331
原创 kafka一天一个小问题:Kafka和SparkStreaing如何集成?
package com.wedoctor.spark.dstreamimport java.sql.{Connection, PreparedStatement}import com.wedoctor.spark.utils.{DruidConnectionPool, OffsetUtils}import org.apache.kafka.clients.consumer.ConsumerRecordimport org.apache.kafka.common.TopicPartitio..
2021-08-31 12:56:46 178
原创 HQL一天一个小技巧:如何解决NULL值引发的数据倾斜
目录0 需求描述1 问题解决2 小结0 需求描述实际业务中有些大量的null值或者一些无意义的数据参与到计算作业中,表中有大量的null值,如果表之间进行join操作,就会有shuffle产生,这样所有的null值都会被分配到一个reduce中,必然产生数据倾斜。1 问题解决(1)问题剖析疑问:NULL值和需要匹配的字段根本就匹配不上,为什么会进入到同一个reduce?数据放到同一个reduce中的原因不是因为字段能不能join上,而是因为shuffle阶段的数据分发操作
2021-08-31 11:32:50 1446 4
原创 SQL进阶技巧:如何判断某个字符是否在字符串中
我们知道locate()函数可以判断某个字符在字符串中的位置,如果不在该字符串中返回0值,如果在返回字符对应的索引位置。(3)用regexp正则匹配。注意此时regxp()里面的正则为。由测试的结果看:locate()>regexp()>like。(1)用locate()函数判断【推荐比较高效】(2)用like正则匹配【不推荐,效率低】返回true值表示包含,存在要找的字符。返回值为1说明大于0,表示存在或包含。过滤出字符串中包含某字符的数据。(2)like模糊匹配测试。
2021-08-27 17:36:50 6771
原创 SQL高阶技巧:一种中位数的分析技巧及思路
本文给出了一种利用SQL求取中位数的非常规思路,主要利用中位数连续序列的特性及取值的位置特性,构造其位置公式求解,本题的解法给求解中位数的问题提供了简洁的方法。abs(rn - (cnt+1)/2) < 1 或abs(rn - (cnt+1)/2) < =1/2。rn是给定长度为cnt的数列的序号排序。
2021-08-26 23:29:47 1757
转载 上亿用户连续一周活跃用户数统计
需求: 上亿个用户,统计一周内连续活跃用户100000000/8/1024/1024 = 11.9M 一个bitmap占用 不到12M好在一周只有7天, 我们用7个key的bitmap来存储状态即可,加上最后的一个结果res的bitmap: 12*8=100M 内存即可!遵循下面步骤即可:用户编号是前提, 每个用户的编号从1到n(n=就是说的那个上亿的最大值); 声明7个bitmap, 从周一到周日: mon tue wed thur fri sat sun; 每个用户编号所在的of
2021-08-26 16:57:28 721
原创 SQOOP同步数据原理
1 SQOOP作用简单一句话概括就是sqoop是用来各个数据库之间进行数据迁移使用的。Sqoop作为数据传输的桥梁,通过定义MapReduce的InPutFormat和OutPutFormat来对接源存储和目的存储。2 基本原理(1)整个Sqoop的迁移过程,都会对应着一个MapReduce作业,实际上只有Map阶段,没有reduce阶段,而迁移大致分为5个部分,如下所示。「Initializer」:整个Sqoop迁移的初始化阶段,完成迁移前的准备工作,如连接数据源,创建临时表,添加依赖
2021-08-25 21:48:42 1140 5
原创 Hive Distribute by 应用之动态分区小文件过多问题优化
本文分析了一种由动态分区产生小文件的或是集群中小文件过多的一种解决方案,采用distribute by cast(rand()*N as int)这一方式能很好的解决集群小文件问题,起到了优化作用。对于使用SparkSQL的用户来说,SparkSQL提供了repartition算子来解决这一问题,在这里其实repartition和distribute by的作用一致,在Spark 2.4.0版中提供了Hive中类似的Hint语法...
2021-08-25 16:40:08 6352 3
原创 通俗易懂的数仓拉链表设计模式详解
例如:物联网场景PHM项目中的 ,阈值表,阈值表存储在MYSQL中,其每个参数的阈值会通过手工输入的形式进行更新,但是更新的频度比较慢,有时候一月或半年,会随着时间的变化人工动态去通过界面设置这个阈值,而这些阈值通常需要同步到hive中与事实表进行关联,进行参数状态分析,此时为了保留历史状态信息,我们需要进行表设计。拉链表专门用于解决在数据仓库中数据发生变化如何实现数据存储的问题,如果直接覆盖历史状态,会导致无法查询历史状态,如果将所有数据单独切片存储,会导致存储大量非更新数据的问题。
2021-08-24 23:48:31 855 1
原创 SQL进阶技巧: 向用户推荐好友喜欢的音乐【腾讯】
0 问题描述问题描述:向用户 user_id = 1 推荐其关注的人喜欢的音乐有如下三个表:用户关注表 follow 用户喜欢的音乐 music_likes 音乐名字表 music1 数据分析create table follow( user_id int, follower_id int);insert into follow values (1,2);insert into follow values (1,4);insert into follo..
2021-08-23 22:00:32 1403
原创 SQL进阶技巧:共同使用ip用户检测问题 | 自关联问题
2)由于数据会两两出现,如a,b和b,a实际上是一样的,过滤掉这部分重复数据,只需要选出t1.uid < t2.uid即可,也就是a,b的数据.hive中不支持不等连接,所以选where语句。本题的特征为"共同使用",诸如此类两两相遇,共同,相互认识等关键字时候,往往采用自关联解决,这类问题的共同特征往往包含一对多,需要组合出各种情况。(2)共同使用问题,一般涉及到该字眼的都是需要一对多,此类问题解决的核心逻辑是自关联。3)按照组合键分组,并过滤出符合条件的用户。1)获取自关联后的结果集。
2021-08-23 18:46:20 978 1
原创 SQL 进阶技巧:TopN问题之不及格课程数大于2的学生的平均成绩及其排名【拼多多】
本题主要开窗函数及关联的使用。注意hive中不支持in查询,需要通过关联等手段代替,本文采用的left semi join是hive中对in实现的高效代替方案。求不及格课程数大于2的学生的平均成绩及其成绩平均值后所在的排名。
2021-08-23 15:27:11 1137 7
原创 SQL 进阶技巧:断点重分组应用求连续段的最后一个数及每段的个数【拼多多面试题】
0 问题描述有一个id表,要求输出连续段的最后一个id及每段的个数create table test( id int) row format ;insert into test values (1),(2),(4),(5),(6),(9),(10),(11),(12);
2021-08-23 13:02:01 875 2
原创 SQL之用户行为路径分析--HQL面试题46【拼多多面试题】
目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log, 大概字段有:(user_id 用户编号, op_id 操作编号, op_time 操作时间)要求:(1)统计每天符合以下条件的用户数:A操作之后是B操作,AB操作必须相邻。 (2)统计用户行为序列为A-B-D的用户数其中:A-B之间可以有任何其他浏览记录(如C,E等),B-D之间除了C记录可以有任何其他浏览记录(如A,E等)1 数据分析(1)数据生成......
2021-08-22 21:51:29 2526 4
原创 一个HQL语句是如何转换成MR任务的?
可 以 知 道 我 们 执 行 HQL 主 要 依 赖 于 $HIVE_HOME/bin/hive 和 $HIVE_HOME/bin/hivesever2 两种脚本来实现提交 HQL,而在这两个脚本中,最终启动的 JAVA 程序的主类为,所以其实 Hive 程序的入口就是“CliDriver”这个类。(2)服务端接收到客户端的服务请求会启动一个。该类主要完成以下功能1)解析客户端的-e,-f等参数2)定义标准的输入输出流3)按照;切分HQL语句。可以执行以分号隔开的多个SQL语句,按顺序执行。
2021-08-22 16:17:58 1328
原创 SQL进阶技巧:如何定位连续区间的起始位置和结束位置?【拼多多】
0 题目表:Logs+---------------+---------+| Column Name | Type |+---------------+---------+| log_id | int |+---------------+---------+id 是上表的主键。上表的每一行包含日志表中的一个 ID。后来一些 ID 从 Logs 表中删除。编写一个 SQL 查询得到 Logs 表中的连续区间的开始数字和结束数字。将查询表按照 start
2021-08-20 18:38:30 1372
原创 SparkSql之数据的读取和保存
目录0 引言1 加载数据2 保存数据3 Parquet4 JSON4 CSV5 MySQL6 Hive0 引言SparkSQL提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据,SparkSQL默认读取和保存的文件格式为parquet。1 加载数据spark.read.load 是加载数据的通用方法scala> spark.read.csv format jdbc json
2021-08-19 23:05:57 5629
原创 SQL进阶技巧:如何测试一组数据中是否存在某个值?
本文通过窗口函数对一组数据中是否存在某个值进行了分析,利用窗口函数构造辅助判断条件这一技巧解决此类问题,其中数值对齐采用了lpad()函数技巧。
2021-08-19 17:16:04 3135
原创 Hive数据导入导出
目录1 Hive数据导入1.1 直接向表中插入数据(强烈不推荐使用)1.2 通过load加载数据(必须掌握)1.3 通过查询加载数据(必须掌握)1.4 查询语句中创建表并加载数据(as select)1.5 创建表时指定location1.6 export导出与import 导入 hive表数据(内部表操作)2. Hive数据导出2.1 insert 导出2.2 Hive Shell 命令导出2.3 export导出到HDFS上1 Hive数据导入1.1
2021-08-19 14:03:22 587
原创 File does not exist: /user/anonymous/.staging/job_1628851608378_6064/报错问题解决
user/admin/.staging/job_1571397171638_0001/job_1571397171638_0001_1.jhist 所以为什么没有下发,这里面jhist,只是被引发的错误,它还不是根本的错误。看到上面错误,我们就可以判断,这是网络问题,然而网络无非是ip地址,防火墙,端口,hosts等。我们正常的hosts是这样的。在回头复盘想想,我们找不到jhist,跟我们的网络问题二者是很难找到关联的,所以大家在遇到问题的时候,一定多排查和思考,而不是看到一个错误,就以为是它的问题。
2021-08-16 15:17:33 1780
原创 SQL进阶技巧:如何使用HQL从不固定位置提取字符串元素【详解Hive字符串位置查找函数】
目录0 问题描述1 问题解决2 小结0 问题描述SQL 从不固定位置提取字符串的元素,你有一个字符串,其中包含一段连续的日志数据。你想解析该字符串,并从中提取出部分信息。不过,你需要的信息并不存在于字符串的固定位置。因此,你必须借助目标信息附近的某些字符来定位并提取所需的内容。例如,考虑下面的字符串。xxxxxabc[867]xxx[-]xxxx[5309]xxxxxxxxxxtime:[11271978]favnum:[4]id:[Joe]xxxxxcall:[F_GET_R
2021-08-15 19:24:20 3419 3
原创 SQL进阶技巧:如何进行行值轮转?
0 需求你想返回每个员工的姓名、工资,以及下一个比当前员工高和低的工资值。如果没有找到更高或更低的工资值,你希望结果集可以“折回”(第一个 SAL 的前一行是最后一个 SAL;反之,最后一个 SAL 的下一行即是第一个 SAL)。你希望返回如下所示的结果集。其实就是寻找比当前员工工资低及工资高的前后的工资值,如果遇到最高的工资或最低的工资则进行折回ENAME SAL FORWARD REWIND---------- ---------- --------
2021-08-15 15:16:09 379
原创 SQL进阶技巧:如何将字符串中对应的名称和数值清洗出来?
本文给出了一种利用HQL语言分离字符串中含有字符和数字的技巧和方法,主要使用regexp_replace()函数及translate()进行求解,求解的核心思想就是将不同的字符或数字替换成指定的特征字符,然后用regexp_replace()函数删除指定的特征字符,即可分离出字符及数字。
2021-08-14 20:48:41 1595 1
原创 SQL进阶技巧:如何用HQL删除字符串中多余的字符【详解TRANSLATE()函数】
本文讲解了如何用HQL删除字符串中多余的字符的技巧和方法,该功能主要采用translate()函数进行实现,文章中对该函数的用法进行了详细的分析和研究,并对该函数与replace()的区别进行了分析,本文的技巧对一些非指定或固定顺序的字符删除上特别有用。
2021-08-14 17:46:12 1354 1
原创 SQL进阶技巧:如何使用HQL遍历字符串?
0 需求遍历字符串,并以一个字符一行的形式显示出来 如遍历"a,b,c,d,e,f"字符串,使其每个字符都生成一行记录1 数据分析在hive中为我们提供了强大的posexplode()函数,该函数对数组结构的数据进行行转列,并对数组中每一位都生成一个索引值.该函数强大之处就是为数组中每一位生成索引。因此我们可以利用该函数来生成字符串中的每一位的索引,达到遍历的效果。具体如下所示:select posexplode(split('a,b,c,d,e,f',','))结果如下:+
2021-08-13 19:37:26 1019
原创 SQL进阶技巧:如何使用HQL统计字符串中字符的个数?
0 需求统计在字符串"HELLO HELLO"中出现了多少个LL1 分析分析思路:(1) 用regexp_replace()函数将要计算的字符替换为''select regexp_replace("HELLO HELLO","LL",'')0: jdbc:hive2://10.9.4.117:10000> select regexp_replace("HELLO HELLO","LL",'');+----------+--+| _c0 |+----------.
2021-08-13 14:12:56 3520
原创 读懂 Spark Shuffle
1. HashShuffleManagershuffle write 阶段,主要就是在一个 stage 结束计算之后,为了下一个 stage 可以执行 shuffle 类的算子(比如 reduceByKey),而将每个 task 处理的数据按 key 进行“划分”。所谓“划分”,就是对相同的 key 执行 hash 算法,从而将相同 key 都写入同一个磁盘文件中,而每一个磁盘文件都只属于下游 stage 的一个 task。在将数据写入磁盘之前,会先将数据写入内存缓冲中,当内存缓冲填满之后,才会溢写到磁
2021-08-12 23:09:36 779
原创 SQL进阶技巧:如何分析每个用户的受欢迎程度【Facebook面试题】
本题为Facebook面试题,本题的难点在于第一步分析的结果上,第一步分析结果的得出需要我们根据题意将可能结果等列出,这样我们自然而然就会想到union的方法。针对本题给出了两种方法一种采用常规思路关联的方法给出结果,一种采用窗口函数形式分析出结果,窗口函数分析方法在形式上更简洁一些。本题在用窗口函数分析结果时候采用size(collect_set())这一技巧,分析去重后的个数,在低版本的hive中如1.1是不支持count(distinct XXX) over()这种形式的,这一技巧需要注意和掌握。
2021-08-10 23:07:44 1197
原创 SQL进阶技巧:如何对连续多条记录进行合并?【GroingIO 面试题】
本题关键点是如何构建分组条件,在分组中求出所需要的目标,是之前SQL题中总结的重分组算法的典型应用。本题在多家面试中被作为笔试题,要求用spark算子、mr编程或HQL语言实现,spark算子或mr编程实现方法网上文章讲的比较多,而SQL语言实现基本没有,本文给出了一种HQL语言的实现方法,弥补了此类问题用SQL语言实现的空缺。
2021-08-08 21:21:12 2666 1
原创 读懂Spark调度系统【数据不动代码动】
目录1 Spark任务调度系统的基本概念2 调度系统中的核心组件及原理2.1. DAGScheduler2.2 SchedulerBackend2.3 TaskScheduler3 小 结1 Spark任务调度系统的基本概念一个Spark应用程序包括Job、Stage以及Task三个概念: Job是以Action方法为界,遇到一个Action方法则触发一个Job; Stage是Job的子集,以RDD宽依赖(即Shuffle)为界,遇到Shuffle做一...
2021-08-08 14:36:58 635
原创 SQL进阶技巧:行转列问题之匹配填鸭
本题实质上考察行转列问题,行转列在实际项目中经常使用,对于行转列求解,本文给出了两种方法,一种是经典的max(case when) 解法,一种是借助hive的collect_list()函数及array_contains()函数进行求解,两种解法各有千秋,希望读者熟练掌握。
2021-08-07 19:18:21 494
原创 SQL进阶技巧:如何分析截止当前学生退费总人数问题? | 存在计数问题分析
本文对存在性问题进行了探讨和研究,此类问题往往需要对不同的记录做对比分析,我们可以先将符合条件的数据域按照collect_set()或collect_list()函数进行聚合转换成数组,然后获取历史的数据域放入当前行,最后利用hive中数组的相关处理手段进行对比分析。常用的hive数组处理函数如expode()、size()、array()、array_contains()等函数,本题就借助于hive ,array_contains()函数进行存在性问题分析。
2021-08-06 18:30:47 900 4
原创 Spark之RDD与DataFrame的区别与理解
1.RDD是Spark对于分布式数据模型的抽象,DF是带数据模式的结构化分布式数据集,类似于传统数据库中的一张表,RDD不带数据模式或者说是泛型的 2.RDD API的执行引擎是Spark Core,其Spark Core的本质是负责任务的调度、计算、及存储;DF API优化引擎是SparkSQL,包括Catalyst执行过程优化和Tungsten数据结构优化。两者API的区别在于一个提供标量算子一个高阶算子和两者底层优化引擎不一致。 3.之前子框架如Streaming,mlib,graph都是采用RD
2021-08-04 19:43:12 1085
原创 SQL进阶技巧:TopN问题分析如何获取积分最多的人?
0 问题描述牛客每天有很多用户刷题,发帖,点赞,点踩等等,这些都会记录相应的积分。有一个用户表(user),简况如下:还有一个积分表(grade_info),简况如下:第1行表示,user_id为1的用户积分增加了3分。第2行表示,user_id为2的用户积分增加了3分。第3行表示,user_id为1的用户积分减少了1分。.......最后1行表示,user_id为3的用户积分减少了1分。请你写一个SQL查找积分最高的用户的id,名字,以及他的总积分是多少(可能.
2021-08-03 00:24:59 2306 1
原创 读懂Spark存储系统
Spark 存储系统用于存储 3 个方面的数据,分别是 RDD 缓存、Shuffle 中间文件、广播变量。我们一个一个来说。RDD 缓存指的是将 RDD 以缓存的形式物化到内存或磁盘的过程。对于一些计算成本和访问频率都比较高的 RDD 来说,缓存有两个好处:一是通过截断 DAG,可以降低失败重试的计算开销;二是通过对缓存内容的访问,可以有效减少从头计算的次数,从整体上提升作业端到端的执行性能。而要说起 Shuffle 中间文件,我们就不得不提 Shuffle 这个话题。在很多场景中,Shuffle
2021-08-01 21:42:14 1950 2
原创 数据仓库之数据质量管理
目录第1章 数据质量整体概述1.1 概述1.2. 数据质量标准分类1.3 数据质量管理解决方案第2章 ODS层数据校验2.1 数据校验通用脚本2.2 ODS层各表检验第3章 DWD层数据校验3.1 数据校验通用脚本3.2 DWD层各表检验第4章 DWS层数据校验4.1 DWS层数据质量校验4.2 DWS层数据校验脚本第5章 DWT层数据校验5.1 DWT层数据质量校验方法5.2 宽表校验脚本第6章 ADS层数据校验第1章 数据质量整..
2021-08-01 17:46:17 2310 1
原创 数据质量如何监控
数据质量怎么监控? 如一张表的记录数在一个已知的范围内,或者上下浮动不会超过某个阈值: SQL结果:var 数据量 = select count(*)from 表 where 时间等过滤条件 报警触发条件设置:如果数据量不在[数值下限, 数值上限], 则触发报警 同比增加:如果((本周的数据量 -上周的数据量)/上周的数据量*100)不在 [比例下线,比例上限],则触发报警 环比增加:如果((今天的数据量 - 昨天的数据量)/昨天的数据量*100)不在 [比...
2021-08-01 17:09:23 1243
数据分析+hive基础及进阶SQL练习题+面试
2024-08-12
微众银行数据开发项目实战
2024-08-09
采购全流程闭环分析体系建设
2024-08-09
基于实际案例的HiveURL解析函数实战
2024-08-01
大数据数据仓库建设规范
2024-08-01
SQL企业真实笔试题详解
2024-07-25
史上最详细的CDH安装运维优化手册
2024-07-25
铁路行业通用数字化解决方案
2024-07-25
数据指标体系建立实战方法
2024-07-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人