SPARK SQL коррелированные скалярные подзапросы не работают с BETWEEN - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь запросить несколько таблиц. И мне нужно иметь подзапрос с BETWEEN в качестве оператора. Запрос работает нормально, так как я не использую «before» или «in» или «> =» и т. Д.

Я думаю, что проблема в том, что Spark SQL не может агрегировать, если у вас нет оператора равенства (=).

Если я уберу этот запрос «И c1.month МЕЖДУ ...», то также будет работать, если я также напишу И c1.month МЕЖДУ 1 И 3 (например)

Заранее спасибо за любую помощь

Вот код:

    SELECT (cr.volume  /
            (SELECT SUM(hours)
             FROM TempsuCalendar c1
             WHERE YEAR(cr.deliveryfromdate) = c1.year AND
                   c1.month BETWEEN MONTH(cr.deliveryfromdate) AND 
    MONTH(cr.deliverytodate) AND
                   c1.region  = cr.NewRegion AND
                   c1.loadtype = 'B'
            )
           ) as AVERAGEPOWER,
           T.MODIFIEDBY,
           T.MODIFICATIONDATE
    FROM TempenmTransactionmapping tm JOIN --DWH.EnmTransactionMapping TM
         TempsuTransactionmapping  sm      --DWH.SuTransactionMapping SM
         ON tm.id_sutransactionmapping = sm.id JOIN
         TempsuTransaction t               --DWH.SuTransaction T
         ON sm.id_transaction = t.id_transaction JOIN
         TempsuCalculationrow cr   --DWH.SuCalculationRow CR
         ON t.id_calculationrow = cr.id_calculationr

Сообщение об ошибке:

Error in SQL statement: AnalysisException: Correlated column is not allowed in a non-equality predicate:
Aggregate [sum(cast(hours#15695 as bigint)) AS sum(hours)#17948L]
+- Filter (((year(cast(outer(deliveryfromdate#15543) as date)) = year#15690) && ((month#15691 >= month(cast(outer(deliveryfromdate#15543) as date))) && (month#15691 <= month(cast(outer(deliverytodate#15544) as date))))) && ((region#15687 = outer(NewRegion#15829)) && (loadtype#15689 = B)))
   +- SubqueryAlias `c1`
      +- SubqueryAlias `tempsucalendar`
         +- Relation[REGION#15687,CALENDARDATE#15688,LOADTYPE#15689,YEAR#15690,MONTH#15691,WEEK#15692,DAYINMONTH#15693,WEEKDAY#15694,HOURS#15695,HOLIDAY#15696,HistoryDate#15697,ProcessingDate#15698,RankNo#15699] csv
;;
Distinct
+- Union... AND MORE

...