시계열 데이터 일정 간격 집계

 

엘라스틱서치 시계열데이터 날짜별, 시간별 등 기준 일정 간격으로 집계하는법을 알아봅시다.


달력기준 일정 간격 집계

GET [인덱스]/_search
{
    "query": {
        "match_all": {}
	},
	"size": 0,
	"aggs": {
		"my_buckets": {
			"date_histogram": {
				"field": "timetmp",
				"calendar_interval": "month",
				"format": "yyyy-MM"         
			}
		}
	}
}

 

my_buckets: 버켓 이름

field: 간격을 측정할 필드

format: 날짜 포맷

calendar_interval: 달력 간격

minute, 1m
hour, 1h
day, 1d
week, 1w
month, 1M
quarter, 1q 분기
year, 1y

 


시간기준 일정 간격 집계

GET [인덱스]/_search
{
    "query": {
        "match_all": {}
	},
	"size": 0,
	"aggs": {
		"my_buckets": {
			"date_histogram": {
				"field": "timetmp",
				"fixed_interval": "1h",
				"format": "yyyy-MM-dd/hh:mm:ss"
			}
		}
	}
}

 

my_buckets: 버켓 이름

field: 간격을 측정할 필드

format: 날짜 포맷

fixed_interval : 시간 간격

ms 밀리초
s
m
h
d

일정 간격 데이터 통계

GET [인덱스]/_search
{
    "query": {
        "match_all": {}
	},
	"size": 0,
	"aggs": {
		"my_buckets": {
			"date_histogram": {
				"field": "timetmp",
				"fixed_interval": "1h",
				"format": "yyyy-MM-dd/hh:mm:ss"         
			},
			"aggs":{
				"data_sum":{
					"sum" : { "field": "egg" }
				}
			}
		}
	}
}

 

각각의 date_histogram 데이터를 통계내고 싶으면 위와 같이 aggs 를 이용하여  통계낼수 있습니다.

 


기타

GET [인덱스]/_search
{
    "query": {
        "match_all": {}
	},
	"size": 0,
	"aggs": {
		"my_buckets": {
			"date_histogram": {
				"field": "timetmp",
				"fixed_interval": "6h",
				"extended_bounds": {
					"min": "2024-03-26T00:00:00"
					"max": "2024-03-26T23:59:59"
				}
			}
		}
	}
}

 

extended_bounds 를 이용하여 histogram 범위를 확장하면 중간에 Null값으로 인해 표시되지 않는 데이터도 표시할 수 있습니다.

 

extended_bounds 적용 전 데이터

"buckets":
[
    {
        "key_as_string": "2024-03-26T00:00:00.000Z",
        "key": 1711411200000,
        "doc_count": 4245
    },
    {
        "key_as_string": "2024-03-26T12:00:00.000Z",
        "key": 1711454400000,
        "doc_count": 1862
    }
]

 

extended_bounds 적용 후 데이터

"buckets":
[
    {
        "key_as_string": "2024-03-26T00:00:00.000Z",
        "key": 1711411200000,
        "doc_count": 4245
    },
    {
        "key_as_string": "2024-03-26T06:00:00.000Z",
        "key": 1711432800000,
        "doc_count": 0
    },
    {
        "key_as_string": "2024-03-26T12:00:00.000Z",
        "key": 1711454400000,
        "doc_count": 1862
    },
    {
        "key_as_string": "2024-03-26T18:00:00.000Z",
        "key": 1711476000000,
        "doc_count": 0
    }
]

마무리

 

잘못된 점이 있거나 궁금한 점이 있다면 언제든지 문의해주시기 바랍니다!

 

 

728x90
반응형

'프로그래밍 > Elasticsearch' 카테고리의 다른 글

[Elasticsearch] 엘라스틱서치 명령어 모음  (0) 2024.02.23

+ Recent posts