首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态数据转换技术/数据湖/大数据

多态数据转换技术/数据湖/大数据
EN

Stack Overflow用户
提问于 2022-05-07 09:29:09
回答 2查看 129关注 0票数 2

背景:我们正在研究一个解决方案,从不同的客户那里摄取大量的遥测数据。数据采用xml格式,包含多个独立的信息组,其中包含大量嵌套元素。客户端有不同的版本,因此,数据池中的数据被不同但相似的模式所吸收。例如,startDate字段可以是字符串,也可以是包含日期的对象。)我们的目标是在BI工具中可视化积累的信息。

问题:处理多态数据的最佳实践是什么?

  • 使用编程语言将所需的数据(简化后的版本)处理为一个单一模式文件,然后在spark和databricks中处理它,并在BI工具中使用。
  • 将数据分解到有意义的组中,并使用spark和databricks处理和连接(使用数据关系)。

我感谢您的评论和分享意见和经验,特别是从主题专家和数据工程师。如果你也能分享一些关于这个特定主题的有用资源,那就太好了。

干杯!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-10 07:27:29

您为这个线程选择的标记之一是指出,您希望在此转换中使用Databricks。Databricks是我正在使用的工具之一,我认为它足够强大和有效,可以进行这种数据处理。因为,我使用最多的数据处理平台是Azure和Cloudera,我的答案将依赖Azure堆栈,因为它是与Databricks集成的。以下是我根据我的经验提出的建议。

第一个想法是定义数据层并为它们创建一个平台。特别是,对于您的情况,它应该有着陆区,分期,ODS和数据仓库层。

着陆区

将用于从客户端摄取多态数据。这只能通过客户端和Azure Blob储存之间的Azure数据工厂 (ADF)连接来完成。我建议,在这个层中,我们不将任何转换放到ADF管道中,这样我们就可以创建一个用于接收原始文件的通用管道。如果您有许多客户端可以将数据发送到Azure存储中,这是很好的。您也可以为它们创建一些专用文件夹。

通常,我会创建与客户端类型一致的文件夹。例如,如果我有三种类型的客户端,即Oracle、sql_server和SAP,则我的Azure存储上的根文件夹将是oracle、sql_server和sap,后面跟着服务器/数据库/客户端名称。

此外,如果要从IoT设备中摄取数据,则可能需要设置Azure IoT集线器。如果是这样的话,这个页面将是有用的。

分期区

将成为架构清理的区域。我将有多个ADF管道,从着陆区域转换多态数据并将其摄入到中转区域。您必须为每个分解的数据集和数据源创建模式(增量表)。我建议使用三角洲湖,因为它很容易管理和检索数据。

您将拥有的转换选项如下:

  • 只使用ADF转换。它将允许您不巢一些嵌套的XML列,以及从着陆区进行一些数据清理和争论,以便可以将相同的数据集插入到同一个表中。 对于您的情况,您可能必须为每个数据集创建特定的ADF管道,乘以客户端版本。
  • 使用附加的公共ADF管道,该管道基于数据集和客户端版本运行Databricks转换。这将允许ADF转换无法实现的更复杂的转换。 对于您的情况,还将为每个数据集乘以客户端版本提供一个特定的Databricks笔记本。

因此,将从原始文件中提取一个特定数据集的不同版本,按照模式清理,并将每个数据源的每个数据源吸收到一个表中。在不同的数据源上,主数据集将有一些重复的数据。

ODS区

将是一个所谓的单一数据来源的领域。多个数据源将合并为一个。因此,所有重复的数据都会被消除,数据集之间的关系也会被澄清,从而产生每个问题的第二项。如果您只有一个数据源,这也将是一个应用更多数据清理的领域,例如验证和一致性。因此,一个数据集将存储在一个表中。

我建议使用运行Databricks的ADF,但此时,我们可以使用SQL记事本而不是Python,因为数据已经很好地插入到了暂存区域的表中。

此阶段的数据可由Power使用。阅读有关Power与数据库集成的更多

此外,如果您仍然需要一个用于高级分析的数据仓库或星型模式,您可以进行进一步的转换(再次通过ADF和Databricks)并利用蔚蓝合成

源控制

幸运的是,由于微软收购了Github,我上面提到的工具已经集成到源代码版本控制中。Databricks笔记本和ADF管道源代码可以进行版本控制。检查Azure DevOps

票数 2
EN

Stack Overflow用户

发布于 2022-05-11 07:17:08

非常感谢您的全面回答PhuriChal!的确,数据源总是相同的软件,但是不同的版本和不幸的是,这些版本之间的数据属性并不总是稳定的。在databricks中进一步处理原始数据之前,先使用高级编程语言来统一和解析不匹配的属性,这样就可以选择在摄入后处理原始数据了吗?(我们可能有许多这样的处理代码来为特定的建议细化原始数据),我在最初的文章中添加了一个示例。

代码语言:javascript
复制
Version1:{
    'theProperty': 8
}
Version2:{
    'data':{
              'myProperty': 10
           }
}


Processing =>
Refined version: [{
    'property: 8
},
{
    'property: 10
}]

以便在数据进入databricks进行进一步处理之前解决这些不一致问题。这也是一种选择吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72151225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档