У меня есть запрос, который имеет много опережений и задержек, из-за чего повторяется разделение по коду.
Если я использую код Scala, я могу определить спецификацию окна и использовать ее повторно, поэтому есть способ, которым я могу повторно использовать код раздела в Spark SQL.
Цель состоит в том, чтобы избежать повторения "over (разбиение по sessionId, упорядочение устройства по идентификатору entry_datetime)"
SELECT * ,
lag( channel,1,null ) over ( partition by sessionId, deviceId order by entry_datetime ) as prev_chnl,
lead( channel,1,null ) over ( partition by sessionId, deviceId order by entry_datetime ) as next_chnl,
lag( channel-source,1,null ) over ( partition by sessionId, deviceId order by entry_datetime ) as prev_chnl_source,
lead( channel-source,1,null ) over ( partition by sessionId, deviceId order by entry_datetime ) as next_chnl_source,
FROM RAW_VIEW
RAW_VIEW
+------------+-----------+---------------------+---------+-----------------+
|sessionId |deviceId |entry_datetime |channel |channel-source |
+------------+-----------+---------------------+---------+-----------------+
|SESSION-ID-1|DEVICE-ID-1|2018-04-09 15:00:00.0|001 |Internet |
|SESSION-ID-1|DEVICE-ID-1|2018-04-09 16:00:00.0|002 |Cable |
|SESSION-ID-1|DEVICE-ID-1|2018-04-09 17:00:00.0|003 |Satellite |
+------------+-----------+---------------------+---------+-----------------+
ЗАКЛЮЧИТЕЛЬНЫЙ ВИД
+------------+-----------+---------------------+---------+-----------------+---------+---------+-----------------+-----------------+
|sessionId |deviceId |entry_datetime |channel |channel-source |prev_chnl|next_chnl|prev_chnl_source |next_chnl_source |
+------------+-----------+---------------------+---------+-----------------+---------+---------+-----------------+-----------------+
|SESSION-ID-1|DEVICE-ID-1|2018-04-09 15:00:00.0|001 |Internet |null |002 |null |Cable |
|SESSION-ID-1|DEVICE-ID-1|2018-04-09 15:01:00.0|002 |Cable |001 |003 |Internet |Satellite |
|SESSION-ID-1|DEVICE-ID-1|2018-04-09 15:02:00.0|003 |Satellite |002 |null |Cable |null |
+------------+-----------+---------------------+---------+-----------------+---------+---------+-----------------+-----------------+