14 May 2009

DataStage: Display File Name When Using File Pattern

ปัญหา
ต้องการอ่าน sequential file หลายๆ ไฟล์ภายใน job เดียว โดยให้มีชื่อ file แปะไว้เป็น column สุดท้ายของแต่ละ record

ตัวอย่างข้อมูล
$ ls –l /tmp/z*.txt
-rw-r--r--    1 etluser  dstage  12 May 23 17:15 z1.txt
-rw-r--r--    1 etluser  dstage  15 May 23 17:15 z2.txt
$ cat /tmp/z*.txt
z1
z1
z2
z2
z2
 
ตัวอย่างผลลัพธ์ที่ต้องการ
z1,/tmp/z1.txt
z1,/tmp/z1.txt
z2,/tmp/z2.txt
z2,/tmp/z2.txt
z2,/tmp/z2.txt



วิธีทำ






1. กำหนด Properties ของ Sequential File Stage / Output / Properties ดังนี้
  • Source/Read Method = File Pattern
  • Source/File Pattern = /tmp/z*.txt
  • Options/File Name Column = fileNameColumn




2. ใน Column ที่ชื่อว่า fileNameColumn จะเก็บชื่อไฟล์ไว้ เพราะฉะนั้นให้ลากมันไปออกที่ data set ใน mapping ของ Copy Stage ด้วย






3. เพิ่ม environment variable ชื่อ $APT_IMPORT_PATTERN_USES_FILESET ลงไปใน job parameter และกำหนดค่าตอน run time
  • กำหนดให้เป็น False (Default value) จะได้ค่า /tmp/z*.txt ออกมาใน output file

  • กำหนดให้เป็น True จะได้ค่า /tmp/z1.txt หรือ /tmp/z2.txt ตามที่มาของข้อมูลจริงๆ



DataStage Release: 7.5.x
Job Type: Parallel
OS: Unix

No comments: