반응형
파일 처리 패키지 구현하기

한대성

에이디컨설팅 책임 컨설턴트| SQLLeader.com 운영자

 
 

다음과 같은 질문에 대해 조금 길게 답변 형식으로 설명 드리겠습니다. 

1, USER가 자신의 PC의 특정 폴더에 특정 이름의 파일을 한 달에 한 두번 작성합니다. 일종의 매출작성표 같은거구요..

   이걸 DB에서 해당 user IP를 읽어와서 그 해당 엑셀파일을 1주일에 한번씩 DB Import시켜주는 기능이 가능 한지요~

 

2. 다른 PC의 유저파일을 DB 서버에 주기적으로 파일을 복사해서(덮어쓰기) 그 파일을 DB Import시켜주는 것도 가능한지요~

 

위의 둘다 목적은 패키지로 만들어 일정한 주기의 JOB을 걸어 특정 엑셀 데이터를 해당 테이블에 Insert시키는게 목적입니다.

 

이런 구현할수 있는지...만약 구현된다면 어떻게 하는것인지..이외에 또 다른 방법들이 있는지..

 

 

우선, 결론부터 말씀 드리자면.. 충분히 SSIS 패키지로 구현 가능한 부분입니다.

물론 SSIS 패키지 외에도 단순히 SQL 쿼리만을 가지고서 만들 수도 있을 것이고, 프로그램을 짜서 만들 수도 있을 것입니다.

 

질문 내용에 조금 범위를 넓혀 잠깐 잡설(^^) 조금 하겠습니다.

SSIS 패키지에 관해서 가끔 질문 받는 내용 중 일부는

『이러이러한 기능 됩니까? 이러이러한 기능을 하는 패키지 만들 수 있습니까?

와 같은 형태가 많습니다.

항상 대답은

      『네.. 100% 가능합니다..

입니다. 뭘 믿고 그렇게 100%라고 할 수있냐면..

SSIS에서 기본적으로 제공되는 여러 잡다한 작업 개체들로 구현해도 안 되는 경우에는 그냥 VB.NET 코드를 짜서 스크립트 작업에 넣어버리면 되겠지요. 그것도 귀찮으면 그냥 어플리케이션 형태로 만들어서 패키지에서 프로세스 실행 작업을 이용해서 해당 프로그램을 실행시켜 버리면 되겠지요. 어쨌든 그런 것도 SSIS 패키지라고 할 수 있기 때문에 패키지로 모두 구현 가능하다라는 당돌한(^^), 어떻게 보면 억지 형태인 대답을 드리는 것입니다.

그럼, 모냐면.. 말하고자 하는 것이.. 어떠한 작업을 할 때 어떤 방식이 가장 효율적이면서 간편하게, 우수한 성능으로, 관리 용이하게 구현할 수 있느냐가 문제입니다.

 

따라서 정확한 질문은

『이러이러한 작업을 SSIS로 구현했을 때 효과적일까요?

라는 것입니다.

(질문자님의 질문 방식에 대해 잘못되었다라고 말씀드릴 의도로 작성하는 것이 절대(!!) 아님을 이해 부탁 드립니다..^^ 설명을 쓰다 보니 뉘앙스가 꼭 그렇게 쓰여지는 것 같아서 죄송합니다^^)

 

 

. 그럼 이제 질문에 대해 SSIS 패키지로 구현할 때의 방법과 제약 사항 등에 대해 한 번 살펴보겠습니다.

 

(1) User가 자신의 PC의 특정 폴더에 특정 이름의 파일을 한 달에 한두 번 작성합니다.

- 한 번도 아니고, 한두 번.. ~

우선, User가 한 달 내에 특정 일, 특정 시까지 파일을 만든다는 보장은 못할 것 같습니다. 따라서 패키지는 매일 또는 1주일에 한 번 또는 불특정 주기로 User PC의 특정 폴더에 해당 파일이 있는지, 정확히 말해서 새로운 파일이 생겼는지를 확인하는 반복 작업을 수행해야 할 것 같습니다.

여기서 또한 조금 복잡해집니다. 새로운 파일이 생겼는지를 확인하기 위해서는 파일 목록을 저장하는 메타 테이블이 별도로 있어야 할 것 같습니다.

User의 특정 폴더의 파일 목록 리스트를 읽어와서 테이블 목록 메타 테이블과 비교해서 새로운 파일 명 정보를 메타 테이블에 저장해야 할 듯 합니다.

이와 관련된 비슷한 예제는 최근에 OLAPForum 세미나에서 발표했었던 예제 패키지의 앞 부분에 있습니다. 참고하시기 바랍니다.

http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=PDSSEMINAR&intSeq=884

 

여기서 사용자의 엑셀 파일은 항상 동일한 형태이어야 한다는 제약이 있어야 할 것 같습니다. SSIS 패키지는 입력 및 출력, 변환에 대한 열 정보를 동적으로 설정할 수는 없습니다. 어떤 경우에는 엑셀 파일에서 두 열만 읽어오고(두 행이 아니고 두 열), 어떤 경우에는 세 열을 읽어오는 등과 같은 형태는 어렵다는 것이지요. (억지로 하라면....또 해야겠지만..)

이렇게 하다 보면 책 한 권 나올 수도 있을 것 같기에, 항상 동일한 형태로 작성한다는 제약 규칙이 있다고 생각합시다.^^

 

(2) 이걸 DB에서 해당 user IP를 읽어와서..

- 이 부분은 (1) 작업 전에 미리 수행되어야 할 부분입니다. SQL 실행 작업을 이용하여 userIP정보를 읽어와서 SSIS 변수에 저장토록 하는 것이 가장 간단한 방법일 것 같습니다.

 

(3) 그 해당 엑셀파일을 1주일에 한번씩 DB Import시켜줍니다.

- 파일이 있는 경우에 Import 시키는 작업을 수행하기 때문에, (1)번 작업인 신규 파일 리스트 추가 작업을 하고, 파일 목록을 읽어오는 SQL 실행 작업을 수행하고 그 결과를 변수에 저장한 후, 변수에 값이 있을 때에만 Import 하도록 하는 작업을 구현하도록 설정해야 합니다. 이는 간단히 선행 제약 조건에서 조건 식을 이용하여 구현하면 될 것 같습니다.

(2)번 작업 외에는 모두 위에서 말한 예제와 비슷한 형태인 것 같습니다. 예제 패키지를 참고해 보시기 바랍니다.

Import는 데이터 흐름 작업을 이용하면 되겠지요..^^

 

(4) 다른 PC의 유저파일을 DB 서버에 주기적으로 파일을 복사해서(덮어쓰기) 그 파일을 DB Import시켜주는 것도 가능한지요.

- 파일 목록을 읽어오는 부분까지는 동일할 것 같습니다. 이 후에 DB 테이블에 직접 Import할 것인지, 파일을 복사(덮어쓰기) 하도록 한 후에 해당 파일을 Import하도록 하는 형태인지의 차이 이겠지요.

 

 

간단히 플로우를 그리면 다음과 같을 듯 합니다.

(절대 이게 정답은 아닙니다..^^ 하나의 방법일 수 있다라는 것을 꼭 알아주시길..)

 

 

 

 

반응형

+ Recent posts