Автор Тема: Запрос openSQL и AMDP(SAP HANA) дают разный результат, почему?  (Прочитано 9171 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн AshergiZer

  • Newbie
  • *
  • Сообщений: 20
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Доброго дня.

Собственно вопрос в заголовке, почему запрос данных через AMDP дает результат превышающий результат полученный через запрос, построенный на OpenSQL

OpenSQL
Код: You are not allowed to view links. Register or Login
SELECT rt~dct_pernr AS pernr, e~srtza as srtza,
    rt~lgart as lgart, SUM( CASE e~srtza
                          WHEN 'A' THEN ( rt~betrg )
                          WHEN 'P' THEN ( rt~betrg * -1 )
                   END ) AS betrg,
                                       v~waers AS amt_curr
    APPENDING CORRESPONDING FIELDS OF TABLE @rt_temp_union[]
              FROM p2rx_rt as rt INNER JOIN p2rx_versc as v
                            ON v~dct_pernr EQ rt~dct_pernr AND v~dct_seqnr EQ rt~dct_seqnr
                 INNER JOIN p2rx_eval_period as e
                            ON e~dct_pernr EQ rt~dct_pernr AND e~dct_seqnr EQ rt~dct_seqnr
                 INNER JOIN p2rx_wpbp_index as wi
                            ON wi~dct_pernr EQ rt~dct_pernr AND wi~dct_seqnr EQ rt~dct_seqnr AND wi~rt_apznr EQ rt~apznr
                 INNER JOIN p2rx_wpbp as w
                            ON w~dct_pernr EQ rt~dct_pernr AND w~dct_seqnr EQ rt~dct_seqnr AND w~apznr EQ wi~wpbp_apznr
    WHERE v~molga EQ @mv_molga AND
                e~srtza NE 'O' AND
                v~payty EQ '' AND " only regulars, active,
                w~stat2 EQ '3'
  GROUP BY rt~dct_pernr, rt~lgart, e~srtza,
    rt~betrg, v~waers.


AMDP
       
Код: You are not allowed to view links. Register or Login
et_rt = select rt.dct_pernr AS pernr, e.srtza as srtza,  rt.lgart as lgart,
                                                   sum( case e.srtza
                                                   when 'A' then ( rt.betrg )
                                                   when 'P' then ( rt.betrg * -1 )
                                                   end ) as betrg,
                                                       v.waers as amt_curr
        from p2rx_rt as rt
            INNER JOIN p2rx_versc as v on v.dct_pernr = rt.dct_pernr
                                      AND v.dct_seqnr = rt.dct_seqnr
        INNER JOIN p2rx_eval_period as e on e.dct_pernr = v.dct_pernr
                                        and e.dct_seqnr = v.dct_seqnr
        INNER JOIN p2rx_wpbp_index as wi on wi.dct_pernr = rt.dct_pernr
                                        and wi.dct_seqnr = rt.dct_seqnr
                                        and wi.rt_apznr = rt.apznr
        INNER JOIN p2rx_wpbp as w on w.dct_pernr = wi.dct_pernr
                                 and w.dct_seqnr = wi.dct_seqnr
                                 and w.apznr = wi.wpbp_apznr
        where v.molga = iv_molga
          and e.srtza <> 'O'
          and v.payty = ''
          and w.stat2 = '3'
        GROUP BY rt.dct_pernr, rt.lgart, rt.betrg, v.waers, e.srtza;


Итого результат 14519 записей OpenSQL против 15057 AMDP. Это для понимания порядка разности результатов.


Так вот, почему?


Так же сделаны:
CDS ракурс (DDL SQL)
и Attribute View

Обе объекта вызываются из ABAP - и дают результат равный тому что возвращает OpenSQL.


В чем проблема, где не прав?

Оффлайн sapworkdir

  • Newbie
  • *
  • Сообщений: 33
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
HANA не реляционная база данных и join, как и весь SQL для нее не имеют реального смысла, а как хитро эмулируются. От этой хитрости, скорее всего, и разница. В SPS09 SAP объявил новый дата сервис XSDS и для него пишется библиотека на JS которая будет возвращать прямо объекты в XMLe.
Regards
SapWorkDir

Оффлайн AshergiZer

  • Newbie
  • *
  • Сообщений: 20
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
У нас были аудиторы, и они как рекомендации, посоветовали попробовать переложить наши выборки на AMDP. Вот экспериментируем и результатом не удовлетворены.

Разве что выборки без больших джойном, идущие из разных таблиц, попробовать переложить на AMDP.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Немного не в тему, но меня всегда удивляют аудиторы, они дают часто советы, которые сами до этого нигде не проверяли, но начальство, оно почему-то с радостью им следует, ну и по  ходу остальных нагибает следованию советов, которые к реальной жизни никем еще небыли применены. Типа ну вы попробуете, а мы потом запишем, что у вас вышло :-)

You are not allowed to view links. Register or Login
У нас были аудиторы, и они как рекомендации, посоветовали попробовать переложить наши выборки на AMDP. Вот экспериментируем и результатом не удовлетворены.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
HANA не реляционная база данных и join, как и весь SQL для нее не имеют реального смысла, а как хитро эмулируются.
Да ладно, имеют они смысл, причем в такой же мере как и к текущим табличным вещам. Способ хранения это только один аспект этой СУБД,второй это сжатие и третий к развернутым в строки и сжатым данным применяется уже SQL логика обработки, так что в принципе не может там не быть SQL.

Оффлайн AshergiZer

  • Newbie
  • *
  • Сообщений: 20
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Так, я сам дурак.

Еще раз погрузившись в эту тему, вспомнил в OpenSQL запросе, mandt, без явного указания, подставляется автоматически текущий, а в AMDP требуется явное указание манданта при чтении данных запросом в SQLScript. Т.е. добавил передачу sy-mandt в метод класса и явно указал его в запросе.

Результаты сошлись. Все с теми же самыми JOIN и всем остальным, как было. Только добавилось указание mandt.

Так что, не знаю не знаю и не уверен на счет что JOIN там не совсем тот JOIN.

Пока результатами выборки я удовлетворен.
Но вот кроме скорости. Прироста скорости я не увидел вообще, скорее это можно будет увидеть на больших объемах, но у нас их пока нет.


Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Результаты сошлись. Все с теми же самыми JOIN и всем остальным, как было. Только добавилось указание mandt.
Да вроде мне на пальцах объясняли, там внутри все работает по правилам некоего SQL

Sapforum.Biz