我自己还在学习这个,但这是我到目前为止对此的了解。
青铜水平是来自来源的数据。它应该没有变化,并简单地保存在青铜级别的三角洲桌子上。银级是清洁的第一阶段。在这里,您进行数据治理,删除零等等。
黄金水平是应准备好由不同的应用程序或ML平台使用的清洁数据的最终水平。 每个步骤之间是一个工作,应该在上一个级别的数据上运行以清理并为下一步准备。
这是我们目前组织它的方式。我们已经与分配给我们的Databricks顾问讨论了我们的架构,到目前为止,还没有提出强烈的反对意见。也就是说,我相信允许基于个体用例中的体系结构灵活性。
在原始层中,我们有来自各种来源的原始文件。例如,API调用可以产生我们作为JSON文件存储的JSON输出。我们也可以在此处复制存储的数据库备份。这个想法是,这些文件是按原样存储的,因为在出现问题的情况下,我们至少希望仍然拥有我们的原始数据。当无法从您的来源检索历史数据时,这一点尤其重要 - 例如,快照数据。在青铜中,我们将所有内容转换为三角洲表。您可以将其视为将所有内容都以三角洲格式为单位的RAW的版本。我们想在三角洲表上建立基础,以便我们有一种常见的方法来查询和分析我们的原始数据。
在银中,我们进行数据清洁和转换。我们尽可能地尝试在此处逐步处理任何可以逐步完成的事情,因为Pyspark可以更好地实现复杂转换与SQL的更可读的实现,并且我们希望将我们的SQL查询保持在黄金中。黄金,我们进行了构成构成我们明星模式的事实和维度表的查询。在这里,我们运行了一些聚合并重命名列,以便我们的业务用户可以阅读它们。
从那里,您可以设置一个SQL仓库,也可以使用Delta共享连接到BI工具。或者,您可以将银或金桌用于ML目的。P.S。通常,我建议将Unity目录用作使用三层名称空间查询表,使代码看起来更加可读。它还使控制对某些目录/模式/表的访问更加容易。原始数据可以作为卷存储,一旦您在青铜层中拥有三角洲表,就可以将它们存储为桌子。 P.P.S。话虽如此,我认为您总是不需要所有层。实际上,我们正在考虑摆脱非常快速到达银层的数据的原始和青铜层,并且可以在以后很容易地再次检索,因为在失败时通过银层重新启动原始层的成本很低,但是存储,读写它们的成本相对较高。