Skip to content

index에 저장된 데이터를 csv로 export 가능한지? #20

@higee

Description

@higee


x-pack

  • 동영상처럼 사용
  • file size는 Management - Advanced Settings - xpack.reporting.csv.maxSizeBytes에서 변경 가능
  • 단, 설명에 나와 있듯이 너무 크게 해버리면 elasticsearch cluster의 성능과 스토리지에 영향을 줌

oss

1. logstash 이용

  • logstash는 elasticsearch와 같은 버전 사용
  • logstash Home Directory 이동
  • logstash-output-csv plugin 설치 : $ bin/logstash-plugin install logstash-output-csv
  • logstash conf 작성
    • 예시)
input {
  elasticsearch {
    hosts => "localhost:9200" # 실제 데이터가 들어있는 host로 변경 필요
    index => "shopping"       # csv로 추출하려는 데이터가 담긴 index
    query => '{               # 선택한 index에서 어떤 데이터를 추출할 건지 query DSL 작성
      "query" : {
        "match_all" : {
        }
      }
    }'
  }
}

output {
  csv {
    fields => ["주문시간", "물건좌표"]  # csv 파일에 필요한 field 입력
    path => "/home/ec2-user/shopping-logstash.csv" # 파일이 저장될 경로 입력
  }
}
  • 파일 확인 : /home/ec2-user/shopping-logstash.csv 에서 가능
  • 단, 한 번에 출력 가능한 documents 개수 : 10,000개

2. (python) client 이용

  • elasticsearch와 같은 버전 설치 권장 (필수아님) : $ pip install elasticsearch==6.2.0
  • 데이터 읽어서 저장하는 코드 작성
import csv
from elasticsearch import Elasticsearch

es = Elasticsearch(hosts=["localhost:9200"])
data = es.search(
         index="shopping",
         size=10000,
         body={
           "query" : {
             "match_all" : {
             }
           }
         }
       )

csv_columns = ['상품가격', '상품분류', '예약여부', '구매사이트', '수령시간', \ 
               '물건좌표', '주문시간', '결제카드', '고객ip', '판매자평점', '배송메모', \ 
               '고객주소_시도', '상품개수', '접수번호', '고객나이', '고객성별'
]
csv_file = '/home/ec2-user/shopping-python.csv'

with open(csv_file, 'w') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
    writer.writeheader()
    for document in [x['_source'] for x in data['hits']['hits']]:
        writer.writerow(document)
  • 파일 확인 : /home/ec2-user/shopping-python.csv 에서 가능
  • 단, 한 번에 출력 가능한 documents 개수는 10,000개이며 그 이상은 Scroll 통해 구현

3. Kibana Data Table 이용

screen shot 2018-06-24 at 10 17 36 am

  • Data Table Visualization을 이용해 원하는 형태로 테이블 생성
  • 하단의 Export 옆에 Raw 또는 Formatted 중 선택해서 출력
  • 이 방법으로는 한 번에 전체 Documents 출력 가능
  • 단, elasticsearch cluster에 가해지는 부하는 감안해야 함

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions