限制在两个日期分区之间进行选择的视图
问题描述:
我希望为Google Analytics着陆页定义一个视图。我试图通过保存以下查询作为视图设置此:限制在两个日期分区之间进行选择的视图
SELECT
date,
fullVisitorId AS fv,
visitID AS v,
h.page.pagePath AS landing_page
FROM
`project-id.dataset.ga_sessions_*`, UNNEST(hits) AS h
WHERE
hitNumber = 1
在这种加入到这一观点的疑问我打算将它们限制在两者之间的日期分区,就像这样:
SELECT
sessions.date,
fullVisitorId AS fv,
visitId AS v,
landing_page
FROM `project-id.dataset.ga_sessions_*` AS sessions, UNNEST(hits) AS h
JOIN `project-id.dataset.landing_pages` AS landing_pages
ON landing_pages.fv = sessions.fullVisitorId
AND landing_pages.date = sessions.date
AND landing_pages.v = sessions.visitId
WHERE
_TABLE_SUFFIX BETWEEN '20170108' AND '20170108'
这似乎仍然选择大容量的数据~5GB,而不是预计将有一天的〜60MB。
如何重新编写视图,以便它只选择由消费查询定义的相关日期分区?
答
确保在视图定义中包含_TABLE_SUFFIX
,以便您可以在视图上的查询中引用它。下面是转换_TABLE_SUFFIX
一个日期的例子:
SELECT
date,
fullVisitorId AS fv,
visitID AS v,
h.page.pagePath AS landing_page,
PARSE_DATE('%Y%m%d', _TABLE_SUFFIX) AS sessions_date
FROM
`project-id.dataset.ga_sessions_*`, UNNEST(hits) AS h
WHERE
hitNumber = 1;
现在尝试查询过的观点:
SELECT
COUNT(DISTINCT fullVisitorId) AS total_visitors
FROM `dataset.view_name`
WHERE sessions_date = '2017-01-08';
由于埃利奥特,这并获得成功。有没有办法避免指定“WHERE sessions_date ='20170108'?我在消费查询中尝试了LEFT JOIN,但仍然选择了大量的数据。感觉应该有一种方式,但我想所有人都说并且尽量减少查询的数量 – goose
“LEFT JOIN”的问题是,如果视图在右边,'sessions_date'可能最终为空(如果一个键不能为空不存在于视图中),所以过滤器不能像通常那样被“推下”。避免这种情况的一种方法是使用子查询,例如'LEFT JOIN(SELECT ... FROM my_view WHERE sessions_date = .. )'。 –