Mongo 的 ELT 管道

ELT pipeline for Mongo

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

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

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

最初,如果您对自己的数据了解不多,只是想对其进行调查,您可能可以让它保持原样。 Redshift 具有 SQL 功能,可让您查询 JSON 结构的元素,因此无需构建额外的表和更多的 ETL 即可让您调查数据 - 特别是因为这些表可能会一旦您了解了您的数据并决定要用它做什么,就将其丢弃。

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

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

例如(我并不是说这是一个真实世界的例子),如果 Redshift 在星型模式下工作正常但在平面表上更好并且 Looker 必须有一个星型模式那么构建它可能更有意义Redshift 中的星型模式,因为这是一个单一的建模练习 - 而不是在 Redshift 中建模平面表,然后必须在 Looker 中建模星型模式。

希望这有帮助吗?

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

a mongodb ETL/ELT process 可能看起来像这样:

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

提取方法:

All:拉取table.

中的全部数据

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

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

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

选择范围:

在 Timestamp 中,选择您的日期增量范围 运行。 在Epoch中,选择数值增量范围为运行。 如果没有输入End Date/Value,则默认为table中的最后一个date/value。 增量将自动管理 Include End Value: 增量过程是否取最终值

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

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

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

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

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

来将属性转换为 STRING 格式

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

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

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

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