我有各种高度嵌套的 json 对象。我想知道是否将它们存储为 BigQuery 中的 STRUCT
或 STRING
。如果将其存储为字符串,那么我可以在必要时使用 JSON_EXTRACT 来获取我需要的内容。我对使用以下方法有一些疑问:
- 将 json 数据存储为字符串而不是记录是一个坏主意吗?
- 如果将 json 字段存储为字符串,那么每当使用该字段时,性能是否会受到很大影响?
- 将 json 存储为
STRUCT
而不是字符串会带来哪些额外优势?
最后,我在文档中找不到任何地方提供如何查询 STRUCT
的示例。我唯一能找到的地方是https://cloud.google.com/bigquery/docs/nested-repeated 。文档(或其他地方)是否有关于查询嵌套字段的示例?此外,为什么术语 RECORD
和 STRUCT
在此页面上可以互换使用?
请注意,json 不会在根级别重复,即,它将看起来像 {...}
而不是 [{...},{... }]
。
作为引用,在 Redshift 中,您将(从这个问题开始)将 json 存储为字符串并使用 json 函数来操作它:https://stackoverflow.com/a/32731374/651174 .
最佳答案
我通常两者都会做:
- 将 JSON 对象存储为 STRING,以便后代和重构。
- 通过 JSON 对象具体化易于查询的表格 - 让您和您的团队在查询时获得更好的体验。
我的 3 个步骤:
- 将所有内容存储为 JSON 字符串。例如,当架构发生更改时,您就不会丢失数据。
- 创建一个 View ,将 JSON_EXTRACT 数据转换为易于查询的列。
- 将这些 View 具体化为表格,以获得最佳性能和简便性。
然后,如果架构发生更改:
- 您存储的所有内容都保持不变。
- 您可以修改 View 以适应新架构。
- 您可以将表重新具体化到新架构中。
关于json - 在 BigQuery 中存储 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56449445/