본문 바로가기
공부/기록

Elasticsearch reindex 시 timestamp에 시간 더하는 쿼리

by 촌쥐 2023. 5. 3.

Elasticsearch 에서 data stream에서 다른 data stream으로 데이터를 옮기면서 타임스탬프 값을 증가 해야할 일이 있었습니다. (정확하게는 하나의 data stream에 속하는 index에서 다른 data stream에 속한 index로 옮기는 작업이 였습니다.)

POST _reindex
{
  "source": {
    "index": "src-index-name",
    "query": {
      "range": {
        "@timestamp": {
          "lt": "2023-04-10"
        }
      }
    }
  },
  "dest": {
    "index": "dest-index-name",
    "op_type": "create"
  },
  "script": {
    "lang": "painless",
    "source": 
    """
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
    ctx._source['@timestamp'] = LocalDateTime.parse(ctx._source['@timestamp'], dtf).plusHours(9).format(dtf);

    """
  }
}


painless script가 jvm 기반이라 자바랑 비슷해서 이해하기는 어렵지 않은데 뭔가 .. 

추가로 source의 src-index-name은 data stream도 사용가능 합니다. 


확인이 필요한 점

- 해당 방법으로 reindex 할 경우 자동 rollover가 안되는 것으로 알고 있는데 해당 지식이 맞는 지 테스트가 필요합니다. rollover가 안될 경우 하나의 인덱스에 설정한 ilm 에 보다 많은 양의 데이터가 들어갈 수 있기 때문에 쿼리의 속도가 늦어질 수 있음

 

댓글