如何解决BigQuery-连接列的所有行,直到达到特定值
我想连接特定列的所有行,直到达到某个值。
所以在我的示例中,我想使用'>'作为分隔符来连接'PageType'列,直到到达字符串值为'Checkout'的行
它应该看起来像这样: 主页> PLP> PDP> PLP> PDP> PLP> PDP>结帐
谢谢。
解决方法
基本上,在汇总之前进行过滤:
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'
在您的问题中应用于示例数据时-输出为
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)-我认为您可以轻松调整条件。
您可以运行此查询以查看结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。