spark sql Игнорирует нулевые значения в столбце раздел по предложению

#sql #apache-spark-sql

Вопрос:

Пожалуйста, найдите приведенный ниже запрос. Столбец раздела имеет нулевые значения, и я тоже хочу игнорировать нулевые значения при выполнении last_value в столбце раздела.

 select * from (
select col1, col2,state_time,
coalesce (CASE WHEN ra.col2 ='' THEN NULL ELSE col2 end,
last_value (col2) IGNORE NULLS OVER
 (partition by col1 order by state_time ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING )
) as job_icims_id_der
 from delta_source_db.recruiting_activity ra
 order by state_time desc) inq where col1 is null
 and col2 is null and job_icims_id_der is  not null order by state_time
  limit 10
 

введите описание изображения здесь

Комментарии:

1. И в чем проблема с вашим запросом?

2. Вы не можете игнорировать некоторые значения при разбиении на разделы, потому что каждая входная строка должна быть назначена какому-либо разделу. Что вы ожидаете получить в результате аналитической функции для таких игнорируемых строк? В любом случае вы можете использовать или не использовать вычисленный результат для любой заданной строки в зависимости от других столбцов (независимо от того, является ли этот столбец разделом или нет). Или, пожалуйста, предоставьте более подробную информацию о том, чего вы пытаетесь достичь, предпочтительно с исходными данными и желаемыми результатами в текстовом формате.

Ответ №1:

В SparkSQL флаг игнорирования является вторым аргументом, как и в:

 last_value(col2, true) over
    (partition by col1
     order by state_time
     ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
    ) as job_icims_id_der
 

Я обычно рекомендую first_value() для этой логики, хотя:

 first_value(col2, true) over
    (partition by col1
     order by state_time desc
    ) as job_icims_id_der
 

Для этого не требуется спецификация оконной рамы.