【问题标题】:How to handle Slowly Changing Dimension Type 2 in Redshift?如何处理 Redshift 中缓慢变化的维度类型 2?
【发布时间】:2016-03-21 17:37:32
【问题描述】:

我想跟踪用户名更改超时。

我在 Redshift 中有以下用户表:

id     username     valid_from     valid_to     current    
--------------------------------------------------------
1      joe1         2015-01-01     2015-01-15   No
1      joe2         2015-01-15     NULL         Yes

我的源数据来自 RDS Postgres。我正在考虑如何处理这个问题的几个选项:

1) 创建 users_history 表并开始在 RDS Postgres db 中跟踪它。这需要我对我的应用程序进行更改,并且此表可能会变得很大

2) 有一个 ETL 过程并像每 5 分钟一样查询用户源表以查找新的更改(按 last updated_at 排序)并将其转储到 DynamoDB。

3) 让 ETL 进程将数据转储到 S3,然后将其复制到 Redshift 内的临时表中并在那里进行查询更新

从长远来看,您能否提供一些可扩展且易于维护的建议?请记住,这些表可能很大,我将跟踪许多表的 SCD。

谢谢。

更新 1:我与 AWS 支持人员聊天,他们向我展示了这个,似乎是一个很好的解决方案:http://docs.aws.amazon.com/redshift/latest/dg/merge-specify-a-column-list.html

【问题讨论】:

    标签: postgresql amazon-redshift


    【解决方案1】:

    在 SQL/ETL 实现方面,Redshift 支持 RDS 将支持的任何内容。因此,您的决定应基于数据库的限制和期望。

    Redshift 是一个读取优化系统,因此每隔几分钟更新一次可能会减慢查询速度。 (在 Redshift 上不太推荐 Micro-ETL)

    另一方面,如果您可能拥有巨大的表,Redshift 的性能将优于大多数行存储数据库(如 MySQL、Postgre 等)。由于 Redshift 专为比传统系统更大的规模而设计,因此这种性能差异将随着数据规模的增长而增加。

    【讨论】:

    • 嗨@Paladin,是的,我了解Redshift,分批做事。但是我不知道如何处理那些微更新(更新 RS 中已经更改的数据)?人们是否卸载并在 RS 之外进行更新并将其复制回来?在我的更新中发布的关于合并的解决方案似乎很慢。
    • 有些人已经实施了一种混合解决方案来解决微负载问题。他们在 RDS(mysql/postgre 等)中进行 ETL,并且每天将所有内容加载到 Redshift 表中。所有报告/分析都在 Redshift 上运行,通常可以接受一天前的数据。 Redshift 不是 OLTP 系统,因此不太推荐期待实时更新。
    • 就我而言,如何在 Redshift 之外进行 ETL?例如:在 Redshift 我有用户表,记录了过去 6 个月的用户名。现在今天有 10 个用户决定更改他们的用户名。我想跟踪这个变化。你的意思是我在 Redshift 之外跟踪所有这些变化,并在 Redshift 中擦除用户表,然后用新数据覆盖 Redshift?
    • 不一定要覆盖整个表,也可以合并。您可以在 MySQL RDS 中拥有相同的表,并在那里进行全天更新/ETL。在一天结束时,将它与 Redshift 表合并,使两个表同步。第二天重复同样的操作。
    • 我们如何进行这个 EOD 合并,像 Pentaho 这样的 ETL 工具是否有用??
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多