通过 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
我的 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