FME与空间数据库更新

原文发布时间:2014-03-07

作者:一峰

前篇文章介绍了空间数据库的读/写以及一些参数的设置,其中介绍到了Update Key Fields这个参数,用于数据库更新,下面介绍如何进行设置来完成数据库的更新。

1)我们都知道,数据更新有3个操作,插入/修改/删除,那么FME是怎么知道被更新的要素到底是插入/删除/还是修改呢?

原来FME是通过一个格式属性(fme_db_operation)来告诉他自己的,fme_db_operation=insert表示插入;fme_db_operation=delete表示删除;fme_db_operation=update表示修改。因此我们在做模板的时候就需要对更新的要素创建这个属性,并赋予对应的值:如下图的AttributeCreator

        

2FME通过fme_db_operation字段知道了他应该怎么操作,但是这个字段的值也是我们赋予他们的,那么我们又是通过什么条件判断出哪些要素是插入,哪些是删除,哪些是修改的呢?

这个问题就涉及到了数据源的变化监测,也就是我们如何对数据源进行数据变化检测的。

1Oracle提供了变化检测机制CDC,用operation字段记录数据源的变化,I:插入;D:删除;UN:修改,CDC介绍:http://blog.csdn.net/chentaocba/article/details/7435131,因此我们就可以通过operation字段来判断,如上图中的testfilter

2FME也提供了变化检测:ChangeDetector(变化检测),输出端UNCHANGED表示没有发生变化,ADDED端口表示新增的,DELETED端口表示删除,那么ADDED端口应该设置fme_db_operation=insertDELETED端口设置fme_db_operation=deleteChangeDetector的详细用法参见10分钟学习视屏:

3)虽然我们通过fme_db_operation告诉了FME如何执行更新操作,但是要素级更新需要指定更新字段啊,这就是写模块中的Update Key Fields参数的作用(注意更新关键字段必须唯一),如图:


通过上述设置,我们就能够完成对数据库的更新操作。



猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80884102