10 April 2010

Sort Tips

Resorting on Sub-Groups

เมื่อเราต้องการ sort data เพิ่มเติมจาก data ที่เคยถูก sort มาแล้ว เช่น input data เคยถูก sort by col1, col2 มาแล้ว แต่เราต้องการ sort by col1, col2, col3 เราไม่จำเป็นต้อง sort ใหม่ทั้งหมด ให้ใช้ Sort Key Mode property เป็นประโยชน์ ดังนี้
  1. กำหนด Key = col1 > Sort Key Mode = Don't Sort (Previously Sorted)
  2. กำหนด Key = col2 > Sort Key Mode = Don't Sort (Previously Sorted)
  3. กำหนด Key = col3 > Sort Key Mode = Sort
  4. Key column order สำคัญนะครับ ต้องเรียงให้เหมือนกัน ถ้าสลับตำแน่งกัน ผลลัพธ์อาจจะผิดได้
  5. อย่าลืมใช้ SAME partition บน input data เพื่อให้ sort order (ที่เคยถูก sort มาแล้ว) ยังคงเหมือนเดิม เพราะถ้ามีการ re-partition เกิดขึ้น row order หรือ grouping จะเละหมดเลย ต้อง sort ใหม่
วิธีนี้จะทำให้ Performance ดีขึ้นมาก เพราะใช้ memory และ disk น้อยลงเยอะ

Total Sorting Methods

โดยปกติแล้ว Sort Stage จะทำการ Sort แบบ Parallel คือ sort data ภายใน partition ตัวเองเท่านั้น partition ใคร partition มัน ไม่เกี่ยวกัน

ที่นี้ถ้าเราอยาก Sort data ทั้งไฟล์หรือที่เรียกว่า Total Sort หล่ะ ทำได้ 2 วิธีคือ
  1. ใช้ Sort stage โดยกำหนด Execution mode = Sequential
  2. ใช้ Collector stage โดยกำหนด Collector logic = Sort Merge
วิธีการที่เร็วที่สุดคือ ทำ Parallel Sort (sort แต่ละ partition) ก่อน แล้วตามด้วยวิธีใดวิธีหนึ่งข้างต้น

Automatic Sorting

การ Combine data ที่ต้องใช้ key ชนกัน เช่น Join, Merge หรือ Remove Duplicate โดยทั่วไปแล้ว DataStage จะฉลาดพอที่จะเติม tsort operator ไปให้ใน Job Score โดยอัตโนมัติเมื่อ user ไม่ได้ระบุการ Sort ลงไปใน Designer ไม่ว่าจะเป็น Sort Stage หรือ Sort in-link ก็ตาม

ถ้าเข้าไปอ่านใน job score จะเห็นคำว่า "inserted tsort operator"

การ set $APT_SORT_INSERTION_CHECK_ONLY = True  DataStage จะลดบทบาทตัวเอง จากการ sort ให้อัตโนมัติ เหลือแค่ verify ว่าข้อมูลที่เข้ามาถูก sort บน column ที่ถุกต้องแล้วหรือยัง ถ้าไม่ถูก sort job ก็จะตาย

แนะนำให้ทำก็ต่อเมื่อรู้สึกว่า job มันช้าอันเนื่องมาจาก Auto Sort ให้อยู่นั่นแหละ

No comments: