Я хотел бы выполнить вычисление с одним запросом для нескольких случаев, когда в Spark SQL:
Мой запрос будет выглядеть следующим образом
Select id, 1/(1+exp(-(
CASE when col1 is null then -0.215244020213 when col1 <= 23.11 then 0.7705802481794184 else 4.199835974425061 END +
CASE when col2 is null then -0.0525954923787 when col2 <= 0E-8 then 0.32648553836619026 else 0.32648553836619026 END
-16.706158802731316) as target from mytable limit 10
Ошибка
AnalysisException: Syntax error in line 684:undefined: ... END -16.706158802731316) as target
^ Encountered: AS Expected: AND, BETWEEN, DIV, I
Запрос будет работать, если я разделю его на табличное выражение. Однако для требования о добавлении столбца в исходную таблицу я хотел перейти на единый расчет на месте. Используя значение табличного выражения, каждый имеет результат в 2 столбца id, target
и должен присоединиться к исходной таблице, которая стоит дорого для таблицы из сотен миллионов строк
with table_exp as
(select
CASE when col1 is null then -0.215244020213 when col1 <= 23.11 then 0.7705802481794184 else 4.199835974425061 end as col1_calc,
CASE when col2 is null then -0.0525954923787 when col2 <= 0E-8 then 0.32648553836619026 else 0.32648553836619026 END as col2_calc
from mytable)
select id, 1/(1+exp(-(col1_calc+col2_calc)-16.706158802731316) as target from table_exp
Udpate: Я понял это. Это не имеет ничего общего с ограничением, только то, что я напутал с круглыми скобками