我有一个大查询表,看起来像这样: ![表3}}) 如您所见,大多数值都是空的。 我想向前填充这些空值,这意味着使用按时间排序的最后一个已知值。
显然,有一个名为FILL的函数 https://ibb.co/1ZXMH71 但是我不知道如何使用它。
这是我尝试在网络UI上发布的查询:
SELECT sns_6,Time
FROM TABLE_PATH
FILL sns_6,-1,0 order: Time
我得到的错误是: 语法错误:[3:6]处出现意外的标识符“ sns_6” 我想要的是获取一个新表,其中sns_6列填充有最后一个已知值。
作为奖励:我希望对所有列都执行此操作,但是由于fill仅支持单个列,因此,现在,我必须遍历所有列。如果有人知道如何进行迭代,那将是很大的收获。
答案 0 :(得分:0)
我不确定您的屏幕截图与查询有关。
我认为这将满足您的要求
SELECT sns_6, Time,
LAST_VALUE(sns_6 IGNORE NULLS) ORDER BY (Time) as imputed_sns_6
FROM TABLE_PATH;
编辑:
运行该查询时,它运行良好:
select table_path.*, last_value(sn_6 ignore nulls) over (order by time)
from (select 1 as time, null as sn_6 union all
select 2, 1 union all
select 3, null union all
select 4, null union all
select 5, null union all
select 6, 0 union all
select 7, null union all
select 8, null
) table_path;
答案 1 :(得分:0)
以下是用于BigQuery标准SQL
我想向前填充这些空值,这意味着使用按时间排序的最后一个已知值
#standardSQL
SELECT time
LAST_VALUE(sns_1 IGNORE NULLS) OVER(ORDER BY time) sns_1,
LAST_VALUE(sns_2 IGNORE NULLS) OVER(ORDER BY time) sns_2
FROM `project.dataset.table`
我希望所有列都这样
您可以在下面的行中添加所需填充的列(显然,您需要将sns_N
替换为真实列的名称
LAST_VALUE(sns_N IGNORE NULLS) OVER(ORDER BY time) sns_N