斯潘8
斯潘4
有很多方法可以“让数据库完成工作”,我们将看看如何使用FME对Oracle进行更有效的写入。
使用FME写入数据库时,如果违反表上的约束,则可能发生错误。约束是限制数据库中列的可能值的规则。典型约束包括非空,独一无二,和键(主要和外部)。下面概述的练习将介绍一种方法来处理由于写入由外键联接的表而导致的加载失败。
尽管本练习使用甲骨文公司数据库,所讨论的概念和方法可应用于其他数据库,如《PostgreSQL》/邮政地理信息系统,和SQL服务器.
本练习的目标是显示写入具有约束的数据库表时所具有的选项,例如外键约束。在这个例子中,您将加载水管网(wmans),并创建具有“管道制造商”属性的资源表(wasset)。这两个表通过一个外键约束(称为wmain_wasset)进行关联。
运行工作区
1。打开工作区:databasewrite-start.fmw。跑吧。
工作区正在写入Oracle中的两个联接表。父表(wasset)将manufacturerID作为主键,子表(wmain)将manufacturerID作为外键。
工作区无法引发以下错误:
|错误执行语句'insert into“wmain”(“mainid”,“已启用”,…)值(:“mainid”,:“已启用”,“没有成功;错误为“ora-02291:违反了完整性约束(wmain-wasset)-找不到父键”。(serverType='oracle8i',服务器名称=`',用户名=` ',密码=`***',dbname=`')
发生此错误的原因是违反了wmain表上的外键约束(称为wmain-wasset)。为了满足约束条件,在写入具有外键的子表之前,必须先写入父表。
以下示例说明了解决此问题并写入相关表的不同方法。
示例1-使用FeatureHolder
featureholder用于保存指向子表(wmain)的功能。因为只有少数特性被写入父表(wasset),所以它能够在特性持有者释放特性之前完成写入。这实际上是工作流的阶段。亚搏在线
1。在运行此示例之前,您需要清理数据库表。使用sqlcreator转换器删除并重新创建表。打开变压器属性,选择SQL语句并选择“运行…”,然后选择“取消”退出Transformer属性。
2。添加一个特征拥有者在主桌前。
三。运行工作区并检查日志文件和结果。
FeatureHolder对于功能数量较少的工作区很有用。如果有大量的记录被写入表格并保存在特征持有者中,它将影响整体性能。
示例2-使用连接运行时顺序
可以使用连接运行时顺序选项控制退出转换器的功能的顺序。此示例使用连接运行时顺序确保先插入父记录。
1。在运行此示例之前,您需要清理数据库表。使用sqlcreator转换器删除并重新创建表。打开变压器属性,选择SQL语句并选择“运行…”,然后选择“取消”退出Transformer属性。
2。从上一步中删除FeatureHolder Transformer。
三。通过右键单击退出attributeManager的一个输出连接器来设置连接运行时顺序。确保先连接Wasset。这将确保在相应的wmain记录之前插入wasset记录,确保满足wmain约束。
4。将每个事务的功能设置为1。您必须使用1的转换间隔来确保在插入wmain记录之前已提交了wasset记录。
5。运行翻译。
如你所见,将事务间隔设置为1对性能有很大影响,因为对编写的每个特性执行提交。它确实确保在将记录写入子表之前将其写入父表。
示例3-使用FeatureWriter
FeatureWriter Transformer是另一种写入数据的方法。将写操作移到工作区工作流中可以使您在编写功能类型的顺序以及如何预处理和后处理数据方面具有更大亚搏在线的灵活性。
在本例中,您将使用SQL调用来禁用并启用wmain _wasset foreign key约束。在此期间,您将加载数据。
1。如上面的示例2所述,使用sqlcreator删除并创建表,这样您就可以从一个干净的石板开始。
2。禁用或删除Oracle编写器。
三。为Oracle数据库添加一个sqlcreator,并添加以下SQL:
fme_sql_delimiter;alter table“wmain”disable constraint wmain_wasset;
在打开任何FME读卡器之前执行sqlCreator,因此,我们可以保证在开始编写任何特性之前删除约束。
4。将FeatureWriter添加到工作区画布。打开FeatureWriter参数对话框。选择Oracle空间格式并选择数据集。
5。导入Oracle表,wmain和wasset使用Oracle非空间格式。
6。如步骤7所示连接FeatureWriter。功能类型的顺序并不重要,因为我们禁用了约束。
7。为Oracle数据库添加一个SQLExecutor,并添加以下SQL:
fme_sql_delimiter;alter table“wmain”启用约束wmain_wasset;
8。运行工作区并检查结果。
每个例子的优缺点是什么?也许每种方法更适合于不同的场景和表约束,如1:m m:n等。
哪个性能最好?你能用性能来换取简单吗?
哪个示例最适合更新工作流?亚搏在线
还有其他方法吗?
如果有错误怎么办?哪种方法最容易恢复?
这个属性计算器可用于加载前检查支持的条件。这允许用户查看和更正可能导致写入失败的任何功能。
?2019安全亚搏在线软件公司|合法的