我有一个正在使用的原始事件表。它有两列
date
和 metadata
。元数据具有所有事件属性的原始 json 转储。但我想明确的是,每次发送的属性都是不同的。然后我需要将这些数据提取到 Looker 中。
原始表:
时间戳 | 元数据 |
---|---|
2024-04-1 | {"type":"已创建","title":"test1","due":"2024-04-02","id":12345} |
2024-04-1 | {"类型":"已确认","id":12345} |
2024-04-1 | {"type":"已完成","id":12345, "completedby":"johndoe"} |
现在我需要将其标准化
选项A:
时间戳 | 类型 | 标题 | 截止日期 | id | 完成者 |
---|---|---|---|---|---|
2024-04-1 | 已创建 | 测试1 | 2024-04-02 | 12345 | |
2024-04-1 | 已确认 | 12345 | |||
2024-04-1 | 已完成 | 约翰多 |
选项B:
时间戳 | 类型 | 标题 | 截止日期 | id | 完成者 |
---|---|---|---|---|---|
2024-04-1 | 已创建 | 测试1 | 2024-04-02 | 12345 | 约翰多 |
2024-04-1 | 已确认 | 测试1 | 2024-04-02 | 12345 | 约翰多 |
2024-04-1 | 已完成 | 测试1 | 2024-04-02 | 12345 | 约翰多 |
我应该如何设计表格,我应该用各自的信息填充所有行(选项 B)还是应该将它们保留为空(选项 A)?
选项 B 是我的目标,特别是因为它包含所有行的相关信息,这将使报告更容易。
此外,考虑到您想要将不同的操作(
created
、confirmed
、completed
)视为“子事件”,您可以在选项 B 之上做的一件事是还添加基于代理键在 id
、type
和 timestamp
上。请参阅下面使用 dbt_utils 包的示例:
{{ dbt_utils.generate_surrogate_key(['id', 'type', 'timestamp']) }} as sub_event
通过这种方式,您可以在模型中使用主键来定义粒度,以及例如轻松计算每个用户的“子事件”。