我有一个大表(大约 5900 万行,7.1 GB)已经按我的需要排序了,我想查询这个表并为表的每一行获取一个 row_number() 。不幸的是我得到了错误
查询执行期间资源超出:无法在分配的内存中执行查询。
有没有办法增加 BigQuery 中的分配内存?
这是我的查询,我不知道如何简化它,但是如果您有任何建议,我会接受
SELECT
row_number() over() as rowNumber,
game,
app_version,
event_date,
user_pseudo_id,
event_name,
event_timestamp,
country,
platform
FROM
`mediation_time_BASE`
Run Code Online (Sandbox Code Playgroud)
这是完整的错误消息:
查询执行期间资源超出:无法在分配的内存中执行查询。峰值使用量:限制的 146%。顶级内存消费者:分析 OVER() 子句:98% 其他/未归因:2%
编辑: 此处的查询表示事件开始和结束的列表,我需要将开始事件与其结束联系起来,因此我遵循以下提示:https : //www.interfacett.com/blogs/how-to-use- values-from-previous-or-next-rows-in-a-query-in-sql-server/ 为此,我需要使用 row_number() 行,以便将此子查询分成 2 个(事件开始在一只手和事件在另一个中结束),加入它们,然后每个事件有一行,事件的开始和结束,如下(其中子查询表示带有 row_number() 的查询):
SELECT
(case when lead(inter.rowNumber) OVER(ORDER BY inter.rowNumber) - inter.rownumber =1
then lead(inter.rowNumber) OVER(ORDER BY inter.rowNumber)
else inter.rownumber end) as rowNumber,
min(inter_success.rowNumber) as rowNumber_success,
inter.game,
inter.app_version,
inter.event_date,
inter.user_pseudo_id,
inter.event_timestamp as event_start,
min(inter_success.event_timestamp) as event_end,
inter_success.event_name as …Run Code Online (Sandbox Code Playgroud)