将数据湖与已删除的记录同步

vltsax25  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(452)

我正在构建数据湖,以集成多个数据源进行高级分析。
首先,我选择hdfs作为数据湖存储。但我有一个更新和删除的数据源,我必须与数据湖同步的要求。
为了理解数据湖的不可变特性,我将考虑使用数据源中的lastmodifieddate来检测此记录是否已更新,并使用当前日期将此记录插入数据湖中。我们的想法是用max(date)选择记录。
但是,我不明白怎么做
我将检测从源中删除的记录,我将如何处理数据湖?
我应该使用像cassandra这样的其他数据存储并执行delete命令吗?恐怕它会失去不变的属性。
你能给我建议一下这种情况下的好做法吗?

a7qyws3x

a7qyws3x1#

1. 问题-从数据源中检测已删除的记录

从数据源检测已删除的记录,需要您的数据源支持此操作。最好的是删除只在逻辑上完成,例如。g。带有更改标志。对于某些数据库,还可以跟踪已删除的行(请参见sql server示例)。另外,一些etl解决方案(如informatica)提供了cdc(changeddatacapture)功能。

2. 大数据解决方案中的问题更改数据处理

有不同的方法。当然,您可以使用键值存储为整个解决方案增加某种复杂性。首先,你必须澄清,如果它也有兴趣跟踪更改和删除。您可以考虑将所有数据(新的/更改的/删除的)加载到日常分区中,并最终构建一个实际的映像(数据源中的数据)。也可以考虑像databricks delta这样的解决方案来解决这个问题,而不需要额外的存储。例如,可以使用delta对Parquet文件执行upsert操作,如下所示:

MERGE INTO events
      USING updates
      ON events.eventId = updates.eventId
    WHEN MATCHED THEN
       UPDATE SET
       events.data = updates.data
    WHEN NOT MATCHED
       THEN INSERT (date, eventId, data) VALUES (date, eventId, data)

如果您的解决方案还需要通过密钥进行低延迟访问(例如。g。为了支持一个api),那么像hbase、cassandra等键值存储将非常有用。

roejwanj

roejwanj2#

在hadoop中创建datalake时,这通常是一个约束,不能只更新或删除其中的记录。你可以尝试一种方法
添加lastmodifieddate时,还可以再添加一个列命名状态。如果记录已删除,请将状态标记为已删除。所以下一次,当你想查询最新的活动记录时,你可以过滤掉它。
如果您每天都在执行acid操作,那么还可以使用cassandra或hbase(任何nosql数据库)。如果不是,第一种方法将是在hadoop中创建datalake的理想选择

相关问题