簡體   English   中英

BigQuery 根據某個字符串值在列中出現的次數將所有指標分成 n 個相等的部分

[英]BigQuery to split the all the metrics into n equal parts depending on the number of times a certain string value appears in a column

我不知道如何解釋這個問題。 我將在下面分享示例 i/p 和 o/p。 請注意,“job#”在一行中出現的次數並不固定。

輸入

在此處輸入圖像描述

Output

在此處輸入圖像描述

嘗試使用regexp_extract_all function,如下所示:

with sample_data as (
  SELECT 'camp1' as camp, '01/08/2022' as date, 'job#12' as job, 23 as a1, 34 as a2, 21 as a3 UNION ALL
  SELECT 'camp2', '01/08/2022', 'job#14 & job#15', 20, 30, 30 UNION ALL
  SELECT 'camp3', '01/08/2022', 'job#11 job#13 job#20', 21, 30, 21 union all
  select 'camp4', '01/08/2022', 'job#21 & job#22 & job#23 & job#24', 40, 12, 8
)

SELECT camp,
  date,
  job_ex,
  a1,
  a2,
  a3,
  a1/ count(job_ex) OVER (PARTITION BY camp) a1_split,
  a2/ count(job_ex) OVER (PARTITION BY camp) a2_split,
  a3/ count(job_ex) OVER (PARTITION BY camp) a3_split,
FROM sample_data,
  UNNEST(regexp_extract_all(job, r'job\#\d+')) as job_ex

它產生以下結果在此處輸入圖像描述

考慮以下方法

select camp, date, job, 
  a1/jobs_count as a1, 
  a2/jobs_count as a2, 
  a3/jobs_count as a3
from your_table, 
unnest([struct(regexp_extract_all(job, r'job#\d+') as jobs_arr)]), 
unnest([array_length(jobs_arr)]) jobs_count,
unnest(jobs_arr) job

如果應用於您問題中的示例數據 - output 是

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM