【发布时间】:2021-06-19 18:37:57
【问题描述】:
我有以下数据(下面的示例),由 3 个模式表示,我想存储到 bq (bigquery) 中。
-
架构1
{ "id": 1, "age": 64, "tags": [ {"FirstName": "Tom"}, {"LastName": "Hanks"}, {"Country": "USA"} ] } -
架构2
{ "id": 1, "age": 64, "tags": { "FirstName": "Tom", "LastName": "Hanks", "Country": "USA" } } -
架构3
{ "id": 1, "age": 64, "tags": [ {"key": "FirstName", "value": "Tom"}, {"key": "LastName", "value": "Hanks"}, {"key": "Country", "value": "USA"} ] }
我的用例是我希望能够按这些标记值对记录进行分组/过滤。
- Schema1 和 Schema3 需要 UNNEST 才能对维度进行任何过滤/分组,因此 Schema2 对于此类查询将是最快的
- 虽然看起来 Schema2 可能是最有效的,但存储空间不是问题,其次分别是 Schema1 和 Schema3
- 只有 Schema3 支持使用新键对表进行增量更新。
我的问题是:
- 如果我们知道所有可能的键并事先定义 Schema,似乎 Schema2 是最好的选择。是否有理由支持 Schema1 而不是 Schema2?
- 对于动态标签,Schema3 似乎是最佳选择? 是否有其他模式或我在上面尚未考虑的因素?
【问题讨论】:
标签: sql google-bigquery schema database-schema