Mysql 如何使用ETL将记录同步到NRT中的数据仓库

Mysql 如何使用ETL将记录同步到NRT中的数据仓库,mysql,pentaho,etl,Mysql,Pentaho,Etl,我是ETL的新手, 我想知道使用PDI(pentaho数据集成)等工具将一些记录从操作数据库同步到数据仓库的最佳解决方案是什么 我处于接近实时的环境中(因此我不希望每天同步1个数据,例如每5分钟同步一个数据) 我立刻想到三种方法: 在操作数据库上使用索引时间列 例如:从日期>现在()的记录中选择*间隔5分钟 但我仍然会错过一些记录或有一些副本等 使用表或同步列 例如:从同步=否的记录中选择* 使用队列服务 例如:在记录创建时,在rabbitMq(或任何其他工具)中创建一个事件,告知某些内容

我是ETL的新手, 我想知道使用PDI(pentaho数据集成)等工具将一些记录从操作数据库同步到数据仓库的最佳解决方案是什么

我处于接近实时的环境中(因此我不希望每天同步1个数据,例如每5分钟同步一个数据)

我立刻想到三种方法:

  • 在操作数据库上使用索引时间列 例如:从日期>现在()的记录中选择*间隔5分钟
但我仍然会错过一些记录或有一些副本等

  • 使用表或同步列 例如:从同步=否的记录中选择*

  • 使用队列服务 例如:在记录创建时,在rabbitMq(或任何其他工具)中创建一个事件,告知某些内容已准备好进行同步


队列是个好主意,但您可能还需要考虑复制。在PDI方面,您可以使用高水印增量提取。意思是存储上次运行时提取的最高日期/时间,然后在下次运行时选择比该日期/时间更新的所有内容,然后存储新的日期/时间。这似乎是个好主意。但是在源数据库上使用“ready\u to\u sync\u date”字段可能会更好。一旦记录准备好进行同步(已插入所有Foreign表,记录状态将不再更改…),请将ready_to_sync_字段设置为当前日期。如果我需要再次同步现有的记录(可能是源记录的更新和上下文的改变),只需用最近的一个改写日期字段就可以用来同步现有的记录。队列是个好主意,但是您可能还需要考虑复制。在PDI方面,您可以使用高水印增量提取。意思是存储上次运行时提取的最高日期/时间,然后在下次运行时选择比该日期/时间更新的所有内容,然后存储新的日期/时间。这似乎是个好主意。但是在源数据库上使用“ready\u to\u sync\u date”字段可能会更好。一旦记录准备好进行同步(已插入所有Foreign表,记录状态将不再更改…),请将ready_to_sync_字段设置为当前日期。如果我需要再次同步现有记录(可能源记录发生了更新且上下文发生了更改),只需使用较新的日期字段覆盖日期字段即可再次同步现有记录