20 December 2008

DataStage: Can't connect by dsoper

ผมต้องการจะสร้าง user ชื่อ dsoper ขึ้นมาเพื่อให้ operator ใช้ในการ login เข้ามา run job เท่านั้น ไม่สามารถ view และ edit job ได้
ปัญหาคือ ไม่สามารถใช้ dsoper login ผ่าน DataStage Director ได้ และขึ้น error box ดังนี้
Error Code: 39202
Fail to open project
สิ่งที่ได้ทำไปแล้วคือ
1.    สร้าง user ชื่อ dsoper โดยให้อยู่ในกรุ๊ป dstage
$ id
uid=210(dsoper) gid=999(dstage) groups=1(staff),205(dba)
2.    Add dsoper ใน IBM Information Server ผ่าน Web Console โดยให้ Suite Component = DataStage and QualityStage User
3.    กำหนด Project Role = DataStage and QualityStage Operator ผ่าน DataStage Administrator
4.    ตรวจสอบ ds.rc ในโฟลเดอร์ $DSEngine/sample พบว่า umask 002 แล้ว
5.    ทำการ chmod -R g+w projpath แล้ว

วิธีแก้ไข
เปลี่ยน permission ของ path $UVTEMP ให้คนใน group มีสิทธิ์ write ได้ สามารถหา path $UVTEMP ได้ จาก

$ grep UVTEMP /Dstage/IBM/InformationServer/Server/DSEngine/uvconfig

# UVTEMP - is the name of the directory
#UVTEMP /tmp
UVTEMP /Dstage/IBM/InformationServer/Server/Scratch

จากตัวอย่างแสดงว่าต้องไป grant ที่ path /Dstage/IBM/InformationServer/Server/Scratch ให้เป็น 775

12 December 2008

Sort Stage: Preserve Partitioning

[DSEE 8.0.1, AIX]

Event Type: Warning

Message: ds_ts_lead.lnk_ts_lead_Sort: When checking operator: Operator of type "APT_TSortOperator": will partition despite the
preserve-partitioning flag on the data set on input port 0.

 

Details:

ใน job มีการทำ sorting in link

 sort_preserve_part

 

Action:

Set preserve partitioning = Clear ที่ stage ก่อนหน้า sort stage

clear_preserve_part

04 December 2008

Log Message Handlers

ในกรณีที่เราเจอ log message เช่น warning log ที่เป็นการแจ้งเตือนในสิ่งที่เราไม่สามารถควบคุมหรือแก้ไขได้ DS8 สามารถที่จะจัดการกับ message เหล่านี้ได้ เช่น ลบ message นี้ออกไปจากสารบบ หรือ เปลี่ยน type จาก warning ให้เป็น informational แทน เป็นต้น

กฏที่เราสร้างขึ้นมานั้น แยกออกได้ 2 ระดับ คือ

  • ระดับ project กฏที่เราสร้างขึ้นจะมีผลกับทุกๆ job ใน project
  • ระดับ job กฏที่สร้างขึ้นมาจะมีผลต่อ job นั้นๆ เท่านั้น หลังจากการสร้างกฏแล้ว จำเป็นต้อง compile job ใหม่ และกฏนี้จะ overwrite กฏระดับ project

กล่าวคือ เมื่อ job เริ่มรันจะเกิด log message ขึ้นมา DS จะไปเช็คว่า log ดังกล่าวเข้ากฏข้อใดในระดับ job หรือไม่ ถ้าไม่มี จะไปเช็คในกฏระดับ project ต่อไป ถ้าไม่เข้ากับกฏข้อใดในระดับ project เลย ก็จะ write ลง director เป็นอันสิ้นสุด

Message handlers หรือกฏที่เราสร้างขึ้น ใช้สำหรับ Info และ warning เท่านั้น ไม่สามารถใช้กับ fatal error ได้

วิธีการสร้างกฏ

ถ้าต้องการสร้างกฏระดับ project ต้องไป enable ที่ DataStage Administrator เสียก่อน แต่ถ้าสร้างแค่ระดับ job ก้ข้ามขั้นตอนนี้ไปได้เลย

login เข้า DataStage Administrator ด้วยuser ที่มีสิทธิ์ระดับ admin เช่น dsadm เป็นต้น ไปที่ project properties เลือก tab "Parallel" ที่ drop down list ชื่อ Message handler for Parallel Jobs เลือก TF_Handler ดังรูป

dsadm_msg_hdlr

 

ใน Director เลือก log message ที่ต้องการจะสร้างกฏ click ขวาที่ message นั้น เลือก Add rule to message handler

dsdir_add_rule

 

เลือก option box ตามต้องการ

  • option แรก คือการสร้างกฏระดับ job
  • option ที่สอง คือการสร้างกฏระดับ project
  • option ที่สาม คือการสร้างกฏระดับตามที่เราต้องการ

เลือก Action ตามต้องการ

  • Suppress from log: ไม่เขียน log นี้ ทำให้ไม่เห็นใน director
  • Promote to Warning: เปลี่ยนสถานะจาก informational เป็น warning
  • Demote to Informational: เปลี่ยนสถานะจาก warning เป็น informational

กดปุ่ม Add Rule เป็นอันเสร็จพิธี

dsdir_add_rule_detl

 

ถ้าต้องการ Edit กฏที่เราเคยสร้างไว้ ให้กดปุ่ม Edit Handler

 

ที่มา: IBM Information Server/Websphere DataStage: Administration/Director Client Guide/Chapter 5. The Job Log File/Message Handlers (C:\IBM\InformationServer\Documentation\i46dedrc.pdf)

03 December 2008

Reading Oracle NUMBER Datatype Column

[DSEE 8.0.1, Oracle 10g, AIX]
Event Type: Warning
Message: ora_bay_ts_cust_info: Column CUST_ID floating point decimal is not fully supported; adjusting the scale.
Message: ora_bay_ts_cust_info: When checking operator: When binding output interface field "CUST_ID" to field "CUST_ID": Implicit conversion from source type "decimal[38,10]" to result type "decimal[38,0]": Possible precision limitation.

Details:
BAY_TS_CUST_INFO เป็นตารางบน Oracle 10g โดยที่ Column CUST_ID เป็น Primary Key มี data type คือ Number
Warning นี้จะเกิดขึ้นเฉพาะการอ่านข้อมูลจาก Oracle Enterprise Stage บน column ที่มี data type เป็น Number เท่านั้น ถ้าเป็น Number(n) หรือ Integer หรือ Decimal(m,n) จะไม่เกิดปัญหานี้
cust_id_number 

Cause:
data type NUMBER ของ Oracle เป็น data type ที่ไว้เก็บตัวเลข สามารถยืดหยุ่นเป็น Integer หรือ Decimal ก็ได้ โดยสามารถขยายไปได้ถึง Decimal(38,10). เมื่อเรา import table definition DataStage จะเลือกใช้ Decimal(38,10) แทน NUMBER. Warning ที่เห็นเกิดขึ้นเพราะ DSEE ไม่ support data type NUMBER ของ Oracle ทำให้ DSEE ทำการเปลี่ยน scale ของตัวเลขไป ซึ่งขณะนี้ก็ยังไม่ทราบว่าการทำงานภายใน DSEE เองไปเปลี่ยนแปลงตัวเลขนี้อย่างไร 

Action1:
ถ้ามองว่า warning message นี้ไม่สำคัญมากนัก ให้ Suppress warning log ไปก็ได้
or Action2:
ให้แก้ SQL statement ตอนที่ select data ออกมาจาก Oracle Enterprise Stage โดยใข้ CAST function  เช่น
select cast(col1 as decimal(38,10)) as col1 from tab1;