ETL简介
ETL(Extraction-Transformation-Loading)中文意思就是数据清洗(数据抽取、转换和加载),通俗的说法就是从数据源抽取数据出来,进行清洗加工转换,然后加载到定义好的数据仓库模型中去。目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。
ETL是BI项目重要的一个环节,其设计的好坏影响生成数据的质量,直接关系到BI项目的成败。这个处理过程有很多方法,包括清洗工具的使用,以及HQL自带的函数,自定义udf函数,正则表达式等,其中正则表达式使用的非常之多,功能也十分强大.
什么是正则表达式及其功能
- 正则表达式,又称规则表达式.
- 正则表达式的英语原文为:Regular Expression,常简写为regex、regexp或RE,正则表达式是计算 机科学的一个概念.
- 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本.
刚开始接触正则的人肯定是一头蒙,但实际上正则并不是想象的那么难懂, 像 data(\w)?.dat 这样的正则表达式查找下列名字:
此时我们能找到所有的,如果我们吧 ? 改成 + 则只能匹配到后四个.
例如:该文本有这些内容,我们需要找出文本中的 hello 单词,一般我们都会直接ctrl+f 进行搜索,其实这个搜索的过程就相当于正则的 hello ,当我们只要开头那个hello 时我们就可以用正则 ^hello’来实现;如果我们需要查看文本中的字母不需要其他的,就可以用 [A-Za-z] 来实现,只查看数字 [0-9]或\d 来实现;如果查看3位数的数字 \d{3} 此时只会匹配到123和978.
正则使用起来很简单,而且功能也十分强大.除了对数字,字母等进行匹配,还可以对汉字,符号,空字符串,制表符换行符等进行匹配,各种类型的字符都可以进行组合匹配.
为什么使用正则
典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。
通过使用正则表达式,可以:
- 测试字符串内的模式。
例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
替换文本。 - 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
- 基于模式匹配从字符串中提取子字符串。
- 可以查找文档内或输入域内特定的文本。
例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。
正则的应用领域及特殊字符的使用
目前,正则表达式已经在很多软件中得到广泛的应用,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。
- C# 正则表达式
- Java 正则表达式
- JavaScript 正则表达式
- Python 正则表达式
- Hive 正则表达式
由此可见正则应用领域广,功能强使用简单,但是在不同领域正则也会有一点点的不同,比如在对特殊字符转义方面:
\ 这个是转义符号在正则里是转义的意思.
? * + . ^ $包括转义符自身 等等这类符号在正则里都有特殊的含义,但如果要匹配的内容就包含这些字符,此时就需要转义符 \ 进行转义.而且在不同的领域转义符也会有差别,比如在hive中只需要一个转义符,在 shell 中需要两个.
例如:如图所示,这是正则对特殊字符匹配的一个写法
正则的应用场景
例如常见的注册页面,都会对求账号或密码有限制,这样的限制就可以用正则来约束.
我们在填写用户注册表单时,比如会提示我们 用户名必须由字母,数字,下划线连接符组成,并设置用户名的长度为3-15位,我们就可以使用以下正则表达式来设定。
这就是一个简单的注册表单的正则应用.
另外在我们做数据的清洗工作时也经常会用到正则,结合HQL对数据进行处理,以下为项目上实际数据处理模板:
- 匹配手机号(转换):
- 匹配身份证(>18位和满足正则的保留,其余用*补全)
- 匹配时间(转换)
- 出生日期提取(转换)
- 性别代码提取
- 其他时间混合匹配替换
- 姓名验证
这只是数据处理过程中最基本的类型,根据实际数据的不同灵活运用正则可达到事半功倍的效果.
正则常用符
正则常用符详细描述
https://blog.csdn.net/u011379545/article/details/38083501
来源:https://blog.csdn.net/Sunshine_Bloom/article/details/100145140