Google bigquery 使用BigQuery-LegacySQL处理数组

Google bigquery 使用BigQuery-LegacySQL处理数组,google-bigquery,legacy-sql,Google Bigquery,Legacy Sql,我的表中的每一行都有一个作为数组的字段,我想从第一个数组条目中获取一个字段 例如,如果我的行是 [ { "user_dim": { "user_id": "123", "user_properties": [ { "key": "content_group", "value": { "value": { "string_value": "my_group

我的表中的每一行都有一个作为数组的字段,我想从第一个数组条目中获取一个字段

例如,如果我的行是

[
  {
    "user_dim": {
      "user_id": "123",
      "user_properties": [
        {
          "key": "content_group",
          "value": {
            "value": {
              "string_value": "my_group"
            }
          }
        }
      ]
    },
    "event_dim": [
      {
        "name": "main_menu_item_selected",
        "timestamp_micros": "1517584420597000"
      },
      {
        "name": "screen_view",
        "timestamp_micros": "1517584420679001"
      }
    ]
  }
]
我想买一个


用户id:123,内容组:我的组,时间戳为1517584420597000,正如Elliott提到的-BigQuery标准SQL对数组的支持比传统SQL要好得多。一般来说,BigQuery团队建议使用标准SQL

下面是BigQuery标准SQL,包括处理通配符

标准SQL 选择 用户标识。用户标识作为用户标识, 选择value.value.string\u value 来自UNNESTuser\u dim.user\u属性 其中key='content\u group'限制1 内容组, 选择event.timestamp\u micros 从未发生的事件 其中name='主菜单\项\选定' ts 来自“project.dataset.app_事件”_*` 其中_TABLE_后缀在'20180129'和'20180202'之间 根据您的问题中的虚拟示例的结果

行用户id内容组ts 1 123美孚集团1517584420597000
是否有理由要为此使用遗留SQL?这是可能的,但标准SQL具有更好的数组支持。@ElliottBrossard感谢您的评论!:我将查询与表\u DATE\u RANGE[app\u events\u],时间戳'2018-01-29',时间戳'2018-02-02'相结合,我还没有找到标准的SQL等价物。有吗?是的,请看地图。您将从app_events_*中进行选择,并在例如_TABLE_后缀“20180129”和“20180202”之间进行筛选,前提是该后缀是正确的。由于该问题专门询问遗留SQL,而该答案涉及标准SQL,所以被否决。这不是一个答案,只是一个建议,因此应该是一个评论。谢谢@Crembo留下评论,所以这次否决票不会像没有理由的情况下那样令人困惑。真的很感激!想要跟进这一点——正如您从问题本身的评论中所看到的那样——OP最初并不知道有一种方法可以使用标准sql,并实际询问是否有一种与他在标准sql中所问的相同的方法——这就是我的回答:o我们通常提供标准sql与传统sql的答案的另一个原因BigQuery团队非常推荐它,因为他们建议用户迁移到标准版本: