ошибка искры sql при запуске коррелированного подзапроса - PullRequest
0 голосов
/ 10 сентября 2018

Я запускаю ниже искровой SQL-запрос в Intellij Maven IDE,

SELECT seq_no, 
       amount, 
       (select max(b.amount) 
        from premium b 
        where b.seq_no < a.seq_no) last_high_prem
FROM premium a

Получил ошибку ниже,

Исключение в потоке "main" org.apache.spark.sql.AnalysisException: коррелированный скалярный подзапрос может содержать только предикаты равенства: (seq_no # 11 # 32

Я понимаю коррелированный запрос, когда используется оператор равенства, тогда он работает только в спарк SQL. Есть ли способ преодолеть эту проблему.

Я знаю, что мы можем сделать это, hiveql. Но нужно настроить Hadoop и куст в моей локальной машине. Пожалуйста, дайте мне знать, как решить эту проблему.

1 Ответ

0 голосов
/ 10 сентября 2018

Я почти ничего не знаю о Spark SQL, но мне кажется, что ваша проблема связана с коррелированным подзапросом, который не нужен для этого запроса в большинстве брендов SQL. Spark принимает функцию max как оконную функцию .

Можете ли вы сделать:

SELECT seq_no, 
       amount, 
       max(amount) OVER (ORDER BY seq_no ROWS BETWEEN UNBOUNDED PRECEDING and 1 PRECEDING) AS last_high_prem
FROM premium 

Примечание: вам, вероятно, также нужна фраза partition by, но не для того запроса, который вы задали.

...