反映hdfs中大表的更改

时间:2017-09-07 12:00:32

标签: hdfs data-warehouse

我在OLTP系统中有一个订单表。 每个订单记录都有一个OrderStatus字段。

  •   

    当最终用户创建订单时,OrderStatus字段设置为"打开"。

  •   

    当有人取消订单时,OrderStatus字段设置为"已取消"。

  •   

    订单处理完成后(转换为发票),OrderStatus字段设置为"关闭"。

Oltp系统中的表中有超过一亿条记录。

我想在hdfs图层上设计和填充数据仓库和数据集市。 为了设计数据集市,我需要将整个订单表导入到hdfs,然后我需要不断反映表上的变化。

首先,我可以使用sqoop在初始加载过程中将整个表导入hdfs。我可能需要很长时间,但我会这样做一次。

更新订单记录或输入新订单记录时,我需要反映hdfs中的更改。如何在hdfs中为这么大的事务表实现这个目标?

由于

1 个答案:

答案 0 :(得分:-2)

更简单的方法之一是在OLTP源数据库中使用数据库触发器,并且每次更新发生时都会使用该触发器将更新事件推送到Hadoop环境。

另一方面(这取决于您的数据用户的要求),每晚重新加载整个数据转储可能就足够了。

此外,如果存在某种最后更改的时间戳,则可能是仅加载最新数据并执行某种增量检查的可能方法。

这一切都取决于您的数据结构,您的要求和手头的资源。

还有其他几种方法可以做到这一点,但通常涉及消息传递,开发和新服务器,我认为在您的情况下,此基础架构或那些资源不可用。

修改

由于您有上次更改日期,因此您可以使用

之类的语句提取数据
SELECT columns FROM table WHERE lastchangedate < (now - 24 hours)

或任何你的加载间隔可能是。

然后使用sqoop或ETL工具等处理数据。如果您的Hadoop环境中已有记录,则需要UPDATE它。如果记录不可用,请使用适当的机制INSERT。这有时也称为UPSERTING。