背景:我们正在研究一个解决方案,从不同的客户那里摄取大量的遥测数据。数据采用xml格式,包含多个独立的信息组,其中包含大量嵌套元素。客户端有不同的版本,因此,数据池中的数据被不同但相似的模式所吸收。例如,startDate字段可以是字符串,也可以是包含日期的对象。)我们的目标是在BI工具中可视化积累的信息。
问题:处理多态数据的最佳实践是什么?
我感谢您的评论和分享意见和经验,特别是从主题专家和数据工程师。如果你也能分享一些关于这个特定主题的有用资源,那就太好了。
干杯!
发布于 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管道,从着陆区域转换多态数据并将其摄入到中转区域。您必须为每个分解的数据集和数据源创建模式(增量表)。我建议使用三角洲湖,因为它很容易管理和检索数据。
您将拥有的转换选项如下:
因此,将从原始文件中提取一个特定数据集的不同版本,按照模式清理,并将每个数据源的每个数据源吸收到一个表中。在不同的数据源上,主数据集将有一些重复的数据。
ODS区
将是一个所谓的单一数据来源的领域。多个数据源将合并为一个。因此,所有重复的数据都会被消除,数据集之间的关系也会被澄清,从而产生每个问题的第二项。如果您只有一个数据源,这也将是一个应用更多数据清理的领域,例如验证和一致性。因此,一个数据集将存储在一个表中。
我建议使用运行Databricks的ADF,但此时,我们可以使用SQL记事本而不是Python,因为数据已经很好地插入到了暂存区域的表中。
此阶段的数据可由Power使用。阅读有关Power与数据库集成的更多。
此外,如果您仍然需要一个用于高级分析的数据仓库或星型模式,您可以进行进一步的转换(再次通过ADF和Databricks)并利用蔚蓝合成。
源控制
幸运的是,由于微软收购了Github,我上面提到的工具已经集成到源代码版本控制中。Databricks笔记本和ADF管道源代码可以进行版本控制。检查Azure DevOps。
发布于 2022-05-11 07:17:08
非常感谢您的全面回答PhuriChal!的确,数据源总是相同的软件,但是不同的版本和不幸的是,这些版本之间的数据属性并不总是稳定的。在databricks中进一步处理原始数据之前,先使用高级编程语言来统一和解析不匹配的属性,这样就可以选择在摄入后处理原始数据了吗?(我们可能有许多这样的处理代码来为特定的建议细化原始数据),我在最初的文章中添加了一个示例。
Version1:{
'theProperty': 8
}
Version2:{
'data':{
'myProperty': 10
}
}
Processing =>
Refined version: [{
'property: 8
},
{
'property: 10
}]以便在数据进入databricks进行进一步处理之前解决这些不一致问题。这也是一种选择吗?
https://stackoverflow.com/questions/72151225
复制相似问题