postgresql 데이터 통합,여러 데이터 통합 1 개 작업

주 표 의 한 기록 에 대해 서 는 명세표 의 96 개 데이터 에 대응 하 며,각 데 이 터 는 15 분 간격 이 며,내 역 에는 96 개의 데이터 가 주 표 의 한 날짜 trade 에 대응 하지 않 습 니 다.date,그리고 각 내 역 에 필드 starttime,즉 내 역 중 96 개 데이터 중 첫 번 째 데이터 중 starttime 은 00:00,
제2 조 는 00:15,제3 조 는 00:30 으로 순차적으로 유추 하여 23:45 까지 명세 표 의 96 개 데 이 터 를 24 개 로 합 쳐 야 한다.즉,첫 번 째 데이터 에서 starttime 은 00:00,두 번 째 는 01:00,세 번 째 는 02:00 입 니 다.

sql:select max(de.bid_num) report_num,concat(to_char(to_timestamp(concat(ru.trade_date,' ',de.start_time), 'YYYY-MM-DD HH24:mi') :: TIMESTAMP WITHOUT TIME ZONE, 'HH24 '),':00') dd from quote_trade_rule ru LEFT JOIN quote_trade_rule_detail de on ru.trade_rule_id = de.trade_rule_id
WHERE
  1 = 1
AND ru.market_id ='a29c81ed-2baf-4c42-881a-f1e64a41e1b0'
AND to_char(ru.trade_date, 'YYYY-MM-DD') ='2018-10-17'
AND ru.rule_type ='2' GROUP BY dd ,trade_date ORDER BY dd,trade_date

10 개의 메 인 시트 데이터 에 대응 하 는 960 개의 내 역 데 이 터 를 다음 과 같은 24 개의 데이터 로 합 칩 니 다.

추가:Postgresql 에서 계획 을 실행 하 는 통합 연결
Merge Join
일반적으로 해시 연결 의 효 과 는 통합 연결 보다 좋 지만 원본 데이터 에 색인 이 있 거나 결과 가 정렬 되 어 있 으 면 정렬 통합 연결 을 실행 할 때 정렬 이 필요 하지 않 습 니 다.이때 연결 을 합 치 는 성능 은 해시 연결 보다 좋 습 니 다.
다음 예제 에 서 는 people 의 id 필드 와 dept 01 의 depto 필드 에 색인 이 있 고 색인 에서 스 캔 한 데이터 가 정렬 되 어 있 으 며 Merge Join 으로 바로 갈 수 있 습 니 다.

highgo=# explain select people.id from people,dept01 where people.id=dept01.deptno;
                      QUERY PLAN
-------------------------------------------------------------------------------------------------
 Merge Join (cost=0.86..64873.59 rows=1048576 width=4)
  Merge Cond: (people.id = dept01.deptno)
  -> Index Only Scan using people_pkey on people (cost=0.44..303935.44 rows=10000000 width=4)
  -> Index Only Scan using idx_deptno on dept01 (cost=0.42..51764.54 rows=1048576 width=2)
(4    )
dept 01 의 색인 을 삭제 하면 실행 계획 에서 dept 01 을 정렬 한 다음 Merge Join 으로 이동 하 는 것 을 발견 할 수 있 습 니 다.예 는 다음 과 같 습 니 다.

highgo=# explain select people.id from people,dept01 where people.id=dept01.deptno;
                      QUERY PLAN
-------------------------------------------------------------------------------------------------
 Merge Join (cost=136112.80..154464.29 rows=1048576 width=4)
  Merge Cond: (people.id = dept01.deptno)
  -> Index Only Scan using people_pkey on people (cost=0.44..303935.44 rows=10000000 width=4)
  -> Materialize (cost=136112.36..141355.24 rows=1048576 width=2)
     -> Sort (cost=136112.36..138733.80 rows=1048576 width=2)
        Sort Key: dept01.deptno
        -> Seq Scan on dept01 (cost=0.00..16918.76 rows=1048576 width=2)
(7    )
위의 실행 계획 에서'Sort Key:dept 01.deptno'를 볼 수 있 습 니 다.이것 이 바로 표 dept 01 의 id 필드 를 정렬 하 는 것 입 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기