안녕하세요? 오랜만에 밀버스 데이터 베이스에서 csv파일로 데이터를 추출하는 코드를 작성해보겠습니다.
필요한 모듈 설치
pip install pymilvus
Milvus와 연결 후 데이터를 CSV로 저장하는 코드입니다.
필요한 모듈 임포트
from pymilvus import ( Collection, connections )
import json
import csv
MilvusManager 선언
class MilvusManager:
def __init__(self):
self.dbname = "default"
self.connection_args = {
"uri": "주소", # Milvus 서버 주소와 포트
"db_name": self.dbname
}
self.collection_name = "test_sparse" # 데이터가 저장된 컬렉션 이름
연결(connect) 선언
def connect(self):
try:
connections.connect(
alias=self.dbname,
**self.connection_args
)
if connections.has_connection(self.dbname):
print("Milvus와 연결되었습니다.")
return True
else:
print("Milvus 연결 실패: 연결이 확인되지 않았습니다.")
return False
except Exception as e:
print(f"Milvus 연결 실패: {e}")
return False
export_data_to_csv 선언
def export_data_to_csv(self, output_file="milvus_data.csv"):
if not self.connect():
print("Milvus 연결 실패: 연결이 확인되지 않았습니다.")
return
try:
# 컬렉션 연결 및 데이터 조회
collection = Collection(name=self.collection_name, using=self.dbname)
# `pk` 필드를 제외한 나머지 필드로 데이터 조회
output_fields = ["text", "text_vector", "sparse_vector"]
query = collection.query(expr="", output_fields=output_fields, limit=10000)
# limit 값은 최대로 가져올 수를 지정합니다.
# CSV 파일로 저장
with open(output_file, mode='w', newline='') as file:
# 인코딩 에러가 발생할시 아래의 utf-8로 구동할것.
# with open(output_file, mode='w', newline='', encoding='utf-8', errors='replace') as file:
writer = csv.writer(file, escapechar='\\', quoting=csv.QUOTE_MINIMAL, quotechar='"') # 따옴표를 사용하여 필드를 감쌈
# CSV 헤더 작성 (필드 순서에 맞춰 작성)
writer.writerow(output_fields)
# 각 데이터 행을 CSV로 작성
for item in query:
# sparse_vector를 JSON 문자열로 변환
item['sparse_vector'] = json.dumps(item['sparse_vector']) # 딕셔너리를 JSON 문자열로 변환
row = [item[field] for field in output_fields]
writer.writerow(row)
print(f"데이터가 '{output_file}' 파일로 저장되었습니다.")
except Exception as e:
print(f"데이터 추출 중 오류 발생: {e}")
코드 실행
if __name__ == "__main__":
manager = MilvusManager()
manager.connect()
manager.export_data_to_csv("저장할 파일 경로")
# ex) /workspace/milvus_data.csv
주요 코드 설명
1. Milvus 연결: MilvusManager 클래스는 Milvus에 연결 및 데이터를 CSV로 추출 하는 기능을 제공합니다.
connect() 메소를 토앻 Milvus서버와 연결을 시도, 연결을 성공할시 True값을 반환합니다.
2. 컬렉션(Collection)과 데이터 조회(search): export_data_to_csv() 메소드는 Milvus에 연결된 후, 데이터를 조회는 합니다.
이때 output으로 지정한 text, text_vector, sparse_vector필드만 추출하며, 갯수 조정이 필요할시 limit값을 추가 설정하면 됩니다.
3. csv 파일 저자: 데이터를 CSV 파일로 저장할 때, sparse_vector필드는 JSON 문자열로 변환한 후 저장합니다.
이전에 그냥 저장했다가 데이터 삽입할때 값이 안들어가지는 오류가 발생하여 JSON 문자열로 변환하는 코드를 추가하였습니다.
인코딩 문제
- 만약 CSV 파일을 저장하는 도중 인코딩 에러가 발생할 시 UTF-8 인코딩을 지정하고, error='replace'옵션을 추가하여 인코딩 문제를 해결 할 수 있습니다.
원하시는 분은 주석해제 후 사용하시면 됩니다. - 데이터크기 : Milvus에서 추출하는 데이터가 매우 클 수 있으며, limit 값을 적절히 설정하시면 되겠습니다.
오늘은 Milvus 데이터를 csv파일로 추출 후 저장하는 코드를 작성해봤습니다.
데이터를 좀 더 확실하고 정확하게 판단하기 위해 csv 파일로 추출하는 방법도 필요하다고 판단하여
이렇게 코드를 작성했습니다.
위 코드와 과정을 사용하여 여러분들의 Milvus 데이터를 쉽게 CSV로 추출 및 변경해보세요!
'VectorDB' 카테고리의 다른 글
[VectorDB] Milvus-standalone tls 및 보안적용(attu 포함) (1) | 2024.10.24 |
---|---|
[VectorDB]Milvus와 하이브리드 서치을 활용한 고급 벡터 검색 구현하기 (1) | 2024.09.03 |
[VectorDB] Milvus와 BGE-M3 모델로 문서 임베딩 및 AI 질의응답 구현하기 (8) | 2024.09.02 |
[VectorDB] Milvus 연결 + 컬렉션 및 스키마 생성하기 (0) | 2024.08.26 |
[VectorDB] Milvus docker에 설치하기 (1) | 2024.08.22 |