您是以规范化格式将数据存储在 Delta Lake Silver 层中还是派生数据?

Do you store data in the Delta Lake Silver layer in a normalized format or do you derive it?

我目前正在建立一个数据湖,试图遵循 Delta Lake 的原则(以青铜着陆,清理并合并成白银,然后,如果需要,以黄金呈现最终视图)并有一个问题什么应该存储在 Silver 中。

例如,如果 bronze 中的数据来自 REST API 并以 JSON 形式存储,则其格式如下:

示例如下:

{ 
'id':12345,
'name':'Test',
'fields':['Hello','this','is','a','test']
}

最后我想把它呈现为两个 table。一个是基础 table,看起来像:

TABLE 1

| id       | name            |
| -------- | --------------  |
| 12345    | Test            |

另一个看起来像:

TABLE 2

| id       | field_value    |
| -------- | -------------- |
| 12345    | Hello          |
| 12345    | this           |
| 12345    | is             |
| 12345    | a              |
| 12345    | test           |

我的问题是,我是否应该在 Spark 中预处理数据并将 silver 中的数据存储在单独的文件夹中,如下所示:

-- root
---table 1
----file1.parquet
----etc.parquet
---table 2
----file1.parquet
----etc.parquet

或者将其全部存储在一个文件夹下的 silver 中,然后使用 TSQL 和 OPENJSON 等函数导出这两个 table?

感谢您的帮助或见解!

我认为你的问题没有真正的答案,但这里有一个刺 - 基于你的明确例子和这个参考 https://k21academy.com/microsoft-azure/data-engineer/delta-lake/

My question is, should I pre-process the data in Spark and store the data in silver in separate folders like this: ...

  • 是的,我希望 JSON 需要更多时间来处理。我在当前项目中使用 JSON 作为 RAW,如果它采用那种格式,并且在 REFined Area 中我们根据需要存储数组,而不是 JSON 结构。但这是因为我们使用了基于 Martin Fowler 的分布式数据网格的数据中心方法。我们有一个业务领域,我们根据语义模型对数据建模。

  • 但是对于每一位专家来说,都有一个对立的专家。有些人会说即时执行,例如 SAP Hana ETL on-the-fly.

  • 对于提供给数据科学家进行分析或临时分析的数据集分析,第二种方法很好。数据将位于青铜区。那就是说 gdpr 方面会,可能意味着将它们精炼到银区并删除 gdpr 方面。

简而言之,取决于您的用例。