通过 BigQuery LegacySQL 使用数组

Working with arrays with BigQuery LegacySQL

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

例如,如果我的行是

[
  {
    "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"
      }
    ]
  }
]

我想得到

user_id: 123, content_group: my_group, timestamp_1517584420597000

正如 Elliott 提到的那样 - BigQuery Standard SQL 比旧版 SQL 对 ARRAY 的支持要好得多。一般来说,BigQuery 团队建议使用标准 SQL

所以,下面是针对 BigQuery Standard SQL(包括处理通配符内容)

#standardSQL
SELECT 
  user_dim.user_id AS user_id,
  (SELECT value.value.string_value 
     FROM UNNEST(user_dim.user_properties) 
     WHERE key = 'content_group' LIMIT 1
  ) content_group,
  (SELECT event.timestamp_micros 
     FROM UNNEST(event_dim) event 
     WHERE name = 'main_menu_item_selected'
  ) ts
FROM `project.dataset.app_events_*`
WHERE _TABLE_SUFFIX BETWEEN '20180129' AND '20180202'   

有结果(对于你问题中的虚拟示例)

Row     user_id     content_group       ts   
1       123         my_group            1517584420597000