第8页
第4排
重复的属性值是指多个功能共享同一属性的相同值的属性值。在许多情况下,这是自然的和预期的;例如,对于许多记录,地址数据库的省(县/州)字段很可能是相同的。
然而,在某些情况下,重复的值是无效的和意外的;例如,应为唯一ID的字段包含与另一个功能(1、2、3、4、4、5、6)相同的值。
重复的ID值,特别地,使用唯一索引键加载到数据库时可能导致完整性错误。
有时,只要与另一个字段具有特定关系,重复值就有效;例如:
第1列 | 第2列 |
1个 | 一 |
1个 | B |
1个 | C |
二 | 一 |
二 | B |
二 | C |
二 | C |
或:……第一列有重复项,但是,第1列和第2列的组合是独特的(因此对于2a,2b号,2摄氏度,2摄氏度,请决赛2摄氏度是无效的,因为它是与以前的组合匹配)
第1列 | 第2列 |
1个 | 一 |
1个 | 一 |
1个 | 一 |
二 | B |
二 | B |
二 | B |
二 | C |
…如果列1有重复项,但它有效,因为它与列2相匹配(因此对于2b,2b号,2b号,2摄氏度,这个2摄氏度值无效,因为它是不与以前的组合匹配)。
重复的属性值可以用复制过滤器变压器或火柴匠变压器。Matcher Transformer很好地查找一列重复的关系,并且由于另一列不同而无效(2b,2b号,2b号,2c示例)
匹配变压器也更擅长提取全部的重复记录,因为DuplicateFilter允许重复记录的第一个实例通过。但同样的行为使得复制过滤器的内存效率更高,因此,如果可能的话,最好是这样。
识别和计算重复值相当简单,但修复可能需要人工干预,取决于字段要包含的内容类型。
(注:本教程涵盖了搜索坏特性和计算它们。附加的工作区被设置为输出坏特性的计数。要输出坏特性列表,只需检查统计计算器的输出:完整的端口,而不是统计量计算器:摘要端口)。
此示例的源数据集是一个Excel电子表格,其中包含温哥华市的营业执照信息。
数据集在FME数据检查器(表视图)中如下所示:
有多列,但特别是,我们对三个关键ID号感兴趣:
文档编号是整个数据集中唯一的ID号;即每个记录都应具有不同的值。
许可证编号是可以重用的ID号,因此可能不唯一。也,同一许可证编号可能有多个记录;例如,在多个地址上运行的单个业务将在数据集中为每个地址(但具有相同的licenseNumber)保留一个记录。
许可人是每个许可证的唯一ID号;即颁发的每个许可证都应具有唯一的许可证持有人N。当然,也可能有多个记录具有此值,因为它应该匹配多个licenseNumber功能的每个记录。
这里的场景是检查重复的值。我们可以说,recordid必须是完全唯一的。也,虽然每个许可人可能有多个记录,它应该只匹配一个licenseNumber。
按照以下步骤学习如何识别重复的属性值。
1.启动FME工作台,从一个空画布开始。
从菜单栏中选择“读卡器>添加读卡器”。
将数据格式设置为Microsoft Excel。选择附加文件作为源数据集。单击参数按钮查看参数并检查源数据预览。默认参数值应该可以使用,所以单击“确定”关闭此对话框,然后再次单击“确定”添加读卡器。
2.第二步。要检查的第一个问题是重复的recordid值。我们要用一个复制变压器来做这个。所以把一个复制变压器放在画布上,已连接到读卡器功能类型(表)。
在“参数”对话框中,选择“记录ID”作为“关键属性”参数:
三。将Inspector Transformer连接到复制端口并运行转换。找到一个重复的recordid并输出到数据检查器。记录ID号是4854。
只显示重复记录;即它是的副本的记录也不会被筛选。在很多情况下,这足以满足我们的需要。然而,如果我们想同时查看这两个记录,就必须打开完整的数据集:
“高级烟花集团”营业执照注销时,看起来“基拉尼咖啡厅”(下一个将要颁发的许可证)错误地给出了他们的记录ID号。
第四章。要进行的下一个检查是重复的licensersn值。重复值本身不是问题,除非重复值的licenseNumber值不同(即licensersn:licenseNumber应为1:1匹配)。为此,我们要用火柴变压器。
将匹配变压器连接到复制过滤器上的唯一输出端口:
检查匹配器参数并设置以下内容:
5.将inspector transformer连接到matcher:matched输出端口并运行转换。将有四个记录标识为匹配:
对于“电子企业公司”,其许可证编号中似乎有一个拼写错误(由120079改为120097)。很难确定另一个副本的原因。
注意这个转换器已经给了我们两个重复记录的实例,不仅仅是其中一个;但是,这一好处会带来性能成本,所以这并不总是最好的解决方案。
6.我们可以做的最后一个检查是使用不同的许可证颁发者n进行重复的许可证编号。因为(如上所述)licenseNumber值可以重用,所以可能有很多这样的值。然而,这种复制只会在两个许可证同时处于活动状态时导致问题。
所以,首先添加一个连接到匹配器的测试变压器:不匹配输出端口:
设置参数以测试状态为“已颁发”的许可证。
第七章。将第二个匹配转换器添加到工作区,这个连接到测试仪:通过端口。像以前一样设置,除此之外,licenseNumber是所选属性,和许可方的属性必须不同:
8.将inspector transformer连接到此matcher的匹配端口并运行工作区。将有10个功能通过匹配的端口退出:
即这些功能具有与同一个许可证号码不匹配的重复许可证号码。
计算重复的属性值非常简单,这只是一个决定重复值的每个实例是否算作一个问题的例子,或者它是否是所有匹配值的一个问题(例如,如果两个功能都具有许可证编号17-107142,这算一个问题吗?还是两个?)
此外,有必要决定是单独计算所有不同类型的重复项,还是作为一个重复项。
9.要计算重复的特性,只需要在任何检查器转换器之前使用一个统计计算器。所以,在matcher:matched端口和inspector之间添加一个statisticscaleculator,并将其设置为分析任何属性。
在“计算属性”参数中,删除所有值。在totalCountAttribute下输入duplicateCount:
10.重复的recordid功能被duplicatefilter过滤,结果只有1个功能被标记为重复(它是重复的记录不计算在内)。
Matcher结果将为每个匹配提供两个功能。如果你只想把它算作一个问题,副本!!)需要过滤掉。这只需从matcher:matched到matcher:singlematched切换连接即可完成:
修复重复的属性值也很简单,前提是您只希望删除一个匹配的记录。在那种情况下,空间筛选器已删除副本的单个实例。对于matcher,它只要求保留单个匹配的特性;其他匹配项将被丢弃。
当然,有时有必要确定应该过滤哪些记录。在这种情况下使用的转换程序将根据管理要保存的记录和要丢弃的记录的规则而有所不同。有时需要保留两个记录,但为其中一个指定一个新值。在这种情况下,计数器可以提供新的ID,统计计算器可以找到ID的当前最大值,以确定下一个可用值是哪个。
在没有人工干预的情况下,很难修复由简单的打字错误(由120079改为120097)引起的重复。
这里使用的数据来源于温哥华市提供的开放数据,不列颠哥伦比亚(数据.couver.ca)。它包含根据开放政府许可证(温哥华)获得许可的信息。
很好的文章谢谢-你如何处理“计算重复”,如果多个值将一个项标记为重复项?例如:
资产ID | 友好名称 | 状态 | |
1个 | ABC123型 | 退休了 | 确定/忽略 |
二 | ABC123型 | 现有的 | 复制 |
三 | ABC123型 | 新建 | 复制 |
所以实际上,“现有的”和“新的”在复制品方面是指相同的东西。
这是个有趣的问题。值得在论坛上问一下,看看其他用户是否有好主意。我个人的第一个想法是使用测试仪分离出可接受的记录(比如status=retired),以便任何剩余的匹配都是不正确的特性。另一种方法是为特定的状态值设置标志。所以使用attributeValueMapper设置XXXX;如果状态=失效,则XXXX=0,如果状态=存在,则XXXX=1,如果状态=新,则XXXX=1。然后您可以在友好名称和XXXX上进行匹配。
所以我认为问题在于,输出来自StatisticsCalculator:Summary端口。摘要端口只是提供结果摘要的一种方法,没有任何原始属性。我们在附加的工作区中使用它,因为它们被设置为只计算坏记录,不列出它们。如果您想要坏记录列表,最简单的方法是连接StatisticsCalculator:Complete端口。然后你会得到所有的坏记录,不仅仅是它们的总数。
?2019安全亚搏在线软件公司|法律