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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 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。这就是一个宽表数据的生成,从客观上再次理解什么叫宽表,字段变多数据变得详细叫做宽表,它的存在就是一个标准就是有利于数据的分析,方便于后续的分析,这就是宽表的具体实现。

相关文章
|
2月前
|
SQL 运维 监控
SLS 数据加工全面升级,集成 SPL 语法
在系统开发、运维过程中,日志是最重要的信息之一,其最大的优点是简单直接。SLS 数据加工功能旨在解决非结构化的日志数据处理,当前全面升级,集成 SPL 语言、更强的数据处理性能、更优的使用成本。
18089 137
|
28天前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
27天前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
15天前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
77 3
|
28天前
|
存储 监控 网络协议
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
|
29天前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
23 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
30天前
|
存储 运维 监控
深入Linux核心:文件系统与日志解析
【8月更文挑战第20天】
36 2
|
19天前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
36 0
|
19天前
|
开发者 前端开发 编解码
Vaadin解锁移动适配新境界:一招制胜,让你的应用征服所有屏幕!
【8月更文挑战第31天】在移动互联网时代,跨平台应用开发备受青睐。作为一款基于Java的Web应用框架,Vaadin凭借其组件化设计和强大的服务器端渲染能力,助力开发者轻松构建多设备适应的Web应用。本文探讨Vaadin与移动设备的适配策略,包括响应式布局、CSS媒体查询、TouchKit插件及服务器端优化,帮助开发者打造美观且实用的移动端体验。通过这些工具和策略的应用,可有效应对屏幕尺寸、分辨率及操作系统的多样性挑战,满足广大移动用户的使用需求。
24 0
|
19天前
|
存储 运维 监控
Entity Framework Core 实现审计日志记录超棒!多种方法助你跟踪数据变化、监控操作,超实用!
【8月更文挑战第31天】在软件开发中,审计日志记录对于跟踪数据变化、监控用户操作及故障排查至关重要。Entity Framework Core (EF Core) 作为强大的对象关系映射框架,提供了多种实现审计日志记录的方法。例如,可以使用 EF Core 的拦截器在数据库操作前后执行自定义逻辑,记录操作类型、时间和执行用户等信息。此外,也可通过在实体类中添加审计属性(如 `CreatedBy`、`CreatedDate` 等),并在保存实体时更新这些属性来记录审计信息。这两种方法都能有效帮助我们追踪数据变更并满足合规性和安全性需求。
21 0

热门文章

最新文章