我在Google Analytics数据库中使用BigQuery。在开发查询的各个阶段,我得到错误:"资源超出"。我希望进一步了解发生了什么。我成功地解决了这个问题,但只能通过反复试验。
当我使用解释工具时,似乎是'计算'任何看起来超出资源的查询或子查询的一部分。
以下是标准SQL查询成功/失败的示例,具体取决于是否保留了某些部分:
SELECT
fullVisitorId,
visitId,
h.type AS type,
h.hitNumber AS hitNumber,
h.eventInfo.eventAction AS action,
LOWER(h.eventInfo.eventCategory) AS category,
h.page.pagePath AS page,
h.page.pageTitle AS landingTitle,
h.page.searchKeyword AS searchTerm,
LEAD(h.page.pagePath) OVER (PARTITION BY fullVisitorId, visitId ORDER BY h.hitNumber ASC) AS landingPage,
SPLIT(h.eventInfo.eventLabel, ':')[OFFSET(0)] AS clickTitle,
CASE WHEN LEAD(h.page.pageTitle) OVER (PARTITION BY fullVisitorId, visitId ORDER BY h.hitNumber ASC) = SPLIT(h.eventInfo.eventLabel, ':')[OFFSET(0)] THEN true ELSE false END AS searchClick
FROM `project.dataset.ga_sessions_*` AS main, UNNEST(hits) AS h
WHERE _TABLE_SUFFIX BETWEEN '20170401' AND '20170430'
AND (
(
h.eventInfo.eventAction = 'click' AND LOWER(h.eventInfo.eventCategory) LIKE '/search%'
)
OR type = 'PAGE'
)
ORDER BY
fullVisitorId ASC, visitId ASC, h.hitNumber ASC
当删除这些元素集中的任何一个时,查询运行:
ORDER BY
fullVisitorId ASC, visitId ASC, h.hitNumber ASC
或者:
LEAD(h.page.pagePath) OVER (PARTITION BY fullVisitorId, visitId ORDER BY h.hitNumber ASC) AS landingPage,
SPLIT(h.eventInfo.eventLabel, ':')[OFFSET(0)] AS clickTitle,
CASE WHEN LEAD(h.page.pageTitle) OVER (PARTITION BY fullVisitorId, visitId ORDER BY h.hitNumber ASC) = SPLIT(h.eventInfo.eventLabel, ':')[OFFSET(0)] THEN true ELSE false END AS searchClick
或者:
在单个日期分区上运行时,整个查询都会运行。
我会将目前的理解水平描述为肤浅的,我对GBQ的内部工作原理以及它如何分配/允许计算资源知之甚少。我知道它尽可能在不同的机器上执行计算。我之前听说过这些被描述为碎片。
我需要了解哪些GBQ计算资源才能理解为什么上述工作/不工作?
N.B:我只有第1级访问权限,但这并不意味着如果我可以证明需要,我就无法获得更多的访问权限。显然,我不想以目前的理解水平做到这一点。