span8
span4
我打算使用FME软件在postgis中创建一个数据库,作为postgis的读写器。我的阅读器是一个行表,我的写入器将是两个多多边形表。其中一个表有较大的多边形(例如美利坚合众国),另一个表有较小的多边形(例如美利坚合众国的各个州)。最后我想创建的数据库,将是关系类型。我可以得到我想要的最终结果,但要实现这一点,我必须创建和运行两个独立的FME工作台,但我计划能够在一个FME工作台中实现相同的最终结果。我需要两个独立的FME工作台的原因是我没有主键和外键。由于这个原因,我使用第一个工作台生成主键,第二个工作台复制和填充表中的外键,以便通过主键和外键将它们关联起来。有人能告诉我,在加载特性编写器并将它们关联到一个工作台中之前,如何生成主键吗?
你好隆,
FeatureReader生成所需的记录。
然而,正如你在附图中看到的,第一个表(FME FeatureReader Inspector)显示了在第二次运行工作区之后,FeatureReader检查器的结果。结果是表1中的所有记录。第一个结果包含表1 (id_nut1 = 1)的ID,我希望在第一次运行工作区时与表2交叉。第二个结果包含表1 (id_nut1 = 2)的ID,我希望在第二次运行工作区时与表2交叉。我想要的是,每次运行工作空间时,表1的FeatureWriter中生成的新记录都会在FeatureMerger中与表2一起使用,以便在第一个工作空间表2中有(id_nut2 = 1和id_nut1 = 1;id_nut2 = 2, id_nut1 = 1;id_nut2 = 3, id_nut1 = 1;id_nut2 = 4, id_nut1 = 1;id_nut2 = 5, id_nut1 = 1),在第二个工作区中,表2将有(id_nut2 = 6, id_nut1 = 2;id_nut2 = 7, id_nut1 = 2;id_nut2 = 8, id_nut1 = 2;id_nut2 = 9, id_nut1 = 2;id_nut2 = 10, id_nut1 = 2),以此类推。
如图所示,第一表(FME FeatureReader Inspector)和第二表(PostGIS table 1),PostGIS表1记录良好,但每当我调用FeatureReader时,它不仅读取新记录,但是所有的记录。我不知道是否可以在这里做任何事情,以便在FeatureReader中只提取在每个工作区运行的表1中生成和存储的新记录。
在第三个表(FME FeatureMerger Inspector - accept data)和第四个表(FeatureMerger Inspector - rejected data)中,我们可以验证FeatureMerger中接受的数据始终对应于PostGIS表1中生成和引入的第一个记录,运行第一个工作空间后,被拒绝的数据是运行第二个工作空间后生成并输入到PostGIS表1中的其余记录,以此类推。问题似乎就在这里,因为我的意图正好相反。我希望被接受的数据是被拒绝的数据,被拒绝的数据是被接受的数据。如表5所示(PostGIS表2),PostGIS正在为每个工作区运行注册数据,但是id_nut1总是等于1,这是错误的。表2的id_nut1必须始终等于正在运行的表1的id_nut1,在这种情况下,对于id_nut1 = 6之间的值,7,8日,9和10应该是id_nut1 = 2。
最好的问候,
塞尔吉奥·费雷拉
id_nut1 in(通过nut1_cod从“Table1”组中选择max(id_nut1))
隆,
当我将检查器连接到FeatureReader输出端口时,我不仅得到了与当前运行的工作区相对应的记录,但与迄今为止已运行并记录在第一个表中的所有工作区相对应的所有记录。但是我感兴趣的记录是与工作区相对应的记录,我现在正在跑步。
是的隆,
你好隆,
再次感谢您的帮助。
你给我的解决办法似乎管用。
然而,我还是有问题。
在FeatureWriter和FeatureReader之间的连接中,我有一个值(例如1),在FeatureReader和FeatureMerger之间的连接中,我有一个值,该值等于表中用于读取的记录的数量。
FeatureReader和FeatureReader之间的连接值不应该与FeatureReader和FeatureMerger之间的连接值相同吗?或者FeatureReader总是读取整个读表吗?
然而,我的问题是,因为我认为它只接受等于FeatureWriter和FeatureReader之间连接值的记录数,拒绝剩余(重复)记录。
当我第一次将数据加载到表中时(表中仍然没有数据),没有数据被拒绝,流程成功完成。当我重复整个过程并将数据加载到表中(现在使用来自以前流程的存储值)时,我将得到FeatureMerger拒绝错误。
我应该做什么来克服这个问题?
有没有可能或者一种方法可以在FeatureReader的输出中表明我只想从FeatureReader中输入值?
或者在FeatureReader和FeatureMerger之间的连接中,我只想要FeatureReader的输入值?
或者在FeatureMerger中表明我只想要FeatureReader的输入值?
或者告诉FeatureMerger忽略它自己拒绝的值?
最好的问候,塞尔吉奥·费雷拉
你好隆,
我用“串行”类型的列自动生成主键值,因为我没有表的主键。
所以,在第一个工作台中,我使用“串行”类型的列自动生成主键,对于每个表。
随后,在第二个工作台中,我为另一个数据库的相同表(实际上是第一个数据库的副本)从数据库的每个表复制主键。
同时,在第二个工作台中,对于第二个数据库,我在两个不同的层次结构表之间进行特性合并,这是相关的,为了从供应者(上层层次表)获取与请求者的外键对应的主键(下层层次表)。只有在这一刻,我才能得到我假装的关系数据库。
在同一个工作台中,是否有方法将主键加载到表中,然后使用它们加载较低层次表上的外键?或者,在加载表之前和生成这些键之后生成主键,使用它们作为主键加载顶层层次结构表,还是使用它们作为外键加载底层层次结构表?
我想要的是停止运行两个工作台,只有一个数据库,在这种情况下,不需要拥有第一个非关系型数据库,我只使用它作为生成主键的一种方法。
最好的问候,
塞尔吉奥·费雷拉
你好隆,
嗨@sergio_ferreira,应该有一些方法。一种可能的方法是:用两个featurewriter将所有特性写入两个表中,然后添加所需的约束(主键,外键)到带有SQL语句的表,可以由SQLExecutor执行。如。
SQL statemtns
表2添加约束pk_table2主键(id);表2添加约束fk_table2_table1外键(id)引用表1 (id);
©2019安全亚搏在线软件公司|法律