如何转发填充表中的空值

时间:2019-05-26 15:17:31

标签: sql google-bigquery

我有一个大查询表,看起来像这样: ![表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仅支持单个列,因此,现在,我必须遍历所有列。如果有人知道如何进行迭代,那将是很大的收获。

2 个答案:

答案 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