2009-12-14 2 views
1

PHP 5.2를 사용하여 여러 파이프로 구분 된 파일을 mysql 데이터베이스로 가져 오려고합니다. 다양한 형식의 파이프 된 데이터를 가져오고 있으며 최종 목표는 다른 데이터를 적절하게 표준화 된 데이터 구조에 넣으려고 시도하지만 데이터를 올바르게 처리하기 위해 데이터에 대한 후 처리가 필요합니다.php/mysql을 사용하여 버퍼 테이블을 기반으로 다양한 파이프로 구분 된 파일을 db로 가져 오는 방법을 제안 했습니까?

이 작업을 수행하는 가장 좋은 방법은 버퍼라는 테이블을 가져 와서 데이터를 매핑 한 다음 다양한 테이블로 가져 오는 것입니다. 각 테이블의 열을 나타내는 필드가있는 "버퍼"라는 테이블을 만들려고합니다. 최대 80 개의 열이 있습니다. 그런 다음 데이터 변환/매핑을 적용하여 올바른 테이블로 가져옵니다.

일반적으로 파이프 테이블을 파이프 테이블로 읽어들이는 기본 클래스를 만든 다음 SQL 마법을 수행 할 준비가 된 다양한 명령문을 포함하는 함수를 사용하여이 클래스를 확장하여 유연성을 고려하여이 클래스를 확장합니다. 형식은 첫 번째 행의 헤더를 읽고 하나의 형식으로 변경하여 동일합니다.

내 질문은 :

  1. 뭐죠 테이블에 저장된 로컬 파일에서 데이터를 읽는 단계 중 하나를 수행하는 가장 좋은 방법은? 만약 내가 (Best Practice : Import CSV to MYSQL Database using PHP 5.x에 제안 된) mysql의로드 데이터를 사용하거나 그냥 fopen 다음 라인에 의해 데이터를 삽입해야합니다 너무 확실하지 않아요.

  2. 이 방법이 최선입니까? 다른 사람들은 어떻게 이것을 접근합니까?

  3. zen 프레임 워크에 도움이 될만한 것이 있습니까?

추가 : 예정된 작업에서이 작업을 수행 할 계획입니다.

답변

2

IMO를 수행하는 데 PHP 코드가 필요하지 않습니다. 수업 시간을 낭비하지 마십시오. MySQL LOAD DATA INFILE 절을 사용하면 필요한 95 %의 데이터를 가져올 수 있습니다. 구분 기호가 무엇이든간에 건너 뛰거나 선택할 항목. 설명서를주의 깊게 읽으십시오. 당신이 할 수있는 일을 알고 있으면 가치가 있습니다. 데이터를 가져온 후에는 쿼리를 올바르게 작성하면 이미 좋은 모양이 될 수 있습니다. 버퍼 테이블은 임시 테이블 일 수 있습니다. 그런 다음이를 정규화하거나 역 정규화하여 초기 테이블을 삭제하십시오. 실수가있을 경우 스크립트를 파일로 저장하여 스크립트 시퀀스를 재생성하십시오.

가장 좋은 방법은 SQL 스크립트를 작성하고 데이터가 올바른 모양인지 테스트하고 실수를 찾고 수정 한 다음 스크립트를 다시 실행하는 것입니다. 많은 양의 데이터가있는 경우 작은 행 집합에 대해 테스트를 수행하십시오.

[추가] sql-mostly 접근법의 또 다른 이유는 SQL에 익숙하지 않고 데이터베이스로 작업하는 경우 이전에 SQL을 배우는 것이 더 좋습니다. 나중에 많은 용도로 사용할 수 있으며 표면적으로 알고있는 프로그래머의 일반적인 함정을 피할 수 있습니다.

0

수십 가지 방법이 있습니다. MySQL 인스턴스에 대한 로컬 파일 시스템 액세스 권한이 있다면 LOAD DATA를로드하십시오. 그렇지 않으면 PHP를 통해 MySQL에 주기적으로 제출하기 위해 각 행을 SQL (또는 VALUES 행)로 쉽게 변환 할 수 있습니다.

1

저는 개인적으로 무료 ETL software Kettle by Pentaho을 사용합니다 (이 소프트웨어 비트는 일반적으로 케틀이라고합니다).이 소프트웨어는 완벽하지는 않지만 특정 파일에 대한 스크립트를 작성하는 데 소요되는 시간보다 훨씬 짧은 시간에 데이터를 가져올 수 있다는 사실을 발견했습니다. 텍스트 파일 입력을 선택하고 구분 기호, 고정 폭 등을 지정한 다음 SQL 서버로 직접 내보낼 수 있습니다 (이들은 MySql, SQLite, Oracle 등을 지원합니다).

관련 문제