FIRST_VALUE 窗口函数 - 查询执行期间超出资源

Posted

技术标签:

【中文标题】FIRST_VALUE 窗口函数 - 查询执行期间超出资源【英文标题】:FIRST_VALUE Window Function - Resources exceeded during query execution 【发布时间】:2017-07-12 16:14:33 【问题描述】:

来自包含部门、人员和 url 的表。想为部门和个人的每个组合选择示例 url。

select dept,person,FIRST_VALUE(url) OVER (PARTITION BY dept,person ORDER BY url) from cs.dept_person_url 

以上查询失败,错误:查询执行期间资源超出。

READ  
$1, $2, $3
FROM __SHUFFLE0
SORT  
$1 ASC, $2 ASC, $3 ASC
ANALYTIC FN  
FIRST_VALUE($13) OVER (PARTITION BY $11, $12 ORDER BY $13 ASC RANGE BETWEEN UNBOUNDED PRECEDING AND [...]
WRITE  
$14, $15, $10
TO __SHUFFLE1

失败的阶段有:

Input Rows: 54,344,863 
Output Rows: 48,536,071

请提出任何可行的替代方法。

【问题讨论】:

它必须是 order by 子句作为窗口函数的一部分,但看不到任何其他选项来获取所有组的示例 url。 【参考方案1】:

试试这个:

#standardSQL
select dept, person, ANY_VALUE(url)
from cs.dept_person_url 
group by dept, person

这是因为您需要任何 URL,并且请求 OVER(ORDER BY) 会强制对分区中的所有 URL 进行排序 - 这对于为每个 URL 获取样本来说工作量太大。

【讨论】:

【参考方案2】:

有什么原因吗

SELECT dept, person, FIRST(url)
FROM cs.dept_person_url
GROUP BY dept, person

不会提供您正在寻找的东西?警告 - 我习惯使用 Google Big Query 的 legacy-sql 而不是 standard-sql

【讨论】:

以上是关于FIRST_VALUE 窗口函数 - 查询执行期间超出资源的主要内容,如果未能解决你的问题,请参考以下文章

Greenplum中的First_value窗口函数

Apache spark - 窗口函数,FIRST_VALUE 不起作用

Spark with HiveContext - AnalysisException:无法解析窗口函数“first_value”

SQL查询获取分区里最大和最小值_first_value/last_value

查询结束时的多个窗口定义

OVER 函数和 first_value