如何在BigQuery中用上一个非空值填充后续空值行
在BigQuery中用前一个非空值填充Null的解决方案
要实现你需要的将表格中null值替换为上一个非空值的需求,BigQuery的窗口函数LAST_VALUE搭配IGNORE NULLS参数是最直接高效的方案,下面是具体实现步骤:
完整SQL示例
首先我们先模拟你的样本数据,然后写出处理逻辑:
WITH sample_data AS ( SELECT 'aba' AS person_id, TIMESTAMP('2021-09-10 10:00:00') AS event_time UNION ALL SELECT 'finix', TIMESTAMP('2021-09-10 10:30:35') UNION ALL SELECT 'walter', TIMESTAMP('2021-09-10 10:35:24') UNION ALL SELECT 'cimon', TIMESTAMP('2021-09-10 10:36:48') UNION ALL SELECT NULL, NULL UNION ALL SELECT NULL, NULL UNION ALL SELECT 'abhijit', TIMESTAMP('2021-09-10 11:35:00') UNION ALL SELECT 'ankur', TIMESTAMP('2021-09-10 14:30:35') ) SELECT LAST_VALUE(person_id IGNORE NULLS) OVER( ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS person_id, LAST_VALUE(event_time IGNORE NULLS) OVER( ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS event_time FROM sample_data
关键逻辑解释
LAST_VALUE函数:这个窗口函数用于获取窗口范围内的最后一个值,搭配IGNORE NULLS后,会自动忽略窗口中的null值,只取最近的非空值。- 窗口范围设置:
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW指定了窗口范围是从结果集的第一行到当前行,确保我们取的是截至当前行之前的最后一个非空值,而不是整个窗口的最后值。 - 排序规则:
ORDER BY event_time保证了我们是按照时间顺序来填充null值,完全符合你数据的逻辑顺序。
执行这段SQL后,就能得到你需要的目标表格效果。如果你的实际表不是临时数据,只需要把CTE部分替换成你的真实表名即可。
内容的提问来源于stack exchange,提问作者kalyan4uonly
相关产品推荐
相关产品推荐

