index join 에 대한 질문
안녕하세요. 지금 강의 초반을 듣고 있는데요.
질문 1. 회사에서 ELK stack 을 application log 모니터링 도구로 도입하려는 것이 아니라 사용자의 어떤 요구사항에 맞는 리포트로서 visualization 을 이용하려고 도입하려 합니다.
rough 하게 학습한 내용으로는 elasticSearch 에서는 index 간 join 해서 search 를 못하는 것으로 알고 있는데요.
kibana 를 이용하면 multi index 간의 join 이 가능할까요?
구체적인 요청사항을 예로 말씀드리면
가령 dogs 라는 index 가 있고, men 이라는 index 가 있다고 가정할 때, 어떤 개가 (dog) 어떤 사람 (man) 의 반려견인지, (서로 같은 key value 를 가지고 있다면) 주인이 있는 개 인지 아닌지.. 주인이 없는 개는 전체의 몇 %인지 등을 visualization 하고 싶습니다.
Answer 2
0
안녕하세요 junha.park님,
Elasticsearch에서는 밑에 AI가 얘기한 것처럼 기본적으로 index 간 join을 지원하지 않습니다.
Elasticsearch는 RDB처럼 join을 할 수 없기 때문에 데이터 중복을 감수하고 index를 설계하는 것이 일반적입니다. 이를 Document Denormalization이라고 합니다.
따라서 dogs와 men 데이터를 하나의 document로 저장하는 방법이 가장 효율적입니다.
{
"dog_name": "Buddy",
"owner_name": "John",
"owner_id": 123
}
이렇게 하면 하나의 index에서 바로 검색이 가능하므로 주인이 있는 개 vs 없는 개 비율을 쉽게 분석할 수 있습니다.
또한 밑에 말한 것처럼 Kibana에서 Vega(데이터 시각화 DSL) 또는 Lens를 사용하여 두 개의 index를 조합해서 분석할 수 있다고 하는데 제가 안해봐서 뭐라 말씀을 못 드리겠네요.
https://www.elastic.co/guide/en/kibana/current/vega.html 한번 보시면 도움이 될 것 같네요.
0
안녕하세요, 인프런 AI 인턴입니다. junha.park님.
Elasticsearch에서는 일반적인 관계형 데이터베이스처럼 직접적으로 인덱스 간 조인을 수행하는 기능을 제공하지 않습니다. 따라서 Multi-index 간의 직접적인 조인은 불가능합니다. 그러나 Kibana를 사용하여 다음과 같은 방법으로 요구 사항을 해결할 수 있습니다.
필드 병합을 통한 데이터 인덱싱:
- 데이터를 Elasticsearch에 인덱싱할 때, 연관된 데이터를 하나의 문서로 병합하여 저장하는 방법이 있습니다. 예를 들면,
dog인덱스에owner_id필드를 추가하고man인덱스에도 같은owner_id를 유지하여 양쪽의 데이터를 인덱싱합니다. 이를 통해 쿼리할 때 필드를 기준으로 서치를 진행할 수 있습니다.
- 데이터를 Elasticsearch에 인덱싱할 때, 연관된 데이터를 하나의 문서로 병합하여 저장하는 방법이 있습니다. 예를 들면,
Kibana의 Vega 플러그인 활용:
- Kibana의 Vega 플러그인을 이용하면 여러 인덱스 데이터를 시각화하면서 사용자 정의 스크립트를 통해 복잡한 로직을 구현할 수 있습니다. Vega는 복잡한 데이터 시각화를 지원해 주기 때문에, 커스터마이즈된 쿼리 결과를 기반으로 리포트를 생성할 수 있습니다.
- Kibana의 Vega 플러그인을 이용하면 여러 인덱스 데이터를 시각화하면서 사용자 정의 스크립트를 통해 복잡한 로직을 구현할 수 있습니다. Vega는 복잡한 데이터 시각화를 지원해 주기 때문에, 커스터마이즈된 쿼리 결과를 기반으로 리포트를 생성할 수 있습니다.
데이터 프로세싱 도구 사용:
- Logstash나 다른 데이터 처리 파이프라인 툴을 사용하여, 데이터를 전처리하고 관계를 맺은 상태로 Elasticsearch에 저장하는 방법도 고려할 수 있습니다. 데이터가 미리 조인된 상태로 저장되기 때문에 Kibana에서 추가적인 조인 없이 바로 시각화가 가능한 형태로 데이터를 가공할 수 있습니다.
- Logstash나 다른 데이터 처리 파이프라인 툴을 사용하여, 데이터를 전처리하고 관계를 맺은 상태로 Elasticsearch에 저장하는 방법도 고려할 수 있습니다. 데이터가 미리 조인된 상태로 저장되기 때문에 Kibana에서 추가적인 조인 없이 바로 시각화가 가능한 형태로 데이터를 가공할 수 있습니다.
관련 질문에 대한 추가적인 자료를 통해 더 많은 정보를 얻고자 하신다면 아래의 링크를 참조해 주세요:
- Elasticsearch에서 인덱스 간 데이터 처리 방법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
7~8강 Log Level 관련 상세 설명/명세가 필요할 경우 log.info/warn <-> 주석의 적절한 사용 방법에 대한 질문
1
46
1
멀티 필드 실무 질문드립니다.
0
43
1
페이지네이션 질문드립니다.
0
41
3
insert , upsert 질문드립니다.
0
46
2
마이크로미터는 별도 설정이 없어도 되나요?
0
65
1
logstash 파이프라인 설정
0
58
1
postgres 수업중 case 함수 스크립트 자료
0
50
1
discover> create data view 하는데 다른화면 나옵니다.
1
59
2
강의 pdf는 따로 제공안해주시는 건가요?
0
44
1
안녕하세요 질문 있습니다.
0
85
2
vs code 환경에서 실행방법
0
119
2
Replication 설정 후에도 node가 1개만 조회됩니다.
0
82
2
docker cp 명령 질문입니다.
1
90
1
동시성 관련되어 궁금증이 생겨 질문을 남깁니다
0
117
1
multi node로 띄우는 상황에서 궁금증이 생겨 질문을 남깁니다
0
193
4
윈도우에서 curl 인증문제
0
387
3
docker-compose로 실행 시 es01이 중지됩니다.
0
242
2
setup-1 이 실행되었다가 꺼지는 현상
0
172
2
update 질문드립니다.
0
101
2
term query를 "text" 타입 필드에 사용하면 이점이 없어질까요?
0
153
2
소스 코드의 변경이 없게 하기 위해서는...
0
132
2
롤오버된 인덱스의 경우 리인덱싱을 어떻게 하면 되나요?
0
165
1
Dynamic Template
1
176
3
질문 하나 드립니다.
0
151
2

