【问题标题】:BigQuery Schema: Repeated Record vs. RecordBigQuery 架构:重复记录与记录
【发布时间】:2021-06-19 18:37:57
【问题描述】:

我有以下数据(下面的示例),由 3 个模式表示,我想存储到 bq (bigquery) 中。

  1. 架构1

        {
         "id": 1,
         "age": 64,
         "tags": [
            {"FirstName": "Tom"},
            {"LastName": "Hanks"},
            {"Country": "USA"}
         ]
        }
    
  2. 架构2

        {
         "id": 1,
         "age": 64,
         "tags": {
            "FirstName": "Tom",
            "LastName": "Hanks",
            "Country": "USA"
         }
        }
    
  3. 架构3

        {
         "id": 1,
         "age": 64,
         "tags": [
            {"key": "FirstName", "value": "Tom"},
            {"key": "LastName", "value": "Hanks"},
            {"key": "Country", "value": "USA"}
         ]
        }
    

我的用例是我希望能够按这些标记值对记录进行分组/过滤。

  1. Schema1 和 Schema3 需要 UNNEST 才能对维度进行任何过滤/分组,因此 Schema2 对于此类查询将是最快的
  2. 虽然看起来 Schema2 可能是最有效的,但存储空间不是问题,其次分别是 Schema1 和 Schema3
  3. 只有 Schema3 支持使用新键对表进行增量更新。

我的问题是:

  1. 如果我们知道所有可能的键并事先定义 Schema,似乎 Schema2 是最好的选择。是否有理由支持 Schema1 而不是 Schema2?
  2. 对于动态标签,Schema3 似乎是最佳选择? 是否有其他模式或我在上面尚未考虑的因素?

【问题讨论】:

    标签: sql google-bigquery schema database-schema


    【解决方案1】:

    来自BigQuery documentation

    BigQuery 不支持 JSON 格式的地图或字典,因为 纯 JSON 字典中可能缺少模式信息。为了 例如,表示购物车中的产品列表 "products":{"my_product": 40.0, "product2" : 16.5} 无效,但 "products":[{"product_name": "my_product", "amount": 40.0}, {"product_name": "product2", "amount": 16.5}] 有效。

    因此,缺少架构似乎是 BigQuery 中的一个重要问题。所以,回答你的问题:

    1. 是否有理由支持 Schema1 而不是 Schema2?

    编辑:您可以使用 schema2,但要注意它是否使用“标准”字段正确非规范化。

    1. 对于动态标签,Schema3 似乎是最佳选择?是否有其他模式或我在上面尚未考虑的因素?

    Schema3 似乎是动态标签的唯一解决方案。

    【讨论】:

    • 我用过 Schema2。正如我在问题1中提到的,条件是如果我事先知道键,在这种情况下标签是记录类型,如果有人试图将带有新键的记录附加到该表中,这显然会失败
    • Bigquery 允许为记录类型添加新列,因此如果在添加新动态标签之前我们可以检查它是否存在于架构中,如果不存在则更新它,然后它可以作为添加动态标签的解决方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多