数据预处理和上传| 学习笔记

简介: 快速学习数据预处理和上传

开发者学堂课程【场景实践-基于阿里云 Quick BI 对 MOOC 网站日志分析:数据预处理和上传】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/524/detail/7076


数据预处理和上传

点击文档进入后在左侧菜单中找到工具及下载,点击客户端。在使用 MaxCompute客户端前,请首先安装并配置客户端。点击该链接进入后会显示如何安装并配置。找到:单击此处下载 MaxCompute 客户端,点击后就会进行下载。下载完成后进行解压。

获取了项目名以及 ID Secret 后就可以进行配置 odps_cmd 命令行工具。此处已经下载好,打开 config 文件夹,打开odps_config.ini,是配置文件。此处需要指定三个主要属性:项目名、IDaccess_key

project_name=

access_id=<accesssid>

access_key=<accesskey>

指定后通过 bin 目录下的odpscmd.bat运行,如果是 windows 系统使用它。如果为其它操作系统例如mac可以使用odpscmd(是一个shell脚本)。已经配置好了配置文件,此处使用odpscmd.bat执行。可以看到已经连接成功进入到项目下。

输入show tables就可以看到该项目下的所有表。再来演示数据上传,首先创建表,输入

create table t_test<content string>:

再次输入 show table 就可以看到表名已经创建成功。

再使用命令上传实际数据,输入tunnel upload -fd nodelimiter d:\access.log t_test;

回车执行可以看到已经上传成功。再在该表中查询几条数据,输入

select = from t_test limit 5;

执行完成,可以看到每一行确实变为数据库表的每一行。

以上就是数据上传。

 

九、正则表达式

日志文件格式主体上是以单个空格进行分割,理论上可以通过空格将每一个属性进行分割。但是很多字段中都自带空格,这就导致不能单纯以文本分割形式将属性提取出。所以使用正则表达式。正则表达式是对字符串和特殊字符串操作的一种逻辑公式,使用事先定义好的字符串组合组成一个规则字符串。

正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

元字符

说明

^

行首(字符的开始)

$

行尾

.

任意字符

*

匹配零次或多次

+

匹配1次或多次

?

匹配零次或1

?

匹配修饰符,当该字符紧跟在任何一个其他限制符(*+?{n}{n,},{n,m})后面时,匹配模式是非贪婪的,而不指定默认是贪婪模式。(非贪婪模式:当使用一定规则进行匹配时,使用非贪婪模式,则会尽可能少的匹配字符。例对一串数字1-10使用数字匹配模式,若后存在?,则只取第一个数字1。)

A|B

AB

(abc)*

匹配abc序列零次或多次

{n}{m,n}

匹配的次数(可以指定一个具体数字)

[ab]

匹配括号中的任一字符,例中模式匹配ab

[a-d]

匹配a,b,c,d任一字符

[^ab]

^表示非,匹配任一非a b的字符

\

转义符

\n

n为数字1-9,后向引用

\d

数字

\D

非数字

 

了解常见元字符后实际对文本数据使用正则表达式进行处理。

 

十、使用正则提取日志属性

122 112.10.94.234 -- [22/Aug/2017:14:01:26 +0800] "POST /item/detail.mooc HTTP/1.1" 200 2582 "http://www.chinamoocs.com/study/initplay/540.mooc""Mozilla/5.0(Macintosh; Intel Mac OS X 10_12_6)AppleWebKit/603.3.8(KHTML, like Gecko)Version/10.1.2 Safari/603.3.8"

之前在此处增加了一个自增长的ID格式,所以也需要提取ID。每一个属性都以空格分割,但同时需要了解规则。以上有单个数字,有普通字符串,以及一些特殊字符,还有一些以[]的字符串,还有””的字符串可能还有一些独立的空格。在了解后开始编写正则表达式:

INSERT OVERWRITE TABLE t_web_access_log_tmp1

SELECT CAST(regexp_replace(regexp_substr(content,'[[].*?[]]|".*?|.*? ',1,1),' $',’’)AS BIGINT)AS id, regexp_replace(regexp_substr(content'[[].*?[]] |".*?|.*? ',1,2),' $',’’)AS ip

,CAST( regexp_substr(content,'\\d+',1,2)AS BIGINT)* 256 * 256 * 256

+ CAST( regexp_substr(content,'\\d+',1,3)AS BIGINT* 256 * 256

+ CAST( regexp_substr(content,'\\d+',1,4)AS BIGINT)* 256

+CAST( regexp_substr(content,'\\d+',1,5) AS BIGINT)AS ip_num

, regexp_substr(content,'\\d+',1,2)AS ip_1

,regexp_replace(regexp_substr(content,'[[].*?[]]|".*?"|.*?,1,5),^[[]|[]] $',’’)AS access_time

, regexp_replace(regexp_substr(content,'[[].*?[]]|".*?|.*?,1,6),'^"|" $',’') AS url

, regexp_replace(regexp_substr(content'[[].*?[]]|".*?"|.*? ,1,7),' $',’’)AS status

,regexp_replace( regexp_substr(content'[[].*?[]]|".*?|.*? ,1,8),' $',"")AS traffic

,regexp_replace( regexp_substr(content'[[].*?[]]|".*?"|.*?,1,9),^"|" $',’’)AS referer

, regexp_replace(regexp_substr(content,’".*?",1,3),‘^" |"$',’’)AS c_info

FROM t_web_access_log_content;

此处使用的为 MaxCompute DataID 提供的 SQL 语法进行的操作。首先使用regexp_substr 函数,默认需要四个参数,首先为内容字符串,在内容中进行正则的符合的规则字符串提取。在正则表达式后数字参数表示从第一个字符进行使用正则,如果想从特定字符串中进行提取可以指定数字。后面是匹配次数,1代表匹配到字符串的第一次。同时在函数的外部使用了regexp_replace函数,是一个字符串替换的函数,替换方式使用正则表达式。此处的’ $’为去末尾空格操作。正则表达式中[[]//转义为同一效果,作用是将内部[]以原始形式进行输出,’.’代表任意字符,?为非贪婪模式,尽可能少的匹配。[[].*?[]]表示按之前方式匹配,|表示或,第一种匹配方式没有匹配到查看第二种匹配方式".*? |.*?,匹配””作为两边包括的一个字符串。如果两种方式都未匹配到,最后使用.*? 匹配到实际的字符串,通过空格方式进行提取。可以提取到每一个属性,是一种通用的方式。由此提取第一个匹配时获取的为id,此处为122。获取第二个匹配时获取到IP。进行第五次匹配时,实际上在进行第三四次匹配时为--,不需要进行跳过,在获取第五次时为访问时间。第六次为实际请求地址,第七次为状态,第八次为发送字节数,第九次是访问来源,最后为用户的客户端信息。最后一次比较特殊,末尾没有空格,所以此处使用独立的正则表达式 ‘“.*?”’ 两边为””,中间为任意字符串,两边都有””的字符串从请求地址作为第一个开始,第二个为referer,第三个为用户客户端信息。由此此处使用第三个作为用户客户端信息,在实际存储时,需要使用正则表达式替换将开头的””以及结尾处的””进行去除,所以将存储为实际内容,并去除了两边的””。

最后来查看内容ip的提取,将ip转换为数字就可以对ip的信息提取进行一个数字的大量比较。所以此处将用户访问的ip进行实际计算,首先使用一个正则表达式,此处使用的为\d,即一个数字匹配,后为+,表示一次或多次,前面还有\,表示将\进行转义。通过正则先匹配到的为id,过滤掉从第二个开始。再计算IP的数字,首先将每一个数字段转换为bigint类型,之后* 256 * 256 * 256,第二位* 256 * 256,第三位* 256,最后一位直接累加。就可以得到ip转数字后的结果。之后还需要进行一个提取,即将ip 的第一个段单独进行保存,实际上是一个优化作用。

以上为提取日志属性的全部内容。

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
8月前
|
机器学习/深度学习 人工智能 数据可视化
AI开源框架:让分布式系统调试不再"黑盒"
Ray是一个开源分布式计算框架,专为支持可扩展的人工智能(AI)和Python应用程序而设计。它通过提供简单直观的API简化分布式计算,使得开发者能够高效编写并行和分布式应用程序 。Ray广泛应用于深度学习训练、大规模推理服务、强化学习以及AI数据处理等场景,并构建了丰富而成熟的技术生态。
1512 102
AI开源框架:让分布式系统调试不再"黑盒"
|
6月前
|
自然语言处理 数据可视化 API
解锁 Qwen3 的Agent能力,CookBook来咯!
Qwen3系列模型具备强大Agent能力,但从模型到Agent仍存技术难题。为此,我们推出基于Qwen-Agent框架的3个CookBook示例,展示如何让Qwen3丝滑调用MCP Server全过程。不论是本地部署还是API调用模型,开发者均可通过Qwen-Agent完成复杂任务。CookBook包括自然语言驱动数据库操作、云端高德API地理服务及文档转思维导图等功能。Qwen-Agent封装了工具调用模板和解析器,原生支持MCP协议,大幅降低开发成本。欢迎体验并反馈。
756 1
|
5月前
|
供应链 JavaScript 数据可视化
生产成本核算,为什么总算不准?
在制造企业中,生产成本核算不准是一个普遍难题。文章深入分析了六大关键场景,包括产品设计变更频繁、采购价格不清、生产现场混乱、仓储物流差异、人工成本难归集及费用归口不明确,揭示了这些问题带来的系统性风险。同时,文章指出ERP系统在解决成本核算难题中的关键作用,强调通过BOM管理、工单细化、采购追踪、成本自动归集与精细化报表分析,帮助企业实现成本的精准核算与有效控制。
|
关系型数据库 分布式数据库 PolarDB
PolarDB 开源部署体验评测
PolarDB 开源部署体验评测
338 3
|
开发框架 前端开发 JavaScript
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在DataGrid上直接编辑保存数据
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在DataGrid上直接编辑保存数据
|
10月前
|
Java 关系型数据库 MySQL
ssm020基于ssm的人才招聘网站(文档+源码)_kaic
网络和科技的进步以及人们生活条件的提高都让计算机技术越来越平民化,深入日常生活中。网络更是成为生活的必备条件,大到国家单位、科研项目,小到大街小巷都充斥着网络的身影。在日常办公中,计算机起到了文字编辑、打印、信息检索、统计等的作用。使用计算机可以使日常繁杂的信息进行科学的加工,使信息变得更加的有序、可利用。计算机技术已成为热门。 正是因为网络、科技、计算机技术使现代人的生活和工作变得便利、轻松,给实体行业带来了巨大的冲击。人才招聘的日常工作也遇到了前所未有的挑战。现如今,对于招聘的管理有很多的局限性,究其原因是因为招聘管理的根本是信息的运动。在新时代的环境下,传统的管理方式不再满足用户的需求,
|
11月前
|
存储 开发者 Python
python基本语法
Python的基本语法简洁而强大,支持多种编程范式,包括面向对象编程和函数式编程。通过掌握变量和数据类型、操作符、控制结构、函数、类和模块等基本概念,可以有效地编写高效、可读的Python代码。无论是初学者还是经验丰富的开发者,Python都提供了丰富的工具和库来满足各种编程需求。
368 13
|
9月前
|
数据处理 调度
|
Linux Shell 数据安全/隐私保护
Linux 初学者必学的 10 个命令,学习!
【10月更文挑战第28天】
319 1
Linux 初学者必学的 10 个命令,学习!
|
云安全 存储 安全
带你读《阿里云安全白皮书》(十五)——云上安全重要支柱(9)
阿里云提供全面的数据安全保护措施,包括数据操作审计、全链路加解密、细粒度访问控制、可信计算和数据本地化存储等,确保客户数据的安全与合规。《阿里云安全白皮书(2024版)》详细介绍了这些技术能力,可点击链接下载完整版内容。