Google analytics 标准sql中的BigQuery筛选记录

Google analytics 标准sql中的BigQuery筛选记录,google-analytics,google-bigquery,Google Analytics,Google Bigquery,我正在统计所有在我们主页上提交邮政编码的访问者。我在遗留SQL中提出了以下查询: SELECT fullVisitorId, visitStartTime FROM TABLE_DATE_RANGE([ga_sessions_], TIMESTAMP('2017-01-29'), CURRENT_TIMESTAMP()) where hits.page.pagePath = '/broadband/' and visitStartTime > 1483228800 and hits.typ

我正在统计所有在我们主页上提交邮政编码的访问者。我在遗留SQL中提出了以下查询:

SELECT fullVisitorId, visitStartTime
FROM TABLE_DATE_RANGE([ga_sessions_], TIMESTAMP('2017-01-29'), CURRENT_TIMESTAMP())
where hits.page.pagePath = '/broadband/'
and visitStartTime > 1483228800
and hits.type   = 'EVENT'
and hits.eventInfo.eventCategory = 'Homepage'
and hits.eventInfo.eventAction = 'Submit Postcode';
然后,我想将其转换为标准SQL以在CTE中使用,并提出了这个似乎不正确的方法

SELECT fullVisitorId, visitStartTime
FROM ``ga_sessions_*``, UNNEST(hits) as h
where 

_TABLE_SUFFIX > '2017-01-29'
AND h.page.pagePath = '/broadband/'
and visitStartTime > 1483228800
and h.type  = 'EVENT'
and h.eventInfo.eventCategory = 'Homepage'
and h.eventInfo.eventAction = 'Submit Postcode';
第一个处理327 MB并返回4117个结果,第二个处理6.98 GB并返回60745个结果

我已经看过了,但它对我没有多大帮助


ga_会话已将ga导入到Bigquery中。

这里发生的是as
\u TABLE_后缀是一个字符串,因此当您执行以下操作时:

_TABLE_SUFFIX > '2017-01-29'
最后,由于字符串比较不同于数字比较,您将选择比预期更多表的方式

一种可能的修复方法是将字符串解析为
DATE
类型:

SELECT fullVisitorId, visitStartTime
FROM `ga_sessions*`, UNNEST(hits) as h
where parse_date("%Y%m%d", regexp_extract(_table_suffix, r'.*_(.*)')) >=  parse_date("%Y-%m-%d", '2017-01-29')

AND h.page.pagePath = '/broadband/'
and visitStartTime > 1483228800
and h.type  = 'EVENT'
and h.eventInfo.eventCategory = 'Homepage'
and h.eventInfo.eventAction = 'Submit Postcode';
其中,操作首先将字符串强制转换为
DATE
,然后进行比较


注意,我将通配符选择更改为<强> GAyStudio,然后使用<代码> ReExxId提取< /C> >我只考虑“y”字符后面的内容。通过这样做,您还可以选择“日内”表格。

这里发生的事情是,as
\u TABLE\u SUFFIX
是一个字符串,因此当您执行以下操作时:

_TABLE_SUFFIX > '2017-01-29'
最后,由于字符串比较不同于数字比较,您将选择比预期更多表的方式

一种可能的修复方法是将字符串解析为
DATE
类型:

SELECT fullVisitorId, visitStartTime
FROM `ga_sessions*`, UNNEST(hits) as h
where parse_date("%Y%m%d", regexp_extract(_table_suffix, r'.*_(.*)')) >=  parse_date("%Y-%m-%d", '2017-01-29')

AND h.page.pagePath = '/broadband/'
and visitStartTime > 1483228800
and h.type  = 'EVENT'
and h.eventInfo.eventCategory = 'Homepage'
and h.eventInfo.eventAction = 'Submit Postcode';
其中,操作首先将字符串强制转换为
DATE
,然后进行比较


注意,我将通配符选择更改为<强> GAyStudio,然后使用<代码> ReExxId提取< /C> >我只考虑“y”字符后面的内容。通过这样做,您还可以选择“日内”表。

看起来不同之处在于,使用标准SQL,当您在
from
子句中交叉连接UNNEST(hits)
时,您在
命中数上展平表,从而向结果中添加更多行。更等效的查询是:

#standardSQL
SELECT fullVisitorId, visitStartTime
FROM `ga_sessions_*`
where 
_TABLE_SUFFIX > '20170129'   
and visitStartTime > 1483228800
and EXISTS(
  SELECT 1 FROM UNNEST(hits) h 
  WHERE h.type  = 'EVENT'
    and h.page.pagePath = '/broadband/'
    and h.eventInfo.eventCategory = 'Homepage'
    and h.eventInfo.eventAction = 'Submit Postcode');

不同之处似乎来自这样一个事实:使用标准SQL,当您在
from
子句中
交叉连接unest(hits)
时,您在
hits
上展平表,从而向结果中添加更多行。更等效的查询是:

#standardSQL
SELECT fullVisitorId, visitStartTime
FROM `ga_sessions_*`
where 
_TABLE_SUFFIX > '20170129'   
and visitStartTime > 1483228800
and EXISTS(
  SELECT 1 FROM UNNEST(hits) h 
  WHERE h.type  = 'EVENT'
    and h.page.pagePath = '/broadband/'
    and h.eventInfo.eventCategory = 'Homepage'
    and h.eventInfo.eventAction = 'Submit Postcode');

我已经修正了你答案中一些可能的拼写错误,结果现在更接近了,尽管仍然不一样。它们现在都处理相同数量的数据,表明搜索相同的选项卡。(我认为名称空间中没有最新的日内表。)尽管如此,仍然存在差异:标准sql运行17.3秒,返回7749个结果。传统sql运行1.4s并返回6623个结果…嗯,我明白了。请在
WHERE
子句中添加以下条件:
and not regexp\u contains(\u table\u后缀,r'intraday')
,并查看结果是否匹配?我怀疑,盘中的表格添加了更多的遗产,这些遗产以前没有考虑过。我的理解是,我们只将全天结果复制到欧盟地区的名称空间。这是我查询的名称空间,因此它不会有日内结果。标准sql需要更长的时间吗?我已经修复了您答案中可能出现的一些拼写错误,结果现在更接近了,尽管仍然不一样。它们现在都处理相同数量的数据,表明搜索相同的选项卡。(我认为名称空间中没有最新的日内表。)尽管如此,仍然存在差异:标准sql运行17.3秒,返回7749个结果。传统sql运行1.4s并返回6623个结果…嗯,我明白了。请在
WHERE
子句中添加以下条件:
and not regexp\u contains(\u table\u后缀,r'intraday')
,并查看结果是否匹配?我怀疑,盘中的表格添加了更多的遗产,这些遗产以前没有考虑过。我的理解是,我们只将全天结果复制到欧盟地区的名称空间。这是我查询的名称空间,因此它不会有日内结果。标准sql是否需要更长的时间?是否存在子查询未连接到任何对象?在什么情况下不是这样的?我将pagePath谓词移动到了h可用的子查询中。4699个结果,处理了2.84 GB。_TABLE_SUFFIX>'20170129'和parse_date(%Y%m%d),regexp_extract(_TABLE_SUFFIX,r'.*_(.*))>=parse_date('Y-%m-%d','2017-01-29')是否等效?我建议您首先在一个特定的日期测试您的查询,因此您将_TABLE_SUFFIX谓词从查询中删除。一旦您在某一天获得匹配的数字,就需要找到等效的_TABLE_后缀条件,尽管我在查询中输入的条件看起来与原始查询中的相同。Unest(hits)上存在半连接-与原始查询中的Unest(hits)上的交叉连接相同。对于一天,我获得匹配结果!谢谢我接受你的回答。我仍然不完全理解这些差异,我将不得不进一步阅读。是否存在子查询未连接到任何内容?在什么情况下不是这样的?我将pagePath谓词移动到了h可用的子查询中。4699个结果,处理了2.84 GB。_TABLE_SUFFIX>'20170129'和parse_date(%Y%m%d),regexp_extract(_TABLE_SUFFIX,r'.*_(.*))>=parse_date('Y-%m-%d','2017-01-29')是否等效?我建议您首先在一个特定的日期测试您的查询,因此您将_TABLE_SUFFIX谓词从查询中删除。一旦您在某一天获得匹配的数字,就需要找到等效的_TABLE_后缀条件,尽管我在查询中输入的条件看起来与原始查询中的相同。Unest(hits)上存在半连接-与原始查询中的Unest(hits)上的交叉连接相同。对于一天,我获得匹配结果!谢谢我接受你的回答。我还是不完全明白