Как переслать заполнить пустые значения в таблице - PullRequest
0 голосов
/ 26 мая 2019

У меня есть таблица Big Query, которая выглядит следующим образом:! [Table [(https://ibb.co/1ZXMH71)). Как вы можете видеть, большинство значений пустые. Я хотел бы заполнить эти пустые значения вперед, то есть использовать последнийизвестное значение упорядочено по времени.

По-видимому, для этого есть функция с именем FILL https://cloud.google.com/dataprep/docs/html/FILL-Function_57344752 Но я понятия не имею, как ее использовать.

Это запрос I 'я пытался опубликовать в веб-интерфейсе пользователя:

SELECT sns_6,Time
FROM TABLE_PATH
FILL sns_6,-1,0 order: Time

ошибка, которую я получаю: Синтаксическая ошибка: неожиданный идентификатор "sns_6" в [3: 6]. Мне нужно получить новую таблицу со столбцом sns_6.заполняется последним известным значением.

В качестве бонуса: я бы хотел, чтобы это происходило со всеми столбцами, но поскольку заполнение поддерживает только один столбец, на данный момент мне придется выполнить итерации по всем столбцам.Если у кого-то есть идея, как выполнить итерацию, это будет отличным бонусом.

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Ниже для стандартного SQL BigQuery

Я хотел бы заполнить эти пустые значения вперед, то есть использовать последнее известное значение, упорядоченное по времени

#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
0 голосов
/ 26 мая 2019

Я не уверен, какое отношение имеет ваш снимок экрана к вашему запросу.

Я думаю, что это будет делать то, что вы хотите:

SELECT sns_6, Time,
       LAST_VALUE(sns_6 IGNORE NULLS) ORDER BY (Time) as imputed_sns_6
FROM TABLE_PATH;

EDIT:

Этот запрос работает нормально, когда я его запускаю:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...