У меня есть таблица журнала пользователя, разделенная на action_date (имя таблицы - user_action_log), состоящее из миллиардов строк, со столбцами
user_id, action_name, action_date
Примерdata -
+---------+-------------+-------------+
| user_id | action_name | action_date |
+---------+-------------+-------------+
| 123 | login | 2018-01-30 |
| 123 | logout | 2018-01-31 |
| 123 | click | 2018-02-28 |
| 123 | comment | 2018-02-15 |
| 123 | post | 2018-03-15 |
+---------+-------------+-------------+
Я хочу написать ETL / sql для преобразования этих данных в нечто подобное (имя таблицы - user_action_record).
user_id (первичный ключ), first_action_date, last_action_date, previous_action_date
Пример выходных данных -
+---------+-------------------+------------------+---------------------------+
| user_id | first_action_date | last_action_date | previous_last_action_date |
+---------+-------------------+------------------+---------------------------+
| 123 | 2018-01-30 | 2018-03-15 | 2018-02-28 |
+---------+-------------------+------------------+---------------------------+
Я попытался разделить проблему на 2 шага -
- Вставка новых пользователей, которых нет в user_action_record.
- Обновите существующего пользователя, обновив «previous_last_action_date» со значения в «last_action_date» и обновив last_action_date на основе таблицы user_action_log.
Проблема в том, что, поскольку user_action_log разделен на action_date, я могу запрашивать эту таблицу ежедневно (action_date = CURRENT_DATE)
Может ли кто-нибудь помочь мне с sqls заполнить мойтаблица целей в этом случае?
- отредактировано с дополнительной информацией ниже
- Исходная и ожидаемая таблица целей в день '2018-01-30'
+---------+-------------+-------------+
| user_id | action_name | action_date |
+---------+-------------+-------------+
| 123 | login | 2018-01-30 |
| 123 | logout | 2018-01-30 |
| 123 | click | 2018-01-30 |
+---------+-------------+-------------+
+---------+-------------------+------------------+---------------------------+
| user_id | first_action_date | last_action_date | previous_last_action_date |
+---------+-------------------+------------------+---------------------------+
| 123 | 2018-01-30 | 2018-01-30 | 2018-01-30 |
+---------+-------------------+------------------+---------------------------+
Исходная и ожидаемая целевая таблица на день '2018-01-31'
+---------+-------------+-------------+
| user_id | action_name | action_date |
+---------+-------------+-------------+
| 123 | login | 2018-01-30 |
| 123 | logout | 2018-01-30 |
| 123 | click | 2018-01-30 |
| 123 | login | 2018-01-31 |
| 123 | logout | 2018-01-31 |
+---------+-------------+-------------+
+---------+-------------------+------------------+---------------------------+
| user_id | first_action_date | last_action_date | previous_last_action_date |
+---------+-------------------+------------------+---------------------------+
| 123 | 2018-01-30 | 2018-01-31 | 2018-01-30 |
+---------+-------------------+------------------+---------------------------+
Исходная и ожидаемая целевая таблица на день '2018-02-15'
+---------+-------------+-------------+
| user_id | action_name | action_date |
+---------+-------------+-------------+
| 123 | login | 2018-01-30 |
| 123 | logout | 2018-01-30 |
| 123 | click | 2018-01-30 |
| 123 | login | 2018-01-31 |
| 123 | logout | 2018-01-31 |
| 123 | logout | 2018-02-15 |
| 123 | logout | 2018-02-15 |
+---------+-------------+-------------+
+---------+-------------------+------------------+---------------------------+
| user_id | first_action_date | last_action_date | previous_last_action_date |
+---------+-------------------+------------------+---------------------------+
| 123 | 2018-01-30 | 2018-02-15 | 2018-01-31 |
+---------+-------------------+------------------+---------------------------+