2

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

例如,如果我的行是

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

4

1 回答 1

2

正如 Elliott 所提到的 - BigQuery 标准 SQL 对 ARRAY 的支持比传统 SQL 好得多。一般来说,BigQuery 团队建议使用标准 SQL

因此,以下是 BigQuery 标准 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     
于 2018-02-07T15:56:01.773 回答