BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择相关的知识,希望对你有一定的参考价值。
我知道标题可能很愚蠢,但我很难用不同的方式来表达它。
我必须在工作环境中使用BigQuery来获取一些报告。 BigQuery已连接到我们的Google Analytics视图。这给了我们一个每天有1个表的数据集。表的行是我们站点上的用户会话,而列包含有关会话的一些信息。
我遇到的问题如下:我想选择具有事务的会话,但前提是在事务发生前的最后x天内,某个引用者将用户引用到我们的站点。我只熟悉基本的SQL而不是任何高级概念。这对我来说真的很令人沮丧,因为对于任何适当的编程语言而言,如果给出一个.csv的数据,这将是一个明智的选择,但我缺乏SQL中相关概念的知识。
#standardSQL
SELECT
COUNT(*)
FROM
`dataset.ga_sessions_2017*`
WHERE
totals.transactions > 0 AND
fullVisitorId IN (SELECT
fullVisitorId
FROM
`dataset.ga_sessions_2017*`
WHERE
trafficSource.source = "xyz.com"
) AND
< date difference thing>
我可以像使用trafficSource(referrer)那样过滤日期差异。对我来说问题是虽然“xyz.com”是一个静态的东西,但我需要引用我所在的当前行的日期值。所以我过滤第二个SELECT的日期将是动态的从一行到另一行。任何人都可以指导我如何做到这一点?这似乎是经常出现的事情。
我没有特别熟悉GA表,但之前在BigQuery中编写了一些wildcard queries,我认为您正在寻找的是可以使用_TABLE_SUFFIX
伪列完成的:
CAST(_TABLE_SUFFIX AS INT64) >= 1217
其中1217
是今天的MMDD格式减去3天的日期,假设表名是_20171217,_20171218等。否则你可以在转换为int之前使用REPLACE
删除下划线。如果您需要自动运行此查询,还有一些函数可以为您生成今天的日期。
此外,我认为fullVisitorId
业务可以用简单的WHERE trafficSource.source = "xyz.com"
取代,但是如果不能自己运行查询就很难说。
所以完整的查询看起来像这样:
#standardSQL
SELECT
COUNT(*)
FROM
`dataset.ga_sessions_2017*`
WHERE
totals.transactions > 0 AND
trafficSource.source = "xyz.com" AND
CAST(_TABLE_SUFFIX AS INT64) >= 1217
以上是关于BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择的主要内容,如果未能解决你的问题,请参考以下文章
如果我们在 BigQuery 中使用具有相同分区类型(天)的另一列进行过滤,where 子句中的分区列是不是不是必需的?
在 BigQuery 中,带有空值数组列的“where”子句导致问题
是否可以在 Union All BigQuery SQL 中让 where 子句引用另一个 where 子句?
BigQuery 的 WHERE 子句中的 SELECT 语句不起作用