我们目前正在开展一个项目,我们需要在每次启动 Spoon 作业时检查数据库架构是否已更改,因为我们的来源是我们几乎无法控制的第三方数据库。
对我们来说最明显的解决方案是创建一个脚本来调用像apgdiff这样的工具,然后将架构与之前生成的架构文件进行比较。如果有任何变化,我们会发送通知。
问题基本上是:这是实现这一目标的最佳方式吗?
任何帮助,将不胜感激。
谢谢你的时间。
PS:我不确定stackoverflow是否是解决这类问题的最佳场所,如果不是,请随时推荐任何有趣的论坛。
解决方案一:
假设你指的是PostgreSQL数据库,如果你有足够的权限INFORMATION_SCHEMA
,我建议你这样查询数据库:
select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name = '<name of table>';
就像您提到的那样,以持久的方式存储预期结果,然后在子转换中比较结果。持久模式可以是一个 CSV 文件,它存储如下定义:
app_id character varying 255
platform character varying 255
etl_tstamp timestamp without time zone (null)
collector_tstamp timestamp without time zone (null)
dvce_tstamp timestamp without time zone (null)
event character varying 128
event_id character 36
然后只需简单地比较这两个文件:(1) 包含预期模式定义的文件和 (2) 您刚刚从数据库中生成的文件。您可以使用文件比较步骤来执行此操作:
我希望这能有所帮助。
编辑:
解决方案二: 您可以应用的另一个解决方案:您还可以使用表格比较步骤(由 www.kjube.de 提供)来比较来自不同来源的两个表格。
这一步的好处是您可以为要比较的两个表指定两个不同的连接。