在FME里执行SQL命令

原文发布时间:2011-09-07

作者:糖糖

在FME里同样能直接执行SQL命令。相关的转换器包括SQLCreator、SQLExecutor、ClassicSQLExecutor。下面分别对比下这几个转换器的使用方法

一、SQLCreator直接执行SQL语句,不需要输入数据,通过转换器直接连接数据库执行查询,输出查询结果为FME要素,一个返回结果输出一个FME要素。支持的格式有:


 二、SQLExecutor,执行要素与数据库的连接,输入要素作为触发器,通过转换器对数据库进行查询操作,将查询的结果添加到输入要素上,通过RESULT端口输出;触发要素通过TRIGGER端输出。同样支持上面的格式。

     


三、ClassicSQLExecutor与SQLExecutor的用法很相似,同样是通过输入触发要素,然后用转换器连接数据执行SQL查询,最后将查询结果作为属性添加到触发要素上输出。

        

 

该转换器支持的格式如下:

            

 下面用案例来比较这三个转换器的使用方法:

            

1、用SQLCreator执行,设置与输出结果分别如下:

    

        

说明:可以看到这个转换器设置比较简单。通过Reader参数连接数据库,然后在SQL Statement中写入查询命令,就能执行SQL查询。查询结果为4条记录,返回了4个要素。注意的是,暴露的属性只能是返回你查询的属性。例如在这个例子中,虽然在属性暴露的参数中我设置的是a和b,如左图红圈,但是结果只暴露出属性a,如右图红圈,就是因为查询的只有属性a.
 
2、用SQLExcuter执行。转换器需要输入一个触发要素,我随意找了要素个数为1377的线状SHP数据做测试设置。 转换器的设置如下:

                

转换后如下图:


    

框选该要素的位置,查询出4个要素,每个要素都带有一个属性a的返回值。

3、用执行ClassicSQLExecutor。该转换器也会将返回值添加到要素的属性中,如果返回一条记录,就自动添加该记录添加到每个要素的属性中,如果返回了多个记录,例如本案例中返回了4个值,则需要在以下所示的步骤中,设置列表名称,将多个返回值存储在列表里,然后添加到每个要素中:

        

然后暴露属性,暴露只能暴露能实际返回的属性

        

运行的结果如下:

        

可以看到,会把返回的记录全部添加到同一个要素中,这是与SQLExecutor的不同之处,SQLExecutor是每个返回值添加一次。


总结

从案例的结果可以分析出:SQLCreator是最简单直接的语句运行转换器;SQLExecutor和ClassicSQLExecutor都需要输入触发要素,并将SQL查询的结果值作为属性添加到书法要素上。不同的是,前者对每个结果都对每个要素添加一次,后者是将所有的查询结果添加到每个要素上。共同点就是,对于属性的暴露都是支持的,不过都只能针对查询的属性字段,而不是整张表的查询字段。


附加

同事说这几个转换器用得不算太多,对于orcal数据的查询可以用专门的OracleQuerier转换器,利用空间交互关系查询表中的记录。不过这是专门针对空间数据的。同样地对于SDE也有专门的查询转换器ArcSDEQuerier,她的建议是不同的环境用对应的转换器比较好!



猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80969411
今日推荐