【问题标题】:ELT pipeline for MongoMongo 的 ELT 管道
【发布时间】:2021-02-10 10:17:42
【问题描述】:

我正在尝试使用 Fivetran 将我的数据导入 Amazon Redshift,但一般对 ELT/ETL 流程有一些疑问。我的源数据库是 Mongo,但我想使用像 Looker 这样的第三方 BI 工具对数据进行深入分析,但它们与 SQL 集成。我是 ELT/ETL 流程的新手,想知道它会不会是这样的。

  1. 从 Mongo 中提取数据(由 Fivetran 处理)
  2. 加载到 Amazon Redshift(由 Fivetran 处理)
  3. 执行转换 - 这是我最大的知识差距所在。我显然必须将对象和数组转换为兼容的 SQL 类型。我可以对所有对象执行转换以将它们提取到列并将所有数组转换为表。这是正确的想法吗?我是否应该设计一个 MYSQL 架构并根据该架构设计编写所有转换?

【问题讨论】:

    标签: mongodb amazon-redshift etl


    【解决方案1】:

    正如您所说,Fivetran 会将您的数据加载到 Redshift 中,将各个字段放在可以的列中,并将其他所有内容作为 JSON 放入 varchar 列中。因此,此时您基本上拥有了一个数据湖 - 您的所有数据都在一个分析平台中,但基本上仍然是源格式,您可以使用它来做任何您想做的事情。

    最初,如果您对自己的数据知之甚少,只是想对其进行调查,则可以保持原样。 Redshift 具有允许您查询 JSON 结构的元素的 SQL 函数,因此无需构建额外的表和更多的 ETL 只是为了让您调查数据 - 特别是当您了解数据后这些表可能会被丢弃,并且决定你想用它做什么。

    如果您有适当的报告要求,那么您就可以开始设计支持这些要求的模式(我不确定您为什么建议使用 MYSQL 模式,因为 MYSQL 是数据库供应商?)。传统上,分析模式将被设计为 Kimball 维度模型(事实和维度),但您决定设计的模式类型将取决于:

    1. 您正在使用的数据库平台(在您的情况下是 Redshift)以及它最适合使用的结构类型,例如星型架构或“平面”表
    2. 您正在使用的 BI 工具以及它希望如何将数据呈现给它

    例如(我并不是说这是一个真实世界的示例),如果 Redshift 可以使用星型模式,但更适用于平面表,并且 Looker 必须具有星型模式,那么构建星型模式可能更有意义在 Redshift 中,因为这是一个单一的建模练习 - 而不是在 Redshift 中建模平面表,然后必须在 Looker 中建模星型模式。

    希望这有帮助吗?

    【讨论】:

    • 是的,这有帮助。我决定继续使用雪花,它们使用新的变体数据类型和展平功能使查询 json 数据变得非常容易。我只是使用 post 转换将 json 加载到一个新的扁平表中。
    • 好决定! IMO Snowflake 将所有其他云数据库从水中吹出
    • @joethemow 我还通过 Fivetran 将我的数据从 MongoDB 推送到雪花。你提到你使用了转换后。我想展平数组数据。如果您可以指导我使用什么或任何博客等,那将很有帮助
    • 嘿@JerinAMathews,这是一个如何将数组数据转换为行的简单示例。 stackoverflow.com/questions/55252105/…。另一个提示,查看表格视图。最初,当我转换我的数据时,我会创建一个新表,但意识到我最终复制了数据,直到我发现了视图:)!
    【解决方案2】:

    这取决于您需要如何呈现数据分析的最后阶段,以及数据分析的目的是什么。正如 NickW 所说,假设您需要将数据集成到 BI 工具中,则应根据工具的数据格式要求调整架构。

    mongodb ETL/ELT process 可能如下所示:

    选择连接:选择设置的连接 集合名称:使用 [database].[collection] 格式选择集合。 如果从身份验证数据库中提取数据,则只能确定 [collection] 名称。示例:ea sample.products 东。

    提取方法

    全部:拉取表格中的全部数据。

    增量:按增量值拉取数据。

    增量属性: 设置要运行的增量属性的名称。即:更新时间。

    增量类型: 时间戳 |时代。选择增量属性的类型。

    选择范围:

    在时间戳中,选择要运行的日期增量范围。 在 Epoch 中,选择要运行的值增量范围。 如果没有输入结束日期/值,则默认为表中的最后一个日期/值。 增量将自动管理 包括结束值:增量过程是否应该取结束值

    Interval Chunks: 数据将被拉到哪些块上。按分钟、小时、天、月或年拆分数据。

    过滤器:过滤要拉取的数据。过滤器格式将是 MongoDB 扩展 JSON。

    限制:限制要拉取的行数。

    自动映射:您可以选择要引入的列集、添加新列或保持原样。

    将整个关键数据转换为字符串 如果数据不符合目标的预期,例如以数字开头的键名,或者灵活且不一致的对象数据,您可以通过将映射部分中的数据类型设置为 STRING 来将属性转换为 STRING 格式

    该键下的任何值都存在转换。 数组和对象将被转换为 JSON 字符串。

    用例: 以下是几个过滤示例:

    {"account":{"$oid":"1234567890abcde"}, "datasource": "google", "is_deleted": {"$ne": true}} 
    

    date(MODIFY_DATE_START_COLUMN) >=date("2020-08-01")

    【讨论】:

      猜你喜欢
      • 2022-12-23
      • 2021-01-11
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2021-07-29
      • 2020-09-27
      • 2017-06-04
      相关资源
      最近更新 更多