2

我正在使用 Bigquery,并且我有一个包含数组的数据集,我想在其中提取首次找到指定元素的索引。我在 Bigquery 中找不到实现我想要的功能。Dataprep 具有arrayindexof执行此操作的功能,但在撰写本文时它在 Bigquery 中不可用。https://cloud.google.com/dataprep/docs/html/ARRAYINDEXOF-Function_136155116

如果arrayindexofBigquery 中存在,我们可以按照以下方式使用它。

select arrayindexof(metric, 'b') as index, value[offset(arrayindexof(metric, 'b'))] as b
from (select ['a', 'b', 'c'] as metric, [1, 2, 3] as value
      union all select ['b', 'c'], [4, 5]
      union all select ['c'], [6])

期望的结果:

Row|index|   b
--------------
  1|    1|   2
  2|    0|   4
  3| NULL|NULL

知道如何在 Bigquery 中实现所需的结果吗?

亲切的问候,

4

1 回答 1

4

以下是 BigQuery 标准 SQL

#standardSQL
select 
  ( select offset 
    from unnest(metric) m with offset 
    where m = 'b'
  ) index, 
  ( select v
    from unnest(metric) m with offset
    join unnest(value) v with offset
    using(offset)
    where m = 'b'
  ) b
from `project.dataset.table` 

如果适用于您的问题的样本数据 - 输出是

在此处输入图像描述

另一种选择(显然具有相同的结果):

#standardSQL
select index, value[offset(index)] value
from (
  select *,
    ( select offset 
      from unnest(metric) m with offset 
      where m = 'b'
    ) index
  from `project.dataset.table` 
)
于 2020-10-26T18:34:18.320 回答