页面命中 - 未被提前

时间:2017-02-20 20:38:12

标签: google-bigquery

我正在尝试找到一种方法来查找用户访问某个hits.page.hostname的访问次数,但之前的hits.page.hostname不是某个主机。 我当时希望使用GROUP_CONCAT(如'Immediate Follow' Page Path in BigQuery所示)和正则表达式,但我发现RE2没有后视,所以我回到原点。

有没有人有任何想法?

2 个答案:

答案 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>>)+')  

正如您在上面的两个表达式中所看到的 - 您可以在主机内微调访问的长度或设置任何其他更复杂的逻辑来查找。希望你有个主意。

希望你能把你最初的想法重新开始工作!