성장 시장 지역에서 정리하는 공급업체 또는 솔루션 제공업체가 가장 처음 직면하는 도전과제는
방언과 사용 가능 데이터의 언어학적 불일치이다. 수행해야 하는 첫 단계는 데이터 정리 활동으로
진행하기 전에 데이터에서 일관성을 가져오기 위한 음역(transliteration)이다. 정리 솔루션에 수반된 데이터는
대개 대용량이므로, 이러한 연습은 일반적으로 데이터 웨어하우스 프로젝트 도중에 착수되며,
ETL 조작 동안 잘 사용된다. IBM DataStage는 다양한 Java™ 스테이지와
tr4j 라이브러리를 제공하여 Java 프로그램을 ETL 작업과
개발하고 통합하는 면에서 지원한다. tr4j 라이브러리는 DataStage
설치 프로그램과 함께 번들로 제공된다.
ICU4J(International Components for Unicode)
라이브러리는 Java용 오픈 소스 라이브러리이며, 국제화 및 유니코드 지원을 제공하기 위해 다양한
소프트웨어 공급업체들이 널리 사용한다.
이 기사는 icu4j 및
tr4j 라이브러리를 사용하여 음역 Java 프로그램을 개발하고
이를 DataStage의 Java 변환기 스테이지와 통합하는 단계를 보여준다.
이 기사에 있는 지시사항을 수행하기 위해 다음과 같은 소프트웨어가 필요하다.
- InfoSphere DataStage 및 Information Services Director(ISD) 8.5
- ICU4J(링크는 참고자료 섹션 참조)
게다가, DataStage 설계자로부터 설계하여 실행 중인 ETL 작업 관련 기본 레벨 기술과 Java 프로그래밍 관련 중급 레벨 기술도 필요할 것이다. 입력 파일은 UTF-8 또는 UTF-16 형식으로 인코딩되어야 한다.
Java 변환기 스테이지를 사용하여 ETL 작업 설계하기
첫 단계는 ETL 작업을 설계하는 것이며, 이는 소스 파일로부터 입력을 읽고 변환을 수행하는 Java 변환기 스테이지가 있다. 대상은 파일, 데이터베이스 또는 기타 처리 단계가 될 수 있다.
다음 단계를 수행하여 작업을 설계한다.
- DataStage 설계자에서 새로운 병렬 작업을 작성한다.
- 팔레트에서 필수 작업 스테이지를 선택한다. 예를 들어, 소스 및 대상으로서 순차 파일 및 Java 변환기 스테이지이다.
- 입력 파일 스테이지의 경우 소스 파일의 메타데이터와 위치를 구성한다.
Stage 탭에서 파일 스테이지를 두 번 클릭하고
NLS map을 선택한다. 여기에서 입력 파일의 인코딩 유형도 선택해야 한다. 이 예제의 경우
그림 1과 같이 UTF-8을 선택한다.
그림 1. 입력 파일의 인코딩 유형 지정하기
- 출력 파일 스테이지에 이러한 단계를 반복한다. 마지막에 작업은 그림 2와 같이 되어야 한다.
그림 2. 음역 ETL 작업 설계
ICU4J 및 tr4j 라이브러리를 사용하여 음역을 수행하는 Java 프로그램
Icu4j는 지역화 지원을 제공하는 클래스 세트를
제공한다. 음역 기능을 제공하는 기본 클래스는
Transliterator와 Normalizer이다. 이러한 클래스에 대한 자세한 정보는 아래를
참조한다.
- Transliterator: 이 클래스는 하나의 언어 스크립트에서 다른 언어 스크립트로 문자열을
변환할 수 있는 transliterate() 함수를 제공한다. transliterate 함수는 stateless이며
이전 호출로부터 정보를 보유하지 않는다. transliterate() 함수를 사용하기 전에
대시(-)로 구별되는 필요한 소스 언어와 대상 언어를 이에 제공하여 Transliterator 인스턴스를
초기화해야 한다. 예제:
Transliterator.getInstance("Hindi-Latin"); - Normalizer: 이 클래스는 함수를 제공하여 음역 함수의 출력을 작성되거나 작성 해제된 형식으로 정규화한다. 예를 들어, A-acute와 같은 라틴 문자는 작성된 형식에서 하나로(A) 정규화되거나 작성 해제된 형식에서 두 배로(AA) 정규화된다.
DataStage의 Java 스테이지에 임베드된 Java 프로그램의 경우, 목록 1에 지정된 형식이 되어야 한다. 프로세스 함수는 Java 스테이지로 수행되는 모든 처리 논리가 들어있어야 한다.
리스트 1. Java 변환기 스테이지 내에 임베드되는 Java 프로그램의 형식
public class <classname> extends Stage{
public void initialize() {
trace("TableSource.initialize");
}
public void terminate() {
trace("TableSource.terminate");
}
public int process() {
.....
}
}
|
목록 2는 icu4j and tr4j
라이브러리를 사용하여 음역을 수행하기 위한 샘플 프로그램을 보여준다. 이 샘플 코드는
어느 언어로 된 입력이나 라틴어 알파벳으로 음역되어 정규화되는 것을 보여준다. 입력 행은
UTF-8 형식으로 읽는다.
리스트 2. 프로세스 함수 내에서 쓰여진 실제 음역 연산
public String toBaseCharacters(final String sText) {
if (sText == null || sText.length() == 0)
return sText;
final char[] chars = sText.toCharArray();
final int iSize = chars.length;
final StringBuilder sb = new StringBuilder(iSize);
for (int i = 0; i < iSize; i++) {
String sLetter = new String(new char[] { chars[i] });
sLetter = Normalizer.normalize(sLetter, Normalizer.NFKD);
try {
byte[] bLetter = sLetter.getBytes("UTF-8");
sb.append((char) bLetter[0]);
} catch (UnsupportedEncodingException e) {
}
}
return sb.toString();
}
public int process() {
try {
// do {
Transliterator t=Transliterator.getInstance("Any-Latin");
Row inputRow = readRow();
if (inputRow == null) {
return OUTPUT_STATUS_END_OF_DATA;
}
boolean reject = false;
int columnCount = inputRow.getColumnCount();
Row outputRow = createOutputRow();
for (int columnNumber = 0; columnNumber < columnCount; columnNumber++)
{
String value = inputRow.getValueAsString(columnNumber,"UTF-8");
if ((value == null) || (value.indexOf('*') >= 0)) {
reject = true;
outputRow.setValueAsString(columnNumber, value);
} else {
outputRow.setValueAsString(
columnNumber,toBaseCharacters(
t.transliterate(value)));
}
}
if (reject) {
rejectRow(outputRow);
} else {
writeRow(outputRow);
}
......
|
ETL 작업의 Java 변환기 스테이지와 Java 프로그램 통합하기
Java 변환기 스테이지의 특성 페이지에서 표 1에 표시된 세부사항을 제공한다.
표 1. 설정되는 Java 변환기 스테이지의 다양한 특성
| 특성 이름 | 삽입되는 값 |
|---|---|
| 클래스 경로 | icu4j jar의 항목 경로 언급 |
| 위의 예제 its/opt에서 배치된 Java Programs 패키지가 들어있는 폴더의 경로 지정 | |
| 변환기 클래스 이름 | 음역 Java 프로그램의 클래스 이름 제공 |
그림 3은 이러한 특성이 설정된 화면을 보여준다.
그림 3. Java Transformer Stage 특성 페이지
이 단계 이후에 음역 ETL 작업을 실행할 모든 준비가 되었다. 작업을 컴파일하고 실행한다. 입력으로서 작업에서부터 연산을 정리하는 것까지 출력을 사용할 수도 있다.
다음과 같이 발생할 수 있는 예외 조건에 유의한다.
- 작업이 완료되었지만 출력 파일에 음역된 출력이 들어있지 않은 경우, 입력 파일이 UTF 인코딩 외의 다른 것, 예를 들어 UCS로 저장되었는지 확인한다. 그러한 경우 적절한 편집기를 사용하고 입력 파일의 인코딩을 변경한다.
- DataStage
tr4j라이브러리는 메시지를 DataStage 디렉터에 로그하여 디버깅을 용이하게 하는 함수를 제공한다. 예를 들어,error()와info()이다.
이 기사는 ICU4J 라이브러리와 수행해야 하는 다양한 구성 설정을
사용하여 음역을 수행하는 방법의 질문을 해결했다. 이는
InfoSphere Information Server DataStage를 사용하여 음역을 달성하는 방법을 보여주었다.
음역은 여러 언어적 도전과제를 해결하는 데 핵심 컴포넌트로서 역할을 할 것이며,
예측 가능성을 통한 표준화 규칙 세트를 빌드하는 데 기초를 제공한다. 따라서, 이 기사는
Information Server DataStage를 사용하여 음역 도전과제를 해결하는 방법을 보여주었다.
교육
- ICU 홈
페이지에서 ICU 라이브러리와 ICU4J에 대해 자세히 배워보자.
-
IBM Redbooks® 출판물인 IBM
InfoSphere DataStage Data Flow and Job Design에서 DataStage에 대해 자세히 알아보자.
- developerWorks의 Information Management
영역에서 필요한 자원을 얻고 다양한
IBM Information Management 제품에 대한 기술을 향상시키자.
- developerWorks의 InfoSphere 영역을
방문하여 기사와 튜토리얼을 읽고, 포럼과 문서에 액세스하며, 다른 참고자료와 연계하여
InfoSphere 기술을 확장시키자.
- developerWorks Information Management
영역에서는 Information Management에 대한 정보를 제공한다. 기술 자료, 사용법 기사, 교육, 다운로드, 제품 정보 등을 찾아볼 수 있다.
- Twitter의 developerWorks 페이지를 살펴보자.
- developerWorks
on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.
제품 및 기술
-
ICU 사이트의 다운로드 섹션에서 바로 다운로드할
수 있는 새 릴리스를 찾아보자.
-
InfoSphere DataStage and InfoSphere QualityStage on the Amazon EC2
Web Service를 어떻게 사용할 수 있는지 학습하자.
- developerWorks에서 직접 다운로드할 수 있는
IBM 평가판
소프트웨어를 사용하여 후속 개발 프로젝트를 구현해보거나
SOA Sandbox에서
시간을 들여서 Service Oriented Architecture를 효율적으로 구현하는 방법에 대해 배워보자.
토론
- 포럼에 참여하기.
- developerWorks 포럼 & 블로그를 통해
developerWorks 커뮤니티에 참여하자.
