需求:需要从关系型数据库(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拉出时创建的重复数据。
提亚
1条答案
按热度按时间pbgvytdp1#
您希望实际创建两个表。然后在这两个上面都贴上一个视图。
您可以使用该视图查询数据。您有一个包含过去数据的基表,还有一个增量表,其中包含尚未合并到基表中的新数据。
然后,您可以编写一个视图查询来帮助保持最新数据的仅显示的10条记录。
定期使用增量记录更新基表。因此增量不会变大,可以放入内存,并可以通过Map端联接连接到基表。
这有助于解决问题,我想这对你很管用。