我在OLTP系统中有一个订单表。每个订单记录都有一个OrderStatus字段。
在Oltp系统的表中有超过1亿条记录。
我想在hdfs层上设计和填充数据仓库和数据集市。为了设计数据集市,我需要将整个order表导入到hdfs,然后需要不断地反映表上的更改。
首先,我可以在初始加载过程中使用sqoop将整个表导入到hdfs中。我可能要花很长时间,但我会这样做一次。
在更新订单记录或输入新订单记录时,我需要反映hdfs中的更改。对于如此大的事务表,我如何在hdfs中实现这一点?
谢谢
发布于 2017-09-07 14:30:12
其中一种更简单的方法是在OLTP源db中处理数据库触发器,每次发生更新时都使用该触发器将更新事件推送到Hadoop环境中。
另一方面(这取决于您的数据用户的需求),每天晚上重新加载整个数据转储可能就足够了。
此外,如果存在某种上次更改的时间戳,则可能是一种只加载最新数据并进行某种增量检查的可能方法。
这都取决于您的数据结构、需求和手头的资源。
有几种其他方法可以做到这一点,但通常这些方法涉及消息传递、开发和新服务器,我想在您的例子中,这个基础结构或那些重新来源是不可用的。
编辑
由于最近一次更改日期,您可能可以使用如下语句来提取数据
SELECT columns FROM table WHERE lastchangedate < (now - 24 hours)或者不管你加载的间隔是什么。
然后使用sqoop或ETL工具等处理数据。如果这些记录已经在Hadoop环境中可用,那么您需要UPDATE它。如果记录不可用,请使用适当的机制对其进行INSERT。这有时也被称为UPSERTING。
https://stackoverflow.com/questions/46095804
复制相似问题