【发布时间】:2019-08-29 20:29:47
【问题描述】:
我已经使用 AWS Firehose -> S3/Glue -> Athena 堆栈设置了一个时间序列/事件数据库。它被用于跟踪各种用户操作 - 我们的许多产品中的会话启动、执行的操作等。我的问题是如何在这个系统中最好地存储不同类型的 ID。
现有的架构是一个包含一堆不同列的大型“事实表”。两个最重要的列是 event_type_id 和 object_id。以 StackOverflow 为例,两个事件可能是:
- question_asked - 在这种情况下,我会将问题 ID 存储在 object_id 列中。
- tag_created - 在这种情况下,我会将标签 ID 存储在 object_id 列中。
我的问题是 - 在同一列中存储多种不同类型的 ID 是不好的做法吗?目前它对我们来说工作正常,但它确实需要执行查询的人员/系统根据他们正在查询的事件来了解 object_id 列所指的对象类型。
如果做法不好,还有什么其他方法可能更好?如果与该行中的事件无关,它们为 NULL 的多列?或者这是维度表更适合的地方?
【问题讨论】:
标签: data-warehouse parquet amazon-athena aws-glue star-schema