《BI那点儿事》数据流转换——模糊查找转换

原文:《BI那点儿事》数据流转换——模糊查找转换

BI项目中经常会有一些提取,转换,数据处理(ELT)的工作,其中最主要的是处理过赃数据。假设在项目中我们向数据库中注入了测试数据,但是通过一个外键从另外一个表中载入数据的时候没有对应的数据,那么这一行就是赃数据。这时候可以使用SQL中的Sound-Ex,full-text,相似度算法等方法查找。这种策略需要花费大量的时间和精力来设计算法,测试,维护,并且它们都是基于词汇的,复用的可能性很小。也可能你会放弃自己处理并把它抛给一些有经验的高手专家来做这些工作,也可能你会在表中添加一些新的数据已达到外健关联的目的,但是这种方法被称作Lazy-add(懒惰的做法)。因为是手工添加数据难免会带来拼写错误,例如将职务名称president错误地写成平parsedent,将further错误地写成future,将present错误地写成parent,等等。
模糊查找和模糊分组提供一种新的方法来处理这种赃数据。这种转换使得处理数据变得简单,可兼容,可伸缩,可复用,它可以明显地减少误差。如果你的表中有赃数据,或者你开始处理数据,你会使用模糊分组来找出冗余数据。模糊分组会对表中的一列数据进行分析归纳出相似的并假设他们是某一个单词的错误拼写,进而计算出他们之间的相似度,利用这个相似度的数据可以 清洗表中数据。
如果你使用模糊查找来校正数据,建议先使用关键词查找,这是因为模糊查找非常耗费资源。它会在数据表和参照表中建立索引。可以保存这些索引,但是这样做会耗费耗费掉磁盘空间,并在运行的时候耗费宝贵的内存资源。通过模糊查找得到一个关键词列表是一个很好的策略。通过关键词查找找出出现频率较高的关键词,模糊查找再使用内连接来超出匹配项。如果还是有些数据不能匹配,将会把它标记为unknow。

模糊查找要求输入流中至少有一列是字符串,这点和关键词提取有些不同,关键词提取要求是NULL-terminated Unicode 字符串。模糊查找还需要连接到一个外键表作为参照。模糊查找的输出列如下:

  • 输入数据:这些数据包含输入流中的数据和需要从模糊查找中传递的数据
  • 参照表数据:这些数据包含参照表中的数据
  • 相似度:这一列数据是介于0和1之间的浮点数,用来描述相似程度,相似度是1表明匹配完全成功
  • Confidence:这一列数据是介于0和1之间的浮点数,用来描述匹配的信任程度。Confidence是另外一种形式的相似度,他不是通过一对一的比较得来,而是通过一对多的比较得来。它可以获得更加准确的数据。

在模糊查找的编辑界面有3个标签

  • 参照表:在这个标签内设置一个连接到参照表的OLE DB Connection。比较之前模糊查找参照这个表中的数据建立一个索引。在这个标签可以选择保存这个索引或者使用先前运行时保存的索引,还可以维护当前索引,这样会删除以前的索引保存本次运行时得到的索引。这里要提醒的是如果处理的数据量很大,索引也会变得很大。
  • 列:在这个标签内设置输入数据流中列和参照表中的一列的映射。用鼠标拖拽的方法将他们连接起来。还可以在输出数据流中添加一个外键列,只需要在Available Input Columns中选择这个列旧可以了。
  • 高级:这个标签内设置查找算法。Maximum number of matches to output per lookup设置每一行数据最多可以有多少个匹配。默认的值是1,如果设置大于这个值,结果中将产生更多的行,但是如果输入流数据中有很多类似的数据这种设置还是需要的。Similarity threshold用来设置相似度阀置。Token delimiters用来设置字符分割符,默认的分割符是常见字符串分割符。

尽管模糊查找通过一些简单的设置来实现复杂的逻辑,结果页并不是完美的。需要花费一些时间来观察不同设置产生的不同结果。

建立测试环境:
使用下面的内容创建一个文本文件并命名:empdata.txt,这个表包含的内容是个人信息。我们可以看到这个表中的数据参差不齐,这些是ETL过程中常见的情况。

EMPID    TITLE    LNAME
00001    EXECUTIVE VICE    PRESIDENWASHINGTON
00002    EXEC VICE PRES    PIZUR
00003    EXECUTIVE VP    BROWN
00005    EXEC VP    MILLER
00006    EXECUTIVE VICE    PRASIDENSWAMI
00007    FIELDS OPERATION MGR    SKY
00008    FLDS OPS MGR    JEAN
00009    FIELDS OPS MGR    GANDI
00010    FIELDS OPERATIONS    MANAGHINSON
00011    BUSINESS OFFICE    MANAGERBROWN
00012    BUS OFFICE MANAGER    GREEN
00013    BUS OFF MANAGER    GATES
00014    BUS OFF MGR    HALE
00015    BUS OFFICE MNGR    SMITH
00016    BUS OFFICE MGR    AI
00017    X-RAY TECHNOLOGIST    CHIN
00018    XRAY TECHNOLOGIST    ABULA
00019    XRAY TECH    HOGAN
00020    X-RAY TECH    ROBERSON

在数据库中使用下面的语句创建一个参照表,创建Occupation表:

CREATE TABLE [Occupation]
    (
      [OccupationID] [smallint] IDENTITY(1, 1)
                                NOT NULL ,
      [OccupationLabel] [varchar](50)
        NOT NULL
        CONSTRAINT [PK_Occupation_OccupationID]
        PRIMARY KEY CLUSTERED ( [OccupationID] ASC ) ON [PRIMARY]
    )
ON  [PRIMARY]
GO
INSERT  INTO [Occupation]
        SELECT  'EXEC VICE PRES'
INSERT  INTO [Occupation]
        SELECT  'FIELDS OPS MGR'
INSERT  INTO [Occupation]
        SELECT  'BUS OFFICE MGR'
INSERT  INTO [Occupation]
        SELECT  'X-RAY TECH'

SELECT  *
FROM    [Occupation]   

模糊查找可以找出数据中可能重复的行,例如可以找出包含“Main St.”和“Main Street”的两行然后将他们合并成一行。模糊查找任务可以检查数据输入并清除脏数据。模糊查找任务通常放在查找任务之后,查找任务找到匹配数据,然后通过模糊查找没有匹配的数据。
数据流任务步骤:






运行结果:

时间: 2024-08-01 14:39:20

《BI那点儿事》数据流转换——模糊查找转换的相关文章

《BI那点儿事—数据的艺术》目录索引

原文:<BI那点儿事-数据的艺术>目录索引 原创·<BI那点儿事-数据的艺术>教程免费发布 各位园友,大家好,我是Bobby,在学习BI和开发的项目的过程中有一些感悟和想法,整理和编写了一些学习资料,本来只是内部学习使用,但为了方便更多的BI开发者,推动BI企业级应用开发,决定整理成一部教程,并在网络上免费发布该教程,希望为BI时代贡献绵薄之力! 本教程是由Bobby参考官方文档,综合市面相关书籍,经过充分的吸收消化,结合开发实践的而创作的一部原创作品,为了本教程及早与广大读者同仁

《BI那点儿事》数据流转换——模糊分组转换

原文:<BI那点儿事>数据流转换--模糊分组转换 在模糊查找中我们提到脏数据是怎样进入到表中的事情,主要还是由于一些"Lazy-add"造成的.这种情况我们的肉眼很容易被欺骗,看上去是同一个单词,其实就差那么一个字母,变成了两个不同的单词.一个简单的例子是X-Ray Tech和xRey,我们很有可能认为他们是同一个职务,CT操作员,但是如果让计算机来处理的话,它们是两种截然不同的东西.和模糊查找一样,模糊分组可以查找出多行中出现的类似的单词进行归类.我们可以使用这些归类得到

《BI那点儿事》数据流转换——字符映射表

原文:<BI那点儿事>数据流转换--字符映射表 特征映射转换如图展示数据流中列的特征,它的编辑界面很简单,只有一个标签界面,点击要进行映射的列,可以选择需要添加新列或需要更新的列.可以在Output Alias列中给原来的列一个别名,选择要进行的操作,可以进行的操作类型有: Byte Reversal:逆转数字位的顺序,例如数据0x1234 0x9876的逆转结果是0x4321 0x6789,这种操作和LCMapString,LCMAP_BYTEREV选项有相同的操作结果 Full Width

《BI那点儿事》数据流转换——OLE DB 命令转换

原文:<BI那点儿事>数据流转换--OLE DB 命令转换 OLE DB命令对数据流中的数据行执行一个OLE DB命令.它针对数据表中的每一行进行更新操作,可以事先将要更新的数据存放在表中.或者针对一个有输入参数的存储过程,可以将这些参数存放在一个数据表中,不用每次都输入参数.示例数据准备: CREATE TABLE SourceParametersForStoredProc ( Param1 INT, param2 INT ) CREATE TABLE DestinationOLEDBCom

《BI那点儿事》数据流转换——百分比抽样、行抽样

原文:<BI那点儿事>数据流转换--百分比抽样.行抽样 百分比抽样和行抽样可以从数据源中随机选择一组数据.这两种task都可以产生两组输出,一组是随机选择的,另一组是没有被选择的.可以将这些选择出的数据发送到开发或者测试服务器上.这个Task的最合适的应用是建立数据挖掘模型然后,使用这些抽样数据来验证这个模型. 编辑这种task,选择要抽取的行数或者 百分比,如图.百分比抽样按百分比从数据源中随机选择数据,行抽样从数据源中随机选择具体的行数.可以对选中的数据和未被选择的数据命名.最后一个选择项

《BI那点儿事》数据流转换——排序

原文:<BI那点儿事>数据流转换--排序 排序转换允许对数据流中的数据按照某一列进行排序.这是五个常用的转换之一.连接数据源打开编辑界面,编辑这种任务.不想设置为排序列的字段不要选中,默认情况下所有列都会选中.如图所示,按照TotalSugar_Cnt排序,并将所有列输出. 在底部的表格中,可以设置输出列的别名,是否按照列来排序.Sort Order列显示列将会第一排序,第二排序还是第三排序.双击列去除重复的排序列.

《BI那点儿事》数据流转换——导入列、导出列

原文:<BI那点儿事>数据流转换--导入列.导出列 导入列: 导入列例子现在来做一个例子:创建路径D:\Pictures随便在路径D:\Pictures中粘贴4个比较小的图像文件命名为01.png.02.png.03.png.04.png在路径D:\Pictures内创建一个txt文件命名为filelist.txt,文件内容如下D:\Pictures\01.pngD:\Pictures\02.pngD:\Pictures\03.pngD:\Pictures\04.png运行下面的SQL语句创建

《BI那点儿事》数据流转换——透视

原文:<BI那点儿事>数据流转换--透视 这个和T-SQL中的PIVOT和UNPIVOT的作用是一样的.数据透视转换可以将数据规范或使它在报表中更具可读性. 通过透视列值的输入数据,透视转换将规范的数据集转变成规范程度稍低.但更为简洁的版本.例如,在列有客户名称.产品和购买数量的规范的 Orders 数据集中,任何购买多种产品的客户都有多行,每一行显示一种产品的详细订购信息.此时,如果对产品列透视数据集,透视转换可以输出每个客户只有一行的数据集.这一行列出该客户购买的所有产品,产品名称显示为列

《BI那点儿事》数据流转换——多播、Union All、合并、合并联接

原文:<BI那点儿事>数据流转换--多播.Union All.合并.合并联接 建立测试数据: CREATE TABLE FactResults ( Name VARCHAR(50) , Course VARCHAR(50) , Score INT ) INSERT INTO FactResults ( Name , Course , Score ) SELECT '张三' , '语文' , 90 UNION ALL SELECT '张三' , '数学' , 83 UNION ALL SELEC