其中哪一个是更有效的查询运行:
在WHERE子句中包含/不包含过滤条件并为每行测试的一个
SELECT distinct fullvisitorid
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910` t, unnest(hits) as ht
WHERE (select max(if(cd.index = 1,cd.value,null))from unnest(ht.customDimensions) cd)
= 'high_worth'
一个返回所有行,然后外部SELECT子句执行所有过滤测试到INCLUDE / DO NOT INCLUDE
SELECT distinct fullvisitorid
FROM
(
SELECT
fullvisitorid
, (select max(if(cd.index = 1,cd.value,null)) FROM unnest(ht.customDimensions) cd) hit_cd_1
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910` t
, unnest(hits) as ht
)
WHERE
hit_cd_1 = 'high_worth'
两者产生完全相同的结果! 目标是:fullvisitorId列表,曾发送过命中级自定义维度(index = 1),其值为''high_worth'用户()
感谢您的投入!
干杯!
/ Vibhor
答案 0 :(得分:1)
我尝试了两个查询并比较了他们的explanations,它们完全相同。我假设在查询运行之前发生了某种优化魔法。
答案 1 :(得分:0)
从您最初的两个查询开始:显然-即使您稍微重新排列了外观,它们也是相同的。因此,您应该从这两个中选择更易于阅读/维护的内容。我会选择第一个查询-但这实际上是个人喜好问题
同时,请尝试以下方法(BigQuery Standard SQL)-对我来说,它似乎有些优化-但我没有机会对真实数据进行测试
SELECT DISTINCT fullvisitorid
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910` t,
UNNEST(hits) AS ht, UNNEST(ht.customDimensions) cd
WHERE cd.index = 1 AND cd.value = 'high_worth'
很明显-它应该产生与您的两个查询相同的结果
执行计划对我来说更好,它(查询)更快,更易于阅读/管理