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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速学习网站流量日志分析--数据入库--宽表具体实现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。这就是一个宽表数据的生成,从客观上再次理解什么叫宽表,字段变多数据变得详细叫做宽表,它的存在就是一个标准就是有利于数据的分析,方便于后续的分析,这就是宽表的具体实现。

相关文章
|
1月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
377 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
16天前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
21天前
|
监控 网络协议 应用服务中间件
深入解析:如何确定网站使用的端口号
【10月更文挑战第21天】 在网络通信中,端口号是识别特定服务的关键。一个IP地址可以有多个端口,每个端口可能运行着不同的服务。当我们在浏览器地址栏输入一个网址时,实际上是通过特定的端口与服务器进行通信。本文将探讨如何确定一个网站使用的端口号,以及端口号在网络通信中的作用。
26 4
|
1月前
|
数据采集 XML 前端开发
Jsoup在Java中:解析京东网站数据
Jsoup在Java中:解析京东网站数据
|
30天前
|
域名解析 缓存 网络协议
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
|
1月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
193 0
|
1月前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
25 0
|
3月前
|
jenkins 持续交付
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
|
3月前
|
缓存 网络协议 Linux
在Linux中,当用户在浏览器当中输入⼀个网站,计算机对dns解释经过那些流程?
在Linux中,当用户在浏览器当中输入⼀个网站,计算机对dns解释经过那些流程?
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
14 2

推荐镜像

更多