파이썬과 엘라스틱서치 DB 연동
Page content
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
개요
NoSQL
데이터베이스 시스템의 하나인Elasticsearch
를 다루는 방법을 설명한다.NoSQL
은 데이터를 행들과 열들로 저장하지 않는 데이터베이스를 말한다.- 대개
JSON
문서 형태로 저장하고,SQL
이 아닌 절의 언어를 주로 사용한다.
설치
- 먼저 설치를 진행한다.
(venv) $ pip3 install elasticsearch
Collecting elasticsearch
Downloading elasticsearch-7.14.1-py2.py3-none-any.whl (363 kB)
|████████████████████████████████| 363 kB 5.7 MB/s
Requirement already satisfied: certifi in /Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages (from elasticsearch) (2021.5.30)
Requirement already satisfied: urllib3<2,>=1.21.1 in /Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages (from elasticsearch) (1.26.6)
Installing collected packages: elasticsearch
Successfully installed elasticsearch-7.14.1
- 설치 이후에는 현재 버전을 확인하기 위해 아래와 같이
.py
형태로 작성 후, 터미널에서 실행한다.
import elasticsearch
print(elasticsearch.__version__)
(venv) $ python3 step04_1_elasticsearch.py
(7, 14, 1)
- 버전까지 확인했다면, 파이썬에서
Elasticsearch
을 실행할 수 있다.
실습 1 - 데이터 삽입
- 데이터를
Elasticsearch
에 삽입하는 소스코드를 생성해본다.
import elasticsearch
from elasticsearch import Elasticsearch
from faker import Faker
fake = Faker()
print(elasticsearch.__version__)
es = Elasticsearch()
# 데이터 생성 및 삽입
doc={"name": fake.name(),"street": fake.street_address(), "city": fake.city(),"zip":fake.zipcode()}
res=es.index(index="users",doc_type="doc",body=doc)
print(res['result']) # created
- 위 파일을 실행하기에 앞서서,
Elasticsearch
과Kibana
가 먼저 구동이 되고 있으면 좋다. - 이제 실행하면 아래와 같은 결괏값이 나타날 것이다.
(venv) $ python3 step04_1_elasticsearch.py
(7, 14, 1)
/Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.html to enable security.
warnings.warn(message, category=ElasticsearchWarning)
/Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: [types removal] Specifying types in document index requests is deprecated, use the typeless endpoints instead (/{index}/_doc/{id}, /{index}/_doc, or /{index}/_create/{id}).
warnings.warn(message, category=ElasticsearchWarning)
created
실습 2 - 다수의 문서 삽입
- 각 데이터 하나를 생성 후, 입력하는 방식이 아닌, 대량의 문서를 모두 만든 후, 한번엔 데이터를 추가하는 이른바
bulk
를 진행하도록 한다. - 우선 전체적인 코드를 추가한다 (파일명:
step04_2_elasticsearch_bulk.py
).
from elasticsearch import Elasticsearch
from elasticsearch import helpers
from faker import Faker
fake=Faker()
es = Elasticsearch() #or pi {127.0.0.1}
actions = [
{
"_index": "users",
"_type": "doc",
"_source": {
"name": fake.name(),
"street": fake.street_address(),
"city": fake.city(),
"zip":fake.zipcode()}
}
for x in range(998) # or for i,r in df.iterrows()
]
response = helpers.bulk(es, actions)
print(response)
- 색인 이름과 형식을
"_index"
와"_type"
으로 지정해야 한다. "_source"
필드가NoSQL
에 추가할JSON
문서이다.- 반복문은 해당 문서를 999(색인이 0부터 998까지 반복)개의 데이터를 만든다는 뜻이다.
- 마지막으로
bulk
를 실행하면 삽입이 진행된다.
(venv) $ python3 step04_2_elasticsearch_bulk.py
/Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.html to enable security.
warnings.warn(message, category=ElasticsearchWarning)
/Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: [types removal] Specifying types in bulk requests is deprecated.
warnings.warn(message, category=ElasticsearchWarning)
(998, [])
실습 3 - 키바나 확인
- 쿼리는 정상적으로 작동이 되었다. 실제 데이터가 잘 들어갔는지 확인하도록 한다. 이 때, 반드시
Elasticsearch
과Kibana
가 먼저 구동이 되고 있어야 한다. - 아래 그림과 같이 왼쪽 상단 햄버거 메뉴 - 하단
Management
섹션의Stack Management
를 클릭한다.
- 이번에는
Index Patterns
를 선택 한다.
Create index pattern
버튼 화면을 클릭한다.
- 색인 이름란에 아래와 같이
users
입력 후,Next Step
버튼을 클릭한다. 그리고 다음 화면에서Create index Pattern
을 또 클릭한다.
- 아래와 같이 정상적으로 색인 패턴이 나타는 것을 확인할 수 있다.
- 그 후에, 다시 햄버거 메뉴를 클릭 후,
Analytics
-Discover
를 클릭 후,users
색인을 클릭하면 아래와 같이 정상적으로 데이터가 들어간 것을 확인할 수 있을 것이다.
References
- Data Engineering with Python by Paul Crickard, https://www.packtpub.com/product/data-engineering-with-python/9781839214189