본문 바로가기

ETL Tools/Oracle Data Integrator

특정 directory를 scan 하여 pattern을 가진 확장자를 데이터 파일을 ODI Variable에 저장하라.



방법 : jython을 통해서 특정 directory를 스캔하여 원하는 파일이 있는경우에는 데이터베이스에 삽입하여 저장 한다.

(jython에서 odi변수로 직접적인 값 할당은 불가능하다고 얼핏 ref에서 본듯하다. 아니겠지. 그래서 방법을 찾아봤던게 file에 변수값을 저장하고 그파일을 모델로 생성하여 그파일에 있는 값을 odi변수가 select 하여 저장할 수 있도록 구현하려고 시도하였다.
file에서 select 하는 법 몰라서 실패 db에 넣었다가 빼오기로 했음.)


 우선 테이블을 생성하자.

create table odival(value varchar2(100));

import java.sql as sql
import java.lang as lang
driver, url, user, passwd = (
 '<%=odiRef.getOption("driver")%>',
 '<%=odiRef.getOption("url")%>',
 '<%=odiRef.getOption("userid")%>',
 '<%=odiRef.getOption("passwd")%>')
##### Register Driver
lang.Class.forName(driver) 
##### Create a Connection Object
myCon = sql.DriverManager.getConnection(url, user, passwd)

try:
 ##### Create a Statement
 myStmt = myCon.createStatement()
 ##### Run a Select Query and get a Result Set

 myStmt.executeUpdate("delete from odival")
#db에접속해서
 import os
 mydir = '<%=odiRef.getOption("_directory")%>'
 mylist = os.listdir(mydir)
 #mylist.sort()
 for dirOrFile in mylist:
  if os.path.isdir(mydir + os.sep + dirOrFile):
   print 'DIRECTORY: %s' % dirOrFile
  else:
   #if dirOrFile.endswith(".<%=odiRef.getOption("pattern")%>")
    returnValue  = dirOrFile
#스캔해서 변수에 저장하고
    break
 myStmt.executeUpdate("insert into odival values('"+returnValue+"')")
#넣고
finally:
 myCon.close()

다음에

package에서 다음 진행에
변수를 새로고침해주면 변수에 값이 들어가는것을 확인할 수있다.

select * from odival



더 좋은 방법이 있으면 .....