source

Oracle 대 Maria의 분석 기능DB

factcode 2023. 8. 12. 10:47
반응형

Oracle 대 Maria의 분석 기능DB

현재 내 오라클 쿼리를 MariaDB 10.4로 마이그레이션하는 중

저는 분석 기능에 어려움을 겪고 있습니다.

MARIADB 코드:

select cgi, timestamp, hour, rat_type, dl_tput,
       ntile(24) over (partition by timestamp,rat_type order by dl_tput) as dl_tput_ntiled
from (select cgi, date(timestamp) as timestamp, 
             date_format(timestamp,'%H') as hour, rat_type, avg(avg_mean_down) as dl_tput
      from JUST_TEST_A
      where avg_mean_down is not null
      group by cgi, date(timestamp),date_format(timestamp,'%H'),rat_type
     ) x ;

이 코드는 정상적으로 작동하지만 Oracle 출력의 유효성을 검사한 결과 MariaDB의 결과와 다릅니다(동일한 데이터).

내 오라클 스크립트에는 mariadb에서 제거한 스크립트가 있습니다.

select cgi, timestamp, hour, rat_type, dl_tput,
       ntile(24) over (partition by timestamp,rat_type order by dl_tput) as dl_tput_ntiled,
       count(*) over () as dl_tput_cnt
from (...)

한다count(*) over ()출력에 영향을 미칩니까?이 분석 기능의 MariaDB에 대한 대체 쿼리는 무엇입니까?

이 데모에서는 다음과 같이 설명합니다.

https://dbfiddle.uk/ ?rdbms=message_11.2&message=be74a9fa9059d6b80a8cb10d102355d4

몇 가지 데이터를 입력하고 쿼리가 있는 작은 예를 찾을 수 있습니다.

select pk
       , a
       , b
       , ntile(24) over (partition by a, b  order by pk)
       , count(*) over () as dl_tput_cnt
from t1; 

왼쪽 상단 모서리에는 선택할 수 있는 다양한 데이터베이스 목록이 있습니다.이 예에서 Oracle을 선택하거나 Maria DB를 선택한 경우 결과는 동일합니다.이는 다음과 같은 보장이 아닙니다.count그리고.ntile귀하의 다양한 결과에 대한 책임은 없지만 이 결과에 대해 자세히 알려 주십시오.

그러나 출력을 검증한 결과 Oracle의 결과가 MariaDB의 결과와 다릅니다(동일한 데이터).

아마도 이것이 당신의 경우에 더 도움이 될 것입니다.

한가지 더요.

이 쿼리에 대해 Maria DB에서 얻은 결과를 확인해야 한다고 생각합니다.

SELECT date(timestamp) FROM JUST_TEST_A


SELECT date_format(timestamp,'%H') FROM JUST_TEST_A

또한 date 및 date_format에 대한 오라클의 동등한 함수에 대해 오라클에서 받은 이전 결과와 비교합니다.

저는 이것이 넥타이의 문제라고 생각합니다.ntile()에서는 각 버킷의 크기가 동일해야 하므로 그룹이 동일한 행을 서로 다른 버킷에 걸쳐 분할합니다.

극단적인 예로, 만약 모든 값이dl_tput동일한 값이면 1부터 24까지의 모든 값을 할당할 수 있습니다.

언급URL : https://stackoverflow.com/questions/59774820/analytical-function-of-oracle-vs-mariadb

반응형