我的JSON数据应该包含嵌套字段还是重复信息?

我的JSON数据应该包含嵌套字段还是重复信息?,json,google-bigquery,Json,Google Bigquery,我将把JSON文件中的数据导入到Google BigQuery中,并想知道嵌套字段和添加模式为“重复”的字段是否是最佳做法,以避免重复或保留重复信息以减少嵌套。保留重复信息的另一个原因是,据我所知,BigQuery最适合非规范化数据。但是,我不确定这种非规范化应该在数据导入之后还是之前进行 例如,假设我的数据是: 嵌套版本 复制信息版本 附加说明 可能有数千种产品,在嵌套版本中具有模式重复的字段。某些产品可能有其他产品没有的字段。每个产品中的字段可以有2-3个嵌套级别 问题重申 嵌套字段并添加模

我将把JSON文件中的数据导入到Google BigQuery中,并想知道嵌套字段和添加模式为“重复”的字段是否是最佳做法,以避免重复或保留重复信息以减少嵌套。保留重复信息的另一个原因是,据我所知,BigQuery最适合非规范化数据。但是,我不确定这种非规范化应该在数据导入之后还是之前进行

例如,假设我的数据是:

嵌套版本

复制信息版本

附加说明

可能有数千种产品,在嵌套版本中具有模式重复的字段。某些产品可能有其他产品没有的字段。每个产品中的字段可以有2-3个嵌套级别

问题重申


嵌套字段并添加模式为“重复”的字段以避免重复或保留重复信息是最佳做法吗?

如果您的数据只写一次或只附加一次,那么下面解释的可用性差异很小,任何一个都可以正常工作,而标准化的一个存储和扫描成本稍低

微小的可用性差异:

-使用嵌套模式 选择*-此处所有产品的子字段都进入父名称空间,无法批量重命名它们 从表中,选择产品prd 但是,如果您以后只想更新某个产品,嵌套的产品会让您很难做到这一点,因为无法更新重复字段中的单个项,您必须加载整个数组,扫描并更改,然后重新打包以更新列。您将编写类似以下内容:

更新表 设置产品=选择阵列\u聚集。。。从哪里。。。 哪里…-过滤到特定的产品
在这种情况下,非规范化的表单将更容易处理。

如果您的数据只写一次或只附加一次,那么下面解释的可用性差异就很小,任何一种都可以很好地工作,而规范化的表单在存储和扫描方面稍微便宜一些

微小的可用性差异:

-使用嵌套模式 选择*-此处所有产品的子字段都进入父名称空间,无法批量重命名它们 从表中,选择产品prd 但是,如果您以后只想更新某个产品,嵌套的产品会让您很难做到这一点,因为无法更新重复字段中的单个项,您必须加载整个数组,扫描并更改,然后重新打包以更新列。您将编写类似以下内容:

更新表 设置产品=选择阵列\u聚集。。。从哪里。。。 哪里…-过滤到特定的产品 在这种情况下,非规范化形式将更容易处理

{
   "store": "Pete's Market",
   "city": "NYC",
   "product": [
      {
          "id": "2468",
          "item": "apple",
          "price": "$1"
      },
      {
          "id": "1357",
          "item": "cereal",
          "price": "$3",
          "brand": "Cheerios"
      }
   ]
}

# The actual JSON data file will have this in one row:
# {"store":"Pete's Market","city":"NYC","product":[{"id":"2468","item":"apple","price":"$1"},{"id":"1357",item":"cereal","price":"$3","brand":"Cheerios"}]}
{
   "store": "Pete's Market",
   "city": "NYC",
   "product":
      {
          "id": "2468",
          "item": "apple",
          "price": "$1"
      }
}
{
   "store": "Pete's Market",
   "city": "NYC",
   "product":
      {
          "id": "1357",
          "item": "cereal",
          "price": "$3",
          "brand": "Cheerios"
      }
}

# The actual JSON data file will have this in two rows:
# {"store":"Pete's Market","city":"NYC","product":{"id": "2468","item":"apple","price":"$1"}}
# {"store":"Pete's Market","city":"NYC","product":{"id":"1357",item":"cereal","price":"$3","brand":"Cheerios"}}