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

Этот вопрос немного похож на мой предыдущий, но имеет другие требования.

Я работаю над таблицей pyspark hive.

Это таблица ежемесячной активности членов клуба .

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

  year month member_id
  2010 01    m_453
  2010 01    m_972
  2010 02    m_453
  2010 02    m_109
  2010 03    m_453
  2010 03    m_721
  2010 03    m_109

Мне нужно найти новых участников, которые будут заниматься активностью каждый месяц. Новый участник означает, что участник впервые принял действие.

например,

  year month member_id
  2010 01    m_453
  2010 01    m_972
  2010 02    m_109
  2010 03    m_721

Год и месяц в приведенной выше таблице - это первый раз, когда участник выполняет действие .

Мой sql:

 with q as 
 (
    select a.member_id, min(a.year * 100 + a.month) as min_year_month
    from MY_TAB as a
    group by a.member_id
  )
 select q.min_year_month, count(distinct(q.member_id)) as dist_m_id
 from q
 group by q.min_year_month
 order by q.min_year_month

Я хотел бы знать, правильно ли это? а есть другие более эффективные DDL?

спасибо

1 Ответ

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

Этот метод подойдет. Я бы использовал:

select year, month, member_id
from (select t.*, row_number() over (partition by member_id order by year, month) as seqnum
      from t
     ) t
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...