你好!
我正在将一些数据与包含在不同csv文件中的信息结合起来。对于这次加入,我使用数据库连接程序。因为它是相当大的csv文件(超过700万个条目)。创建索引需要花费一些时间才能真正进行连接。
然而,由于输入数据也很大,我正在处理瓷砖连接,但这意味着对于每一块瓷砖,DatabaseJoiner在加入之前正在重新创建自己的索引,等等…
它是一个参数还是其他什么东西来写这个创建的索引,这样它就只需要再读一次就可以在其他图块上使用了?
多谢!
尼古拉斯
我看到数据库连接转换器只支持文件geodatabase的开放式API,如果它也支持arcObjects,这将很有用。
我会做一些SQL喜欢的遗产或regex工作,但我的问题是如何将单个特性与整个数据库字段中的每个值进行比较。
例如。我的账单数据集中有150个地址记录。我需要比较拥有超过100000个地址条目的Againsta主数据库。问题是数据在任何一个源中都不一致,规范化数据不是一个选项。我的账单数据可能有一个地址“150 MAINST”,主数据库中有一个记录有“Parkview Apartments150 MAINST”。我想取地址的100个输入值中的每一个,并与主数据库中的所有100000个条目进行比较,以生成一个匹配记录列表,其中主数据库“包含”我的输入账单地址的值。
唯一能使我输入的每一条记录与主数据库中100000条记录进行比较的方法是建立一个巨大的矩阵,将我的每个地址记录账单记录与主数据库中的每一条记录相结合,然后用条件测试过滤器在整个过程中进行简单的处理。
我在2017年的版本中开发了一个FME工作流程,并将其升级到亚搏在线2018年的版本中运行,但在2018年的版本中运行DatabaseJoiner Transformer时,我注意到处理速度大大减慢。我可以逐字计算每一个功能加入。这通常发生在2017年版本中最慢的5秒钟内,事实上,我可以在与2018年版本相同的工作流(数据和工作流)中运行databasejoiner,它将运行得非常快。亚搏在线这可能表明变压器中存在缺陷。有人能帮我查出情况吗?我过去可以在不到3小时内运行此工作流,但在2018年的版本中亚搏在线,完成处理需要9小时以上。
我有一个自定义转换器,它将API调用结果缓存到PostgreSQL表中。它在密钥上尝试一个databasejoiner,如果找到匹配的记录,它将连接的特性直接传递到主输出端口。否则,它调用API,将结果传递给sqlExecutor以插入它,以便在传递给转换器的后续功能的相同键值上进行联接。
不幸的是,在同一个工作区执行期间,DatabaseJoiner找不到SQLExecutor为后续功能存储的记录。我在sqleexecutor中尝试了显式提交(使用适当的分隔符声明),并在sqleexecutor之后尝试了5秒的每功能减速器,以防在fme工作台和postgresql之间存在某种竞争条件。运气不好。我仍然会遇到重复的密钥冲突,因为DatabaseJoiner的失败会导致同一个密钥被发送到API,并通过sqlExecutor再次尝试存储。我甚至尝试将sqlexecutor移到另一个工作区(通过workspaceRunner调用)。但错误依然存在。
此工作区中没有并行性,似乎每次调用sqleexecutor时都提交了插入。所以我感觉不到会导致这种行为的种族条件。希望有人能发光。
我已经加载了100个地址(城市,状态,街道,zip)从一个文件,我需要验证每个地址是否已经存在于数据库中或必须添加。
如何在FME中执行此操作?注意性能?
非常感谢您的帮助!
我注意到我不能在databasejoiner中使用参数值。我错过什么了吗?
一个例子:
获取要使用的用户参数时,它是一个属性,databasejoiner将另一个属性从Excel文件连接到我的功能(屏幕截图的上部)。
直接使用用户参数连接Excel中的属性时,变压器参数按钮显示红色,没有输出。用户参数的属性“attribute assignment”设置为“default”。
我在论坛或数据库连接者的文档中找不到相关信息。有人能提出理由吗?使用参数蚀刻机的解决方案很容易解决问题,但我想知道为什么不能直接使用参数.
我正在使用FME 2017.1.0.0(17539-Win64版本)。
在zip文件中,您可以找到我的示例工作区和数据。