- 博客(27)
- 收藏
- 关注
原创 从《正则表达式必知必会》开始,在PostgreSQL中,系统地学习所有操作符,撸一遍所有案例
更进一步地,我们需要更精准地将符合要求的一类字符串找出来,而将形成干扰的各种字符串排除出去。这就引入了正则表达式中的元字符、重复次数、位置匹配、子表达式、反向引用、环视(嵌入式条件,在PostgreSQL中没有)这些更加精准的方法,利于精选精准的文本匹配。因此,如果需要处理文本,那我们有必要从本,福塔的这本《正则表达式必知必会》开始,系统地将正则所有的功能学习一下,而每一个案例,我也都配备了PostgreSQL的案例。正则表达式,总体来说就是,就是用一串字符,来高效地匹配、处理文本的。
2025-08-13 12:39:14
598
原创 9 环视的用法
我们还是先来看一个例子:你要把一个Web页面的页面标题提取出来。HTML页面标题,是出现在标签之间的文字,而这对标签又必须位于HTML代码的部分里。文本<HEAD></HEAD>正则表达式结果<HEAD></HEAD>分析<[tT][iI][tT][lL][eE]>.*<\/[tT][iI][tT][lL][eE]>匹配的是,标签以及两者之间的文字。但你需要的是其中的标题部分,不需要标签信息。能不能只返回文字部分呢?办法之一是,使用子表达式(参见第7章)。
2025-08-12 14:27:57
569
原创 8 反向引用
第7章介绍了子表达式的基本用途之一:把一组字符编组为一个字符集合。这样的字符集合,主要用于需要精确设定,需要重复匹配的文本及其重复次数。本章将学习子表达式的另一种重要用途——反向引用(back-reference)。
2025-08-12 14:13:57
476
原创 6 位置匹配
你已经学会了——如何匹配以各种组合和重复形式出现在文本中任意位置的任意字符。但是,有时候需要对某段文本内的特定位置进行匹配,这就引出了位置匹配的概念,也就是本章要学习的内容。
2025-08-12 13:53:20
674
原创 1、正则表达式入门
比较容易想到的办法是,用一些循环来依次遍历那些单词或字符并在循环体里面用一系列if语句来进行测试,这往往意味着你需要使用大量的标志来记录已经找到了什么、还没有找到什么,另外少不了要检查空白字符和特殊字符,等等。在那些文本里可能包含一些URL地址字符串,而你希望那些URL地址在最终生成的页面里是可点击的(也就是说,你打算生成一些合法的HTML代码————而不仅仅是普通的文本)。你需要在文件里搜索某个特定的文本,但你只想把出现在特定位置(比如每行的开头或是每条语句的结尾)的文本找出来。
2025-08-12 11:03:27
246
原创 Kettle导入Excel文件进数据库时,数值发生错误的一种原因
经调查,原因是,在“导出数据为Excel文件”时,Excel的数值格式,只能接受15位的有效数字,否则,其余的替换为0;在使用kettle读取Excel文件、并导入数据库时,需要读取Excel中的数值、日期(或日期+时间、时间)、文本这三种类型的列进来,发现读取其中的数值时,读取的数字就不对。另外,当我们读取存在上文这样的超过15位的数值列的Excel文件时,注意先要将整个列转为文本格式,一般有三种方式,最简单的是“分列”功能,WPS也支持该功能,如下图所示(
2025-07-10 14:36:21
331
原创 一种企业级数据仓库(基于GreenPlum,离线,T+1)的架构模式中,以存储过程为基本单元,对跑批流程的设计
以一个账目数据的“T+1”的批处理链路为例,在实际生产中,从src→dwd中,往往不会使用数据行的插入日期来识别待处理的数据,如下所示,使用一个业务的日期列,如会计日期,来固定选取“上月第一天~前一天”的所有数据进行加工,至于其中(与前一天跑批比较)的重复加工的数据,在后续与结果表的关联中做去重处理,然后插入结果表,作为新的一个批次的数据。一个常规的做法是,每天凌晨加工前一天进入到src层的数据时,并给它们加一个批次号,例如“BATCH+前一天”,使后续dwd层以后的结果表中的数据行,都带有该批次号。
2025-07-10 14:17:40
342
原创 执行SQL语句时,不易察觉三种错误
ascii字符12288(全角空格)不能正常被数据库识别为空格,而会报错;而错误提示往往并不直抒胸臆,如下图所示(PostgreSQL9),而且也可能提示别的内容,让人更加搞不懂哪里有错误。我们向数据库提交的SQL语句中,如果因为输入法或各种原因,混有全角空格,就会出现如下提示,也可能提示别的,只提示最后一行有问题;当我提交的SQL语句有几十几百行时,就找不到哪里报错。下图中,两行一起提交,就会报错,而且看提示,也不太知道为什么。2、insert into 表名后,接了左括号,提示不清。
2025-06-06 16:34:01
77
原创 PostgreSQL按日备份系统所有存储过程的文本
可以将该执行备份的sql语句,交与调度系统,或者kettle等等等,按天执行,此处略;备注:按照PostgreSQL中,创建一个表时,同时创建两个具有唯一性的索引时,二者必须有共同的列。作用:提取当天的所有存储过程文本,算出MD5值,将它与历史记录表进行比对,不同则插入。2、编写存储过程,查询系统表获取所有存储过程的信息,计算MD5值。1、创建历史记录表,包含模式名、存储过程名、存储过程文本等字段。4、建立一个永洪报表,打开后,点击按钮,执行该存储过程。(4、创建定时任务,每天执行该存储过程,暂无)
2025-06-06 16:30:08
296
原创 一种企业级数据仓库(基于GreenPlum,离线,T+1)的架构模式中,以存储过程为基本单元,做生产环境上业务逻辑变更(修改SQL逻辑)的基本流程
④最后,在生产环境中,替换或新建存储过程的时候,先将现在的生产环境的存储过程备份,然后使用文本对比软件,如BCompare,进行二者的文本对比,反复确认,自己的每处修改是否合理,也不要出现测试环境的库名哪一处没改;场景一:在前一节的校验方案的每日运行中,在校验的结果表中看到了异常结果,观察它的校验逻辑,并定位到了哪张表的哪些数据有问题,进一步定位到加工到它的对应的存储过程,进一步定位到其中具体哪段SQL加工逻辑有问题,进而要去修改。接着,模拟跑数,跑完了进行校验,不通过,则回头调试、再次校验。
2025-05-15 15:23:40
391
原创 一种企业级数据仓库(基于GreenPlum,离线,T+1)的架构模式中,以存储过程为基本单元,实现数据校验一种方案
所设计的四个表、两个存储过程的结构,如下图所示,来完成这一自动校验方案。
2025-04-20 14:04:37
1003
2
原创 一种企业级数据仓库(基于GreenPlum,离线,T+1)的架构模式,以调用存储过程为基本单元,实现数据ETL
大型企业由于业务数据巨多,尤其金融领域,需要进行复杂的计算、加工,最终得到易于分析决策、大小合适的数据形态,且还要求便于回溯查询。因此,数据仓库应运而生,对应这一需求,以下以GreenPlum产品为例。但是,数据仓库的结构是什么样?或者说,如何将业务系统的数据有序放进GreenPlum数据库中,然后实现有序加工,最终并有效管理这整一个过程呢?
2025-03-30 21:13:28
1224
原创 对SQL基础知识第2版、SQL高级知识第2版、SQL145题第2版-by李岳的书评
很久之间就关注到了公众号“SQL数据库开发”中,发布了SQL基础知识、SQL高级知识两本电子书,其中均为号主李岳所编写的公众号文章,围绕SQL语句的入门、进阶知识,然后进一步将历史发布的SQL训练题汇编为SQL145题的电子书,现在均已经迭代到第二版。注意:虽然,SQL语句几乎是关系型数据库的通用的调取数据的接口了,但是,各个数据库产品所支持的SQL语法还是有略微的不同。而这三本书,是作者基于微软的SQL Server数据库来编写的,
2024-12-03 15:33:21
2222
原创 PostgreSQL9.4.26/Greenplum6.19.4下,“自定义函数不能在Segment上执行”问题的替代解决方案
1/新建一个自定义处理函数如上,不再赘述2/再新建一个函数,设置一个游标变量为select col1::varchar as col1 from test1;3/然后遍历该游标时,调该自定义函数emp.col1=testfunc(emp.col1);4/返回该行,作为结果,直到循环结束(这步返回结果,可能需要再调试,我实战中是直接插入另一个表的)5/调用第二个建立的函数,select * from test_query();得到想要的结果-- 删除临时函数-- 创建函数$$declare。
2024-11-14 16:18:57
474
原创 PostgreSQL9.4.26/MySQL8.0中,将一个字符串中符合正则匹配的所有子字符串,进一步实现替换:递归+正则
有如下的多行字符串示例,如何将其中--开头的行中的英文分号匹配为别的字符,但是非--开头的行中,不动。二者语法基本一样,但是使用捕获组的语法不一样,一个是/1/2,另一个是$1$2。PostgreSQL解法:递归+正则表达式。MySQL8.0解法:递归+正则表达式。
2024-11-14 14:18:07
342
原创 永洪报表9.4.3.2b中,开发一个用户写入数据库的功能
如图所示,我本地安装的永洪个人桌面版10中,本身是有填报参数的,可以支持你直接上传一个表格,将其中数据显示在该表格组件内,然后设置按钮,写上脚本,将数据直接写入到数据库。但是显然,这个功能要花钱的,并且,我之前安装的个人桌面版9,也是同样如此。所以,我现在使用的企业购买的9.4.3.2b版本中,没有该功能,似乎也很合理,官方社区上有人回答说,是需要单独买的。所以,这里我不使用填报参数组件,尽管我之前是拿它去开发的;而使用大量的文本参数组件来作为用户输入的地方。
2024-11-14 11:34:40
1996
原创 使用Python调取数据对拉链表进行增量的更新插入操作
第二天,将对于逻辑上删除的数据,做闭链处理,即end_time设置为当天;新增的数据,做开新链处理,即新增一条,start_time设置为当天、end_time设置为9999-12-31;背景中,需要从一个数据库获取数据,插入到另一个数据库中,所以使用Python来编写一个调度脚本来操作,而不用纯粹的SQL语句。修改的,执行了闭链、开链操作;第一天,全量同步过来的数据,start_time设置为当天、end_time设置为9999-12-31;最后这张表的效果是,1、查历史上每天的数据都是ok的;
2024-11-11 11:35:35
397
原创 PostgreSQL9.4.26/Greenplum6.19.4下,写SQL语句,解析所有存储过程的文本,得到所涉及的表名、字段名
同理,正则表达式中,--开头,换行符\n结尾,中间的字符按最少量匹配,全局替换为换行符\n,此处出现的E可以不加,效果应该相同,只有使用\\n来表示\n时,才需要加。E'\\n'中,这种的写法,表示将后方引号内的\\n转义为\n,以规避需要使用反斜杠\的情况下带来的歧义。含义是,将“单引号'开头,单引号'结尾,中间的字符不含单双引号”,按最多量匹配,得到的子字符串,替换为空。E'\'[^\'"]*\''→→解析→ →E'\'—[^\'—"]*—\''含义:/*开头,*/结尾,中间的字符按最少量匹配。
2024-11-07 14:50:50
1602
2
原创 mysql创建定时任务(作业)去删除表--创建表--再插入数据
在写定时任务(作业)时,我们想在任务体里面写SQL语句时,“先删除AA表,再创建AA表时放入数据,然后再写一些其他的插入语句”,发现删除表和创建表的语句不能放在里面,否则保存不成功,但是按照下图所示,设置了分界符delimiter $后就正常可以保存了;观察一段时间后,也是正常执行的;AA表也如我们愿、不断地删除、重建;
2023-12-26 22:43:19
513
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人