如何获取数组的最后一个元素? SQL Bigquery

问题描述 投票:0回答:3

我正在努力构建一个跟踪网络,形成 Github 在 Google BigQuery 上的可用数据,例如:https://bigquery.cloud.google.com/table/githubarchive:day.20210606

关键数据包含在“payload”字段中,STRING类型。我设法取消嵌套该字段中包含的数据并将其转换为数组,但如何获取最后一个元素?

这是我到目前为止所拥有的......

select type, 
  array(select trim(val) from unnest(split(trim(payload, '[]'))) val) payload
from `githubarchive.day.20210606` 
where type = 'MemberEvent'

哪个输出:

enter image description here

如何才能只获取最后一个元素“Action”:“added”}? 我知道

select array_reverse(your_array)[offset(0)]

应该可以解决问题,但是我不确定如何将其结合到我的代码中。我一直在尝试不同的选择但没有成功,例如:

with  payload as ( select  array(select trim(val) from unnest(split(trim(payload, '[]'))) val) payload from `githubarchive.day.20210606`)

select type, ARRAY_REVERSE(payload)[ORDINAL(1)]

from `githubarchive.day.20210606` where type = 'MemberEvent'

所需的输出应如下所示:

enter image description here

google-bigquery
3个回答
11
投票

要获取数组中的最后一个元素,您可以使用以下方法

select array_reverse(your_array)[offset(0)]   

我不确定如何将其结合到我的代码中

select  type, array_reverse(array(
    select trim(val) 
      from unnest(split(trim(payload, '[]'))) val
  ))[offset(0)] 
from `githubarchive.day.20210606`
where type = 'MemberEvent' 

4
投票

有一个不颠倒数组的解决方案。

选择事件[OFFSET(ARRAY_LENGTH(事件)-1)


0
投票

Ankit Kumar 的解决方案更可取,但缺少右方括号。

-> '选择事件[OFFSET(ARRAY_LENGTH(event)-1)]'

© www.soinside.com 2019 - 2024. All rights reserved.