2009-11-19 2 views
0

종종 프로젝트를 진행할 때 데이터베이스 스키마를 보면서 새로운 스키마로 작업 할 수 있도록 데이터를 내 보내야합니다.한 데이터베이스 구성표에서 다른 데이터베이스 구성표로 데이터를 마이그레이션 할 때 유용한 정보가 있습니까?

많은 데이터가 저장된 데이터베이스가 상당히 어려웠습니다. 내가 의미하는 바는 필터링되지 않은 문자가 많이 저장되어 있다는 것입니다. 필자는이 정보를 필터링하고 멋진 새 UTF-8 CSV 파일을 작성하여 새 데이터베이스에 다시 가져 오는 맞춤 PHP 스크립트를 작성합니다.

이 문제를 해결하는 더 좋은 방법이 있는지 알고 싶습니다.

답변

0

Logstash으로 간주 할 수 있습니다.

logstash는 이벤트 및 로그를 관리하기위한 도구입니다. 로그를 수집하고 분석하여 나중에 사용할 수 있도록 저장할 수 있습니다 (예 : 검색 용)

Logstash는 파이프와 같은 모든 이벤트/로그를 작동합니다. 필터 | 산출. Logstash에는 다양한 소스/형식을 수용 할 수있는 많은 입력 플러그인이 있으며, 필터를 사용하여 소스 데이터를 구문 분석 한 다음 필요한 여러 출력/형식으로 출력 할 수 있습니다.

0

이 질문에 대한 답변은 없지만 데이터베이스를 신속하게 마이그레이션해야하고 기존 데이터베이스에서 (python orm) 모델을 자동 생성하는 도구 인 sqlautocode을 사용했습니다. sqlalchemy orm을 사용합니다. 도서관. 심지어 시작하기 위해 몇 가지 샘플 코드를 생성합니다 ... (아래 참조)

놀랍게도, 그것은 밖으로 작동했습니다. 전체 마이그레이션은 없지만 모든 테이블 (프로그래밍 방식으로)에 프로그래밍 방식으로 액세스하는 쉬운 방법입니다.

나는 그 프로젝트에서 그것을하지 않았지만, 물론 대상 DB에 대한 orm 계층을 자동 생성 할 수 있으며, 원하는 구조로 오른쪽 행을 전송하는 스크립트를 작성할 수 있습니다.

당신이 파이썬에 귀하의 DB 내용을 일단, 당신이, 실제 조잡함에 따라 일부 attepts를 취할 것입니다 경우에도 u'unicode '을 처리 할 수있을 것입니다 ...

예제 코드 :

# some example usage 
if __name__ == '__main__': 
db = create_engine(u'mysql://username:[email protected]/dbname') 
metadata.bind = db 

# fetch first 10 items from address_book 
s = customers.select().limit(10) 
rs = s.execute() 
for row in rs: 
    print row 
0

데이터를 이동할 때 ETL 도구를 사용하거나 적어도 ETL 사례를 따르는 것이 좋습니다. 이미 청소 중이라는 것을 고려하면 ECCD 경로 전체를 따라야합니다 - 추출, 청소, 준수, 전달. 자체 청소를 수행하는 경우 디버그 및 감사 목적으로 중간 csv 파일을 저장하는 것이 좋습니다.

1. Extract (as is, junk included) to file_1 
2. Clean file_1 --> file_2 
3. Conform file_2 --> file_3 
4. Deliver file_3 --> DB tables 

파일을 보관하고 스크립트 버전을 문서화하면 버그가 발생할 경우 다시 추적 할 수 있습니다.

ETL 도구 - Microsoft SSIS, Oracle Data Integrator, Pentaho Data Integrator와 같은 ETL 도구 - 다양한 데이터 원본에 연결하고 많은 변환 및 프로파일 링 작업을 제공합니다.

관련 문제