如何通过Nifi或SQOOP使RDBMS与配置单元保持同步,以更新同一记录而不是创建新记录

b91juud3  于 2022-09-20  发布在  Sqoop
关注(0)|答案(1)|浏览(201)

需求:需要从关系型数据库(SQL Server)中获取上千个表,并推送到Hive中,以便近实时地运行分析和生成报表。我正在使用Nifi从RDBMS表中读取数据,并推动将表作为外部表进行组织。

问题:假设我在RDBMS中有一个表=Employee,其中有10条记录。我在Nifi中运行一个处理器,它不断地读取我的Employee表,以获取基于“lastModifiedTimeStamp”列的新更新的记录。现在假设配置单元和RDBMS表是同步的,两者都有10条记录,现在我在RDBMS中更新了1行,现在Nifi将读取这条新更新的记录,“PutORC”/“PutHDFS”处理器将新记录放在指定HDFS目录下的新外部文件中。

现在,当我在配置单元中运行“SELECT*FROM Employee”时,它返回11行而不是10行。我希望它更新现有记录(如果存在)。

问题:RDBMS中的每一次更新,我的配置单元表都会随着重复记录而呈指数级增长。如何几乎实时地与配置单元保持所有更新的记录同步?使用配置单元/Hadoop的工作人员如何在查询时管理这些重复数据?这是正确的做法吗?

我知道有合并命令可以合并2个表以保持数据同步,但这将是非常繁重的操作,因为我们将需要每5-10分钟获取整个表的数据到临时表。

也许PutHiveQL可以在这里帮助更新Hive中的记录,但我现在确定,如何帮助?我需要从CDC SQL Server表中提取数据吗?有什么办法吗?

注意:我知道我们不应该使用HIVE作为RDBMS,但由于HIVE现在支持更新/删除操作,我想知道什么是正确的方法,以及人们如何使用这种方法,并管理每次从RDBMS拉出时创建的重复数据。

提亚

pbgvytdp

pbgvytdp1#

您希望实际创建两个表。然后在这两个上面都贴上一个视图。

您可以使用该视图查询数据。您有一个包含过去数据的基表,还有一个增量表,其中包含尚未合并到基表中的新数据。

然后,您可以编写一个视图查询来帮助保持最新数据的仅显示的10条记录。

定期使用增量记录更新基表。因此增量不会变大,可以放入内存,并可以通过Map端联接连接到基表。

这有助于解决问题,我想这对你很管用。

相关问题