我在OLTP系统中有一个订单表。 每个订单记录都有一个OrderStatus字段。
当最终用户创建订单时,OrderStatus字段设置为"打开"。
当有人取消订单时,OrderStatus字段设置为"已取消"。
订单处理完成后(转换为发票),OrderStatus字段设置为"关闭"。
Oltp系统中的表中有超过一亿条记录。
我想在hdfs图层上设计和填充数据仓库和数据集市。 为了设计数据集市,我需要将整个订单表导入到hdfs,然后我需要不断反映表上的变化。
首先,我可以使用sqoop在初始加载过程中将整个表导入hdfs。我可能需要很长时间,但我会这样做一次。
更新订单记录或输入新订单记录时,我需要反映hdfs中的更改。如何在hdfs中为这么大的事务表实现这个目标?
由于
答案 0 :(得分:-2)
更简单的方法之一是在OLTP源数据库中使用数据库触发器,并且每次更新发生时都会使用该触发器将更新事件推送到Hadoop环境。
另一方面(这取决于您的数据用户的要求),每晚重新加载整个数据转储可能就足够了。
此外,如果存在某种最后更改的时间戳,则可能是仅加载最新数据并执行某种增量检查的可能方法。
这一切都取决于您的数据结构,您的要求和手头的资源。
还有其他几种方法可以做到这一点,但通常涉及消息传递,开发和新服务器,我认为在您的情况下,此基础架构或那些资源不可用。
修改强>
由于您有上次更改日期,因此您可以使用
之类的语句提取数据SELECT columns FROM table WHERE lastchangedate < (now - 24 hours)
或任何你的加载间隔可能是。
然后使用sqoop或ETL工具等处理数据。如果您的Hadoop环境中已有记录,则需要UPDATE
它。如果记录不可用,请使用适当的机制INSERT
。这有时也称为UPSERTING。