利用动态字段更新数据的方法

原文发布时间:2015-04-28 09:59:34

作者:活力贝贝

前段时间群友问到一个案例,数据库中有200张左右的表,表中有一个字段,存储了对应表需要更新的字段名和字段值,由于数据表实在太多,想要利用FME来自动按照字段和值来更新数据,部分样例数据如下:

可以看出,各行数据字段名称和数量并不统一,这种数据该如何通过转换器拆分后输出到指定字段呢?我最开始时想到的是先得到拆分后列表,然后循环降级得到项,再取字段名称和字段值,再利用AttributeCreator转换器赋值给相应字段,利用AttributeCreator赋值时,字段名可以选择下拉菜单的第二项,也就是Attribute Value(属性值)实现动态字段赋值。

由于原数据是Esri Geodatabase (Personal Geodb)格式,那么用数据库更新的方法来实现该功能应该更好,那样不用另外再新建一个写模块了,所以我决定换一种方式来做。

我所知道可以用来更新数据库的转换器有两个,一个是DatabaseUpdate,另外一个是SQLExecutor,由于DatabaseUpdate为对话框模式,且更新字段中无法选择和输入动态字段,我决定使用SQL语句来实现动态字段属性更新。

使用过SQL语句的都知道UPDATE语句基本格式,即 “UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值”,但不论哪种数据库,更新时需要注意要更新的字段和你设置的值一定要对应,简单来说,字符型的要加引号,数字型的不能加引号,如果是Oracle格式的日期型更新,还要使用“to_date”来转换格式。那么问题又来了,读进来的数据没有字段类型呢,那这语句是不是就没法写了?

有困难,找万能群呗(FME中国技术交流群43814136),@欣欣班长说,有个叫做Schema (Any Format) 的读模块,只读取格式(字段名、字段类型等信息),经测试,该模块会按数据表读取字段及字段格式信息到一个列表,包含字段名称、字段类型及字段大小、精度等信息。有了格式,模版就好搭建了。

具体实现方法是先拆分为列表后暴露所有,获取字段名和字段值,然后使用暴露出的fme_feature_type属性和Schema读模块中fme_feature_type_name属性为对应关系做挂接,得到各表下面的字段及属性列表,再使用ListSearcher(列表搜索)转换器获取相应字段的类型,依据类型生成SQL语句后更新数据库,此模版在2014SP3下运行测试数据通过,没有报错,如果数据加大后,某些类型条件没有。可能需要增加条件。

利用动态字段更新数据的方法—模板与数据

猜你喜欢

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