表结构:
InvoiceLineKey(串),
收入(浮动),
COGS(浮动),
COST1(浮动),
Cost2(浮动),
COST3(浮动),
Cost4(浮动),
Cost5(浮动),
Proft(浮动),
QSPEC(浮点)。
行数:60,000,000条记录
选择
InvoiceLineKey,
收入,
COGS,
COST1,
Cost2,
COST3,
Cost4,
Cost5,
Proft,
""作为QSPEC,
排名()(按收入DESC排序)排名,
SUM(收入)超过(按收入DESC订购)作为累计收入
从
[PI-训练:training.training_fact]
WHERE
收入> 0
订购单
收入DESC
查询失败失败,错误为:
查询执行期间超出资源:查询无法执行 在分配的内存中执行。 ORDER BY运算符使用太多了 存储器..
答案 0 :(得分:2)
假设InvoiceLineKey
大小约为8个字节(与浮点列大小相同),则6000万行意味着结果大小约为4.8千兆字节。 documentation on "Managing Query Outputs" for BigQuery解释说,在大型数据集上使用ORDER BY
时,您应该包含LIMIT
或过滤器。
在您的情况下,假设大约十分之一Revenue
值大于10000,并且这些是您要返回的值,您可以使用WHERE Revenue >= 10000
将行数限制为排序到较小的数据子集。