AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 339312
Accepted
questionto42
questionto42
Asked: 2024-05-07 20:10:14 +0800 CST2024-05-07 20:10:14 +0800 CST 2024-05-07 20:10:14 +0800 CST

如何避免将匹配列值之一中包含 NULL 的行传递给 KingswaySoft SSIS 插件工具“高级查找”中不匹配的行?

  • 772

目的

我使用 KingswaySoft SSIS 插件工具“Premium Lookup”,但我猜内置的 SSIS“Lookup”工具可能会出现同样的问题。

我尝试匹配双列对“first_name1”和“name1”以及“first_name2”和“name2”,并且边 1 和边 2 有时都有 NULL 值。

如果查找列之一为 NULL,则整行将传递到“不匹配”输出。Premium Lookup 工具在 DFT 中如下所示:输入被传递到 32 个不匹配的行,因为两侧之一具有 NULL 值,或者因为某些其他匹配列中存在 NULL 值:

在此输入图像描述

我的目标是在其中一列中发现 NULL 时继续匹配列,以便查找继续并尝试匹配其他列,而 NULL 匹配应该是:

  • 0% 匹配
  • 或 NULL 并且根本不考虑平均分。

两者都很好,因为我还有一些经常匹配得足够好的专栏。

我要求最多 5 个匹配项,并且我会从输出中删除与主输入具有相同 ID 的任何匹配项,因为我只想查找双条目。因此,对于主数据中可能有重复的任何条目,最多应显示 5 个“下一个邻居”:

在此输入图像描述

例如,如果双方都不知道名字,甚至在主输入字段中也不知道,我仍然希望从其他列(例如“生日”或“性别”)中获得匹配项。

到目前为止我已经尝试过的

我已经尝试用空字符串替换所有 NULL 值,以避免出现 NULL。然而,即使模糊查找也必须至少匹配 1%,如果您尝试将某些内容与空字符串匹配,则无法达到 1%,因为那是 0%。

传奇:

  • 德语/英语:Vorname = 名字、Nachname = 姓名、Geburtsdatum = 生日、Geschlecht = 性别
  • 查找:第 1 面:[1],第 2 面:[2]
  • 主侧:[0] (我想将两个查找列与相同的主列匹配两次,以便将 Nachname_Vergleich 列复制到第二个 Nachname_Vergleich2 列2,并对 Vorname 列执行相同的操作)

在此输入图像描述

复选框“将空字符串视为 NULL”会使高级查找在任何输入处崩溃

我还尝试通过''工具本身再次将这些空字符串设置为 NULL 来解决这个问题,但是该设置会导致任何输入的查找崩溃,无论是否为 NULL,也在其他一些任务中进行了测试。因此,存在错误或者我不理解该设置,但我握住了该复选框:

高级比较设置 - v22.1 (22.1.0.30606) ->“将空字符串视为 NULL”

在此输入图像描述

每当您在选中复选框的情况下运行它时,它都会失败并出现三个错误:

[Premium_Lookup_trying_to_match_NULLs [74]] 错误:发生错误,并显示以下错误消息:“System.NullReferenceException:未将对象引用设置为对象的实例。(SSIS 生产力包,v22.1.0.30606 - DtsDebugHost,v13.0.4495。 10)”。

[Premium_Lookup_trying_to_match_NULLs [74]] 错误:Premium_Lookup_trying_to_match_NULLs 无法处理数据。

[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“查找表输入”(79) 时,组件“Premium_Lookup_trying_to_match_NULLs”(74) 上的 ProcessInput 方法失败,错误代码为 0xC02090F9。所识别的组件从 ProcessInput 方法返回错误。该错误特定于该组件,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

即使它有效,也无济于事,因为它只会用 NULL 替换空字符串,这可能会再次将行传递到不匹配的输出,就像一开始一样,因此替换 NULL:s 不会获得任何结果首先是空字符串。

解决方法

因此,当我将两列的匹配设置为“忽略”时,查找就会开始工作,而我不会从“高级查找”工具中获得任何匹配项。

我的解决方法是,如果第 1 侧为 NULL,则将第 1 侧替换为第 2 侧,然后,它按应有的方式运行,但是如果两侧都已填充,这也会减少一次匹配的机会,并且我想在以下情况下获得两个匹配分数两列已填充。

因此,解决方法只是第二个最佳方法,因为我希望查找只跳过 NULL:s 或给它们 0 得分,因为缺少的得分点在找到的匹配集上平均。

问题

对于具有两侧的查找与只有一侧的主输入的查找,我希望将查找的两侧与主输入进行匹配。如果存在 NULL,我不只是想将查找面 1 替换为查找面 2。我怎样才能做到这一点,同时仍然跳过 NULL:s 或给它们 0 分,而不是将行丢失到不匹配的输出,就像这里发生的那样?

ssis
  • 1 1 个回答
  • 21 Views

1 个回答

  • Voted
  1. Best Answer
    questionto42
    2024-05-08T03:13:24+08:002024-05-08T03:13:24+08:00

    总长DR

    Premium Lookup 工具可以处理 NULL 值。

    通过删除所有内容(包括高级查找框)来重建整个数据流,即使它似乎知道您同时更改了什么。在新数据流中,一切正常。确保您尝试匹配的字符串具有完全相同的格式(大小写、空格等,您可以通过选中高级查找或 SQL 中的复选框来实现这一点)。

    “快速”修复是重新构建所有内容并处理格式

    有一个快速解决方案,这是学习路径。

    我想知道为什么如果我匹配“birtday”或“sex”列,但不能匹配“first name”或“name”,我可以获得匹配分数。这是因为“Premium Lookup Component Editor”中默认有一个新的匹配对如果我匹配 的生日char(8),则默认为 75 % 速度并标记前两个复选框:

    在此输入图像描述

    但是当我添加名称列时,“高级设置”默认为第二个标记的复选框和 0% 速度:

    在此输入图像描述

    当我从头开始进行全新查找时,默认值甚至什么都没有:

    在此输入图像描述

    我有一个默认值,它不会忽略这种情况,尽管这是需要的。

    事实证明,我仅在查找端将 SQL 中的列更改为小写,而不是在主输入端,这就是为什么第 2 端名称列无法匹配。因为我认为将两个数据流更改为小写字母已经完成,所以我没有检查它,而且即使在经常阅读大写字母时我也会监督它,因为我也保留一列格式不变。

    考虑到一切都已经是小写了,我只将“相似度阈值”滚动到 1%:

    在此输入图像描述

    在此输入图像描述

    因此,如果您自己没有将文本列更改为默认值,则应该选中顶部的其他两个框。我将速度设置为 75% 最佳速度,因为它是在其他默认值中选择的,因为此模糊查找与 100% 统计数据无关。

    在此输入图像描述

    完成后,这将导致所有列的分数:

    • _similarity_side1.Geburtsdatum_INT_STR
    • _similarity_side1.Nachname_Vergleich
    • _similarity_side1.Vorname_Vergleich
    • _similarity_side2 Geburtsdatum_INT_STR
    • _similarity_side2.sex
    • _similarity_side2.Nachname_Vergleich
    • _similarity_side2.Vorname_Vergleich

    总体而言,所需的统计数据是:

    • _平均相似度_分数
    • _richness_score
    • _丰富度_等级
    • _信心

    因此,查找工具按其应有的方式工作,即使某些值为 NULL,也可以看到所有人的平均分数。

    在此输入图像描述

    再一次,我遇到了很多没有任何分数或分数太少的奇怪行,并且我找到了一些样本,通过快速研究我知道肯定存在匹配,因为其中根本没有 NULL 值。我检查了整个数据流中的每个框,在重建了一些框后,对于在清理之前有一些分数的设置来说,根本没有分数。

    我决定:

    1. 清理 SQL 中已有的文本(如果您使用高级查找选项,则不需要这样做)
    2. 从头开始重新构建整个数据流(这是必需的)。

    因此,1.):

    cast(LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(lower(A.Nachname), 'ü','ue'), 'ö', 'oe'), 'ä', 'ae'), 'ß', 'ss'), '-', ''), '`', ''''), ' ', ''), 'á', 'a'), 'é', 'e'), 'ë', 'e'), 'í', 'i'), 'ó', 'o'), 'ú', 'u'))) as varchar(100)) AS Nachname_Vergleich
    

    我确保对所有需要它的六列都完成了此操作(1x2 用于主输入,2x2 用于查找)。

    以及 2.):

    您听说过这部电视剧吗?例如“SSIS Crowd”之类的?比如:你是否尝试过断断续续地构建它?

    结果

    数据流

    在此输入图像描述

    因此,32 行的 160 意味着对于所有数据,显示“_richness_rank”的前 5 个。

    尚未完成的内容:您应该首先按“ID”对输出进行排序,然后按“_richness_rank”对输出进行排序,因为输出并不总是排序的,有时排名不合适。

    您可能想要删除任何具有相同 ID 并因此具有相同条目的匹配项,在此数据流中,这会从 32 个“ID”行中删除 10 行:

    在此输入图像描述

    表输出(统计列)

    我们看到,top 1 有时会被删除,这只是查找中具有相同主数据 ID 的 10 次。我也可以在查找之前删除这些行,但我认为最好知道 ID 是否在主数据中,只需滚动即可清楚地了解。无论如何,前五名都是一个模糊的数字,第一名或第二名应该是唯一明确的匹配。

    在此输入图像描述

    在此输入图像描述

    • 0

相关问题

  • Microsoft BI 中的 BI 开发

  • 数据仓库设计:组合日期时间维度与单独的日期和时间维度和时区

  • 我可以降级 SSIS 包以在旧版本的 SQL 上运行吗

  • 在 Microsoft BI 中查找改进材料

  • 约束 SSIS 执行进程任务的最简单方法

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve