在开始作业之前比较 table 个模式

Compare table schemas before starting a job

我们目前正在进行一个项目,我们需要在每次启动 Spoon 作业时检查数据库架构是否已更改,因为我们的来源是我们几乎无法控制的第三方数据库。

对我们来说最明显的解决方案是创建一个脚本来调用类似 apgdiff 的工具,然后将模式与之前生成的模式文件进行比较。如果有任何变化,我们会发送通知。

问题基本上是:这是实现此目标的最佳方法吗?

如有任何帮助,我们将不胜感激。

感谢您的宝贵时间。

P.S.: 我不确定 Whosebug 是否是解决此类问题的最佳场所,如果不是,请随时推荐任何有趣的论坛。

方案一: 假设它是您所指的 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) 您刚从数据库生成的文件。您可以使用 File Compare 步骤来执行此操作:

希望对您有所帮助。

编辑:

方案二: 您可以应用的另一个解决方案:您还可以使用 Table 比较 步骤(由 www.kjube.de 提供)来比较来自不同来源的两个表。

这一步的好处在于,您可以为要比较的两个表指定两个不同的连接。