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 窗口函数 - 查询执行期间超出资源的主要内容,如果未能解决你的问题,请参考以下文章
Apache spark - 窗口函数,FIRST_VALUE 不起作用
Spark with HiveContext - AnalysisException:无法解析窗口函数“first_value”