database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10453 게시물 읽기
No. 10453
분단위 시계열 데이터의 empty 값 처리
작성자
전성용(sdf4268)
작성일
2023-12-08 14:12
조회수
917

안녕하세요.

추운 겨울에 다들 따듯한 하루가 되셨으면 좋겠습니다.


한가지 궁금한점이 있어서 글을 남깁니다.


실시간 측정을 통한 데이터 수집중입니다.

데이터베이스에 시간, 값을 포함한 데이터가 다음과 같이 저장되어 있습니다.


Table. REALTIME_DATA

Column name  >> SAVE_DATE                         | VALUE 1    | VALUE 2 | ....

Data Format    >> DATE(yyyy-MM-dd hh:mm:ss) |  NUMERIC | NUMERIC| ...


이걸 분단위 시계열 데이터로 변환하여 처리하려고 Group by를 사용한 VIEW를 만들어서 사용합니다.

View. REALTIME_DATA_VIEW

Column name  >> SAVE_DATE                      | AVG(Value 1) | AVG(VALUE 2) | ....

Data Format    >> String(yyyy-MM-dd hh:mm) |  NUMERIC    | NUMERIC ...


그럼, VIEW를 SELECT했을 때 아래와 같은 예시 데이터가 나옵니다.


2023-12-08 14:05, 0.01, 0.02, 0.03, ....

2023-12-08 14:06, 0.01, 0.02, 0.03, ....

2023-12-08 14:07, 0.01, 0.02, 0.03, ....

2023-12-08 14:08, 0.01, 0.02, 0.03, ....

2023-12-08 14:10, 0.01, 0.02, 0.03, ....


여기서 질문이 있습니다.

노랗게 마킹된 시간을 보면 14시 09분 데이터가 없습니다. 

실제로 그 땐 통신 이상으로 데이터가 안들어왔거든요.

그래서 해당 부분을 아래와 같이 처리하고 싶습니다.


2023-12-08 14:07, 0.01, 0.02, 0.03, ....

2023-12-08 14:08, 0.01, 0.02, 0.03, ....

2023-12-08 14:09, ,,,,

2023-12-08 14:10, 0.01, 0.02, 0.03, ....

2023-12-08 14:11, 0.01, 0.02, 0.03, ....


빈 시간을 찾아서 NULL값을 넣어주는 식으로요.


저는 결국 이 답을 DB에서는 찾지 못하고 프로그래밍으로 처리했습니다.

제 DB에 대한 지식이 많이 모자라서 혹시나 이 문제를 DB단에서 처리할 수 있는 QUERY나 혹은 다른 방법이 있을까 싶어

지식을 구하고자 합니다.


항상 무탈하고 행복하세요!

감사합니다.


전성용 드림.

이 글에 대한 댓글이 총 2건 있습니다.

이런 문제는 일반적으로는

generate_series(시작시각, 끝시각, 간격) 이 함수를 사용해서 만들어지는 이빠지지 않은 인라인뷰 집합과 자료 집합의 outer join으로 풉니다.


문제는 realtime_data.save_date 자료형이 timestamp 형이라면, outer join, group by에서 성능을 최적화 할 수 있도록 function 기반 인덱스를 만들어야 할 것 같네요.


시계열 자료 처리는 위에서 언급한 것 말고도 생각보다 복잡합니다.

그래서 시계열 전용 데이터베이스를 씁니다. 그런 골치 아픈 부분을 깔끔하게 단순한 쿼리로 사용할 수 있거든요.


PostgreSQL에서는 timescaledb 확장 모듈이 있습니다.

이거 설치하면 시계열 자료 처리하는데 좀 더 편해집니다.

 

김상기(ioseph)님이 2023-12-08 15:06에 작성한 댓글입니다.

ㄴ김상기

역시 제가 모르는 부분이었어요.

답변 감사드립니다.

timescaledb 확장 모듈을 찾아 더 공부해보겠습니다.

정말 진심으로 감사드립니다.

공부해보고 또 놀러올게요.


행복한 하루 되세요! ^^

전성용(sdf4268)님이 2023-12-08 15:15에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10457테이블 rename 관련 질문합니다 [1]
소라77
2024-01-26
362
10456(제발) ora2pg 사용 데이터 이관시 궁금증 [3]
chaney
2024-01-05
716
10454CS 프로그램에서 가상테이블을 만들수있나요? [5]
이기자
2023-12-24
843
10453분단위 시계열 데이터의 empty 값 처리 [2]
전성용
2023-12-08
917
10452DB 계정 잠금 설정 질문입니다 [3]
소라77
2023-12-08
1038
10449인덱스걸면 제일빠른 데이타 타입 순서가 어떻게되나요? [3]
이기자
2023-11-28
973
10447create extension oracle_fdw; undefined symbol 관련 에러 [8]
chaney
2023-11-03
1337
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다