我正在尝试找到一种方法来查找用户访问某个hits.page.hostname的访问次数,但之前的hits.page.hostname不是某个主机。 我当时希望使用GROUP_CONCAT(如'Immediate Follow' Page Path in BigQuery所示)和正则表达式,但我发现RE2没有后视,所以我回到原点。
有没有人有任何想法?
答案 0 :(得分:1)
我认为您可以更轻松地使用standard SQL。您可以使用UNNEST WITH OFFSET
然后使用数组运算符在数组中“向后”查看。例如,
#standardSQL
SELECT
date,
totals.visits AS total_visits
FROM
`MyProject.dataset.ga_sessions_*`
WHERE
PARSE_DATE('%Y%m%d', _TABLE_SUFFIX) BETWEEN
DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) AND
DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) AND
EXISTS (
SELECT 1 FROM UNNEST(hits) AS hit WITH OFFSET off
WHERE hit.page.hostname = 'foo' AND
NOT hits[SAFE_OFFSET(off - 1)].page.hostname = 'bar'
);
答案 1 :(得分:0)
以下是尝试"保存"你最初的想法是使用GROUP_CONCAT和更晚的REGEX_MATCH
尝试以下
#legacySQL
SELECT
date,
totals.visits AS totalvisits,
GROUP_CONCAT(hits.page.hostname, ">>") WITHIN RECORD AS sequence
FROM TABLE_DATE_RANGE([MySys:110909631.ga_sessions_],
DATE_ADD(CURRENT_TIMESTAMP(), -90, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))
HAVING REGEXP_MATCH(CONCAT('>>', sequence, '>>'), '>>(DesiredHost>>)+')
AND NOT REGEXP_MATCH(CONCAT('>>', sequence, '>>'), '>>(RejectHost>>)+(DesiredHost>>)+')
以上查看DesiredHost
hits.page.hostname
的访问次数
REGEXP_MATCH(CONCAT('>>', sequence, '>>'), '>>(DesiredHost>>)+')
但不包括那些以DesiredHost
RejectHost
的访问
REGEXP_MATCH(CONCAT('>>', sequence, '>>'), '>>(RejectHost>>)+(DesiredHost>>)+')
正如您在上面的两个表达式中所看到的 - 您可以在主机内微调访问的长度或设置任何其他更复杂的逻辑来查找。希望你有个主意。
希望你能把你最初的想法重新开始工作!