запрос на поиск новых значений, недоступных в предыдущий момент времени для данных временных рядов в таблице улья - PullRequest
1 голос
/ 05 августа 2020

Я хотел бы запросить данные из таблицы улья pyspark.

Таблица:

   year month ids
   2005 10    csec
   2005 10    thth
   2005 11    csec
   2005 11    thth
   2005 11    yjsd
   2005 12    yjwe
   2005 12    yjsd

Мне нужно:

   year month ids
   2005 11    yjsd -- not appear in 200510
   2005 12    yjwe -- nor appear in 200511

Это найти новый "идентификаторы", недоступные в предыдущем месяце.

Мой sql:

  select a.year, a.month, count(distinct(a.ids)) as dist_ids
  from MY_TABLE as a
  where a.ids not in 
  (
    select distinct b.ids
    from MY_TABLE as b
    where isnull(b.ids) = false 
        and (a.year  = b.year and a.month  - 1 = b.month) or (a.year - 1 = b.year and 
      a.month = 1 and b.month = 12)
   ) 
   group by year, month
   order by year, month

Но запрос выполняется очень медленно.

как ускорить ?

спасибо

1 Ответ

1 голос
/ 05 августа 2020

Если у вас только одна таблица, вы можете использовать оконные функции. Предполагая, что у вас есть одна строка в месяц для каждого идентификатора, как в ваших данных образца:

select a.year, a.month, count(distinct(a.ids)) as dist_ids
from (select a.*,
             lag(year * 12 + month) over (partition by id order by year, month) as prev_yyyymm
      from MY_TABLE a
     ) a
where prev_yyyymm is null or prev_yyyymm <> year * 12 + month - 1
group by year, month
order by year, month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...