【问题标题】:BigQuery: Get field names of a STRUCTBigQuery:获取 STRUCT 的字段名称
【发布时间】:2020-08-25 11:26:43
【问题描述】:

我在 BigQuery 的 STRUCT 中有一些数据。下面我将一个数据示例可视化为 JSON:

{ 
  ...
  siblings: {
    david: { a: 1 }
    sarah: { b: 1, c: 1 }
  }
  ...
}

我想从类似于["david", "sarah"] 的查询中生成一个字段。本质上,我只想从 STRUCT(对象)中获取密钥。请注意,每个用户在兄弟 STRUCT 中都有不同的键名。

这在 BigQuery 中可行吗?

谢谢, 一个

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您的结构架构必须在整个表中保持一致。它们不能更改键,因为它们是表模式的一部分。要获取密钥,您只需查看表架构即可。

    如果值发生变化,它们可能是数组中的值 - 我猜你可能会有这样的情况:

    WITH t AS (
      SELECT 1 AS id, [STRUCT('david' AS name, 33 as age), ('sarah', 42)] AS siblings
      union all
      SELECT 2, [('ken', 19), ('ryu',21), ('chun li',23)]
    )
    
    SELECT * FROM t
    

    如果您尝试在第二行或数组中引入新键,则会收到错误 Array elements of types {...} do not have a common supertype at ...

    上述示例的第一个元素以 json 表示形式如下所示:

    {
        "id": "1",
        "siblings": [
          {
            "name": "david",
            "age": "33"
          },
          {
            "name": "sarah",
            "age": "42"
          }
        ]
      }
    

    【讨论】:

    • 感谢您的回复。此 STRUCT 是 Big Query 中类型为 RECORD 的模式的一部分。同样的限制是否仍然适用?
    • 是的,在此处阅读更多信息:cloud.google.com/bigquery/docs/nested-repeated RECORD=STRUCT 和 REPEATED=ARRAY
    猜你喜欢
    • 2013-02-03
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多