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团队非常推荐它,因为他们建议用户迁移到标准版本: