簡體   English   中英

BigQuery - 連接列的所有行直到達到特定值

[英]BigQuery - concatenate all rows of column until particular value reached

我想連接特定列的所有行,直到達到某個值。

因此,在我的示例中,我想使用“>”作為分隔符連接“PageType”列,直到到達字符串值為“Checkout”的行

用戶的頁面類型旅程

它應該看起來像這樣: Home > PLP > PDP > PLP > PDP > PLP > PDP > Checkout

先感謝您。

基本上,在聚合之前進行過濾:

select visitid,
       string_agg(pagetype, '>' order by time) as checkout_path
from (select t.*,
             min(case when pagetype = 'Checkout' then time end) over (partition by visitid) as checkout_time
      from t
     ) t
where time <= checkout_time
group by visitid;

以下是 BigQuery 標准 SQL

#standardSQL
SELECT visitId,
  SPLIT(path, ' > Checkout')[OFFSET(0)] || ' > Checkout' path
FROM (
  SELECT visitId, 
    STRING_AGG(PageType, ' > ' ORDER BY time) AS path
  FROM `project.dataset.table`
  GROUP BY visitId
)
WHERE path LIKE '% > Checkout'   

當應用於您的問題中的示例數據時 - output 是

Row visitId     path     
1   1597865846  Home > PLP > PDP > PLP > PDP > PLP > PDP > Checkout  

我看到您使用了 Google Analytics 數據,所以我使用了公開可用的示例數據。 我寫了一個子查詢(包含另一個停止條件的子查詢),而不是不必要的橫向交叉連接。

DECLARE stopPage DEFAULT '/basket.html';

SELECT
  fullvisitorid,
  visitstarttime,
  (SELECT STRING_AGG(page.pagePath, ' > ' ORDER BY time ASC) FROM UNNEST(hits) 
    WHERE type = 'PAGE' 
      AND time <= (select min(time) from unnest(hits) where page.pagePath=stopPage)) AS path
  #ARRAY(SELECT AS STRUCT ecommerceAction, page FROM UNNEST(hits) WHERE  type = 'PAGE' ) AS hits
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` 
WHERE exists(SELECT 1 FROM unnest(hits) WHERE page.pagePath=stopPage)
LIMIT 1000

由於沒有頁面類型,我改用頁面路徑(我隨機選擇了 /basket.html)- 我認為您可以輕松調整條件。

您可以運行此查詢以查看結果。

暫無
暫無

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

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