网站流量日志分析--数据入库--宽表具体实现2—解析 url|学习笔记

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习网站流量日志分析--数据入库--宽表具体实现2—解析 url

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第三阶段) 网站流量日志分析--数据入库--宽表具体实现2—解析 url】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/695/detail/12207


网站流量日志分析--数据入库--宽表具体实现2—解析 url

来访的 url 字段表面看起来是非常标准的 url ,这里面有协议、主机、支援路径等等还有请求的参数。这么样的一个字段 http://cos.name/category/software/packages/ 写代码处理非常麻烦,第一点它里面的主机零长短不一,怎么截取;第二个支援路径也不一样,有的长有的短有的包含多个支援路径,那么针对这个方式现在来看是比较担忧的,无从下手。 Hive 当中有一个内置的 UDTF 函数叫做 parse-url-tupl,它可以解析 url 相关的字。

Parse_url_tuple(regexp_replace(http_referer,”\””,””),’HOST’, ’PATH’, ’QUERY’, ’QUERY:id’) b as host, path, query, query_id;

首先这里采用了侧视图,先不看测试图,先看  parse-url-tuple 做什么事,把语句复制出来,首先第一点要明确parse-url-tuple 是 hive 内置的 UDTF 函数,可以处理标准的 url  格式数据,根据 url 数据可以自动的提出相关的属性,比如 host 、path、请求的参数 query 以及具体的值等等相关参数,按照标准就可以来到。但是这当中有一个前提叫做标准的 url 为什么在这里重点强调一下,数据当中,如果直接把这个字段给它,能不能叫标准,看上去好像很完美,但是不是标准,不标准在于左右两边都有双引号存在,所以在处理字段之前要做的第一件事就是把引号给它去除掉。引号去掉很简单,可以截取也可以采用正则替换,这里就采用了一个 regexp-replace 一个正则替换,这就相当于 socre 里面函数嵌套函数,首先第一个把它拖出来看一下,这又是一个 hive 内置的正则替换函数,替换传过来的字段,把里面的第一个斜杠表示转移,把里面的所有引号替换成为空,把 http-referer 字段作为参数传递给这个函数,它就可以把里面所有的引号为空,相当于去除了 url 两边的引号,去除完之后,再把它作为参数传递给 path tuple 就可以进行解析。后面的解析有相关的值 host、path、query。

举个例子,

http://www.itcast.cn/bigdata/1.html?id=00001&name=allen&age=18,比如说这是一个标准的 url ,基于这个参数可以解决如果这里指定的是 host , host 是主机,它就可以帮助提到这一段 www.itcast.cn,接下来 path 这个路径,如果传一个 path ,哪个是路径,是从斜杠开始到1这是请求的支援路径;接下来 query 叫做请求,这就是它的参数,把所有的参数拿过来,从 id 到18,最后query id 比较好奇,看这个语法很特殊,query id 中的id 是解析对应参数中的 k 看这个 id 中有获取到的值是00001,这时候可以再扩展,举个小例子,query name allen ,这就是这一个内置专门解析函数语法规则。如果指定的属性不存在,就返回 null ,这就是 hive 当中非常漂亮的一个内置函数,专门用于解析 url 。

这是一个 UDTF 函数,要想跟之前的表产生关联,就要引入 later view 侧视图,原来的表称之为 a, later view parse.url 称之为b 。 a 和b 做一个表之间的关联, a表是 url 字段,b 表是刚才函数的解析出来新的字段,叫做 host、 path、 query、query id,作为符合就构成了新的字段。这样满足表关联的操作,这就是第二个叫做来源 url 字段的拓宽,这里要注意引入了一个叫做 hive 内置的解析 url 函数,是一个标准的 udtf 函数,把函数名字简单写一下,就是 parse-url-tuple 复制过来粘贴,这样就完成了两个字段的破罐。当然重点还是对 hive 语序。

下面结合上面描述看一下具体的实现,这里有一个叫做 dw-detail.sql 语句,刚才已经把宽表创建成功,接下来就是把数据导入进去,这时候才看起来比较大,但是颇析出来将会非常简单,首先它的语法结构叫做 insert ,insert intp table 叫做宽表,后面是宽表的分区,来自于 insert 查询,查询时候看起来很多,实则很简单,看到 insert 之后确定 form 关键字,把 a 查询字段都去掉,这时候发现就比较明朗,首先使用查询原来的表叫做 a ,later view 解析函数叫做 b, a 和 b 之间做一个关联,起个名叫做 c ,这时候想一下 c 表的字段是否等于 a 表的字段,原来表的字段加上解析 udtf 函数生成的字段,在脑海当中可以写一个等式叫做 c.*等于a.*加上 b.*,明白它之后接下来再针对 c.*操作截取当中的时间字段,把所有字段填充到宽表当中就可以完成。

以画图的角度来看(如下图),一个是真是的窄表,一个是虚拟的表。

image.png

复制之后做执行,打开 hive 服

image.png

打开服务器,做查询语句,因为开始 hive 本地模式执行起来将非常快,接下来 select*from 宽表数据到底有没有解析出来,把宽表数据拿过来加一个 limit 关键字看一下解析正不正常,这里有好多字段复制出来看一下到底宽表解析的完不完美,这也是俗称的 etl,导入的时候所有字段的抽取操作。把它拿出来之后做一个复制填充到新的窗口当中,

image.png

这时候做一个验证,首先前面这些的字段事原来窄表的字段没有操作,重点在时间是原来字段,日期,时间,月份,day、hour ,这五个字段是从日期当中提出来的,而且是多少对应多少,这样的字段在分析的时候非常方便。后面的url, 当中没有为空,有的把它解析出来, host 如果有对应的主机是谁,没有显示为 null ,下面是 path 是从哪个路径来的,后面的参数有就显示,没就为 null。这就是一个宽表数据的生成,从客观上再次理解什么叫宽表,字段变多数据变得详细叫做宽表,它的存在就是一个标准就是有利于数据的分析,方便于后续的分析,这就是宽表的具体实现。

目录
打赏
0
0
0
0
55
分享
相关文章
一招高效解析 Access Log,轻松应对泼天流量
一招高效解析 Access Log,轻松应对泼天流量
Java中Log级别和解析
日志级别定义了日志信息的重要程度,从低到高依次为:TRACE(详细调试)、DEBUG(开发调试)、INFO(一般信息)、WARN(潜在问题)、ERROR(错误信息)和FATAL(严重错误)。开发人员可根据需要设置不同的日志级别,以控制日志输出量,避免影响性能或干扰问题排查。日志框架如Log4j 2由Logger、Appender和Layout组成,通过配置文件指定日志级别、输出目标和格式。
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
227 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
670 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
深入解析Sysmon日志:增强网络安全与威胁应对的关键一环
在不断演进的网络安全领域中,保持对威胁的及时了解至关重要。Sysmon日志在这方面发挥了至关重要的作用,通过提供有价值的见解,使组织能够加强其安全姿态。Windows在企业环境中是主导的操作系统,因此深入了解Windows事件日志、它们的独特特性和局限性,并通过Sysmon进行增强,变得至关重要。
126 1
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
675 0

热门文章

最新文章

推荐镜像

更多