【问题标题】:Data Vault in Redshift and ETL StrategyRedshift 和 ETL 策略中的数据保险库
【发布时间】:2016-12-28 10:46:04
【问题描述】:

我有一堆数据存储在 Amazon S3 中的文件中,我计划用它在 Redshift 中构建一个 Data Vault。我的第一个问题是正确的方法是在 Redshift 中构建 DV 和数据集市,还是我应该将 S3 视为我的数据湖并且只有在 Redshift 中的数据集市?

在我的架构中,我目前正在考虑前者(即 S3 Data Lake + Redshift Vault 和 Marts)。但是,我不知道我是否可以直接在 Redshift 中创建 ETL 流程以使用 Vault 中的数据填充集市,或者我是否必须使用 Amazon EMR 来处理 S3 中的原始数据,在那里生成新文件并最后将它们加载到集市中。

所以,我的第二个问题是:ETL 策略应该是什么?谢谢。

【问题讨论】:

  • S3 不是关系型的,它基本上是用于存储文件的。 Data Vault 是在关系数据库中实现的,因此您无法在 S3 上创建 datavault。您将如何在 S3 中构建集线器、链接、卫星?如果您正在寻找术语,那么 S3 可能被称为您的“数据湖”(呃,我现在感觉很脏)
  • @Nick.McDermaid,你是对的。我一直认为 S3 在我的架构中更像是一个数据湖。我的问题更多是关于在 Redshift 中拥有 DV 和数据集市,或者只是从湖中的数据填充的数据集市(我将编辑问题)。我在想的是用 S3 中的数据加载 Vault,然后用 Vault 中的数据加载 Marts。但是,我不知道我是否能够直接在 Redshift 中创建 ETL 流程,或者我必须通过在 S3 中处理文件、生成包含 Mart 数据的新文件并加载来使用 Amazon EMR它在 Redshift 中?
  • 好吧,如果您需要数据保险库,则需要在 redshift 中构建它。您可以将文件加载到 DV 或 DM 中。如果您决定想要 DV,则可以通过视图和删除/插入/更新语句将 DV 加载到 DM 中 - 您不必再次绕道导出和导入文件。将文件加载到 Redshift 需要某种调度/作业运行工具来运行(在 AWS 上或不在 AWS 上)以连接到 redshift 并在 redshift 中运行COPY 命令来加载数据。我调查了一个这样做的项目,但从未开始,所以这对我来说都是理论。
  • 但是您绝对应该能够为您的数据仓库拥有一个架构,为您的数据集市提供另一个架构,并直接从 DV > DM 加载数据,而无需重新导出和导入文件。
  • 我现在处于同样的情况。但我正在考虑使用 Glue 在 s3 文件上构建模式。然后,我可以在 Athena 上使用 DV。只是这个解决方案仍在研究和评估中

标签: amazon-redshift etl data-warehouse data-vault bigdata


【解决方案1】:

抱歉!没有评论的声誉,这就是我在答案部分写的原因。

我和你完全一样。尝试在 redshift 中执行我的 ETL 操作,到目前为止,我有 30 亿行,并且预计会大幅增长。
现在,使用从 AWS lambda 定期调用的 DML 将数据加载到 redshift 中的数据集市中。在我看来,在 Redshift 中创建数据仓库非常困难。

【讨论】:

  • 听起来你已经比我进步了。我目前正在做一些研究并定义我称之为 v0.1 的流和数据架构。 Data Vault 策略对我来说很有意义,所以现在我试图了解使用 Redshift 的实施影响。您是否考虑过将 Amazon Data Pipeline 用于 Vault 和 Marts 之间的 ETL?从我读到的内容来看,这似乎是一种可行的方法,只需少量的额外费用
  • 是的,你可以使用数据管道,但要注意数据管道的最小调度间隔是15分钟,我的业务需求更频繁。此外,我找不到任何文档来对 Redshift(源)和 Redshift(目标)之间的临时表执行 SQL 转换。
【解决方案2】:

S3 只是文件的键值对存储。您不能在那里创建 DV 或 DW。因此,您可以使用 Redshift 或 EMR 将数据处理为 DV 的关系格式。由您决定是否选择哪个; EMR 有特定的用例 IMO

【讨论】:

  • 我很清楚 S3 不适合 DV。问题是关于 Redshift 中的 DV + DM 与那里只有 DM。我还询问了使用 S3 中的数据填充 Redshift 中的关系模型的 ETL 策略
  • 如果你只有在 Redshift 中有你的 DM,你打算在哪里存储你的 DV?电子病历?这是一种昂贵的解决方案。或者您似乎想完全避免使用 DV?我真的不明白你在这里的方法。为什么要纯粹根据 ETL 的能力来使用 DV?
  • 我的问题应该更清楚。我想获得有关从哪里获取数据以填充 DM 的 DV 与仅在 Redshift 中使用 S3 中的数据填充的 DM 的输入,这些数据很可能必须通过 EMR 进行预处理。我读过 DV 并看到了许多优点,但仍想听听其他经验。假设建议是做 DV,我想知道其他人如何实现从 DV(Redshift)到 DM(Redshift)的数据转换和加载。使用 Lambda、Data Pipeline、Redshift 中的 SQL、EMR 从 DV 中获取数据并将其放入 DM 中?
  • 我没有看到很多 DV 实施,但在我所拥有的情况下,它们是基于数据仓库中预先存在的数据。因此,基本上将您的数据放入数据库中,创建一个 DV,然后在其上构建您的 DM。这不就是DV的目的吗?我认为 DV 应该始终存在于您的关系数据库中。无论哪种方式,听起来你在做出决定之前都有很多研究要做。 Lambda 在这里可能不是正确的答案。 Data Pipeline 适合批处理作业,将 S3 文件移动到 RS,RS 中的 SQL 是最可能的答案,而 EMR 听起来不像答案
【解决方案3】:

聚会有点晚了,毫无疑问你已经解决了这个问题,但它仍然可能是相关的。只是想我会分享我对此的看法。一种解决方案是使用 S3 和 Hive 作为持久暂存区(如果您愿意,可以使用数据湖)从源中获取数据。完全在 Redshift 中构建您的 DV。您仍然需要 Redshift 中的暂存区,以便从 S3 摄取文件,确保在进入 Redshift 暂存表的过程中计算哈希值(这就是 EMR/Hive 的用武之地)。您可以直接在 Redshift 中添加哈希值,但它可能会使 Redshift 受到威胁,具体取决于数量。通过普通的旧批量插入和更新语句将数据从暂存区推送到 DV,然后使用视图在 Redshift 中虚拟化您的集市。

您可以使用任何数据管道工具来实现这一点,而 lambda 也可以成为您或其他工作流/管道工具的候选者。

【讨论】:

    【解决方案4】:

    我强烈建议您查看 Matillion for Redshift:https://redshiftsupport.matillion.com/customer/en/portal/articles/2775397-building-a-data-vault

    Redshift ETL 非常棒且价格合理,并且有一个 Data Vault 示例项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2018-06-25
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多