execute function task ("table estimate_compression", "[Tabname]", "[Dbname]" , "[Owner]");example
22 December 2009
Informix: วิธีการเช็คว่า table or partition ถูก compress หรือยัง
1. Execute function estimate run on sysadmin database
Informix: วิธีการ compress table
ข้อควรรู้ก่อนทำ Table Compression
1. login ด้วย user "informix" เข้า database "sysadmin"
- สำหรับ user ที่จะใช้ในการรัน compression นั้นต้องเป็น informix
- ต้องรันที่ sysadmin database
- database server ต้องเป็น informix version 11.50 ด้วย
- table หรือ partition on table ที่จะ Compress ต้องมีข้อมูลมากกว่า 2000 row และ update statistics แล้ว
- ไม่สามารถ compress temp table
- ไม่สามารถ compress index
- ไม่สามารถ compress กับ system database
ขั้นตอนการทำ Table Compression
1. login ด้วย user "informix" เข้า database "sysadmin"
16 October 2009
Informix: Cannot rename table
ถ้าจะ rename table ด้วยคำสั่ง
onpload แล้วยังไม่ได้ backup database
วิธีแก้ไข
rename table table_A to table_B;แล้วมันขึ้น error ว่า
242: Could not open database table (table_A).สาเหตุ
197: ISAM error: Partition recently appended to; can't open for write or l
onpload แล้วยังไม่ได้ backup database
วิธีแก้ไข
ontape -s ด้วย user informix
07 October 2009
Awk: Random number
Put random number into every line of data
awk 'BEGIN{srand()} {RAND=1+int(rand()*1000000); print RAND}' [file]
22 September 2009
Informix: What tables is in each dbspace?
SQL บน Informix ที่ไว้หาว่าแต่ละ dbspace มี table อะไรอาศัยอยู่บ้าง
dbaccess {dbname}
select
dbinfo( "DBSPACE" , pe_partnum ) :: char(10) as dbspace
,b.dbsname[1,10] dbsname
,b.tabname[1,30] objname
,case when c.tabid is null then 'i' else 't' end as objtp
from
sysmaster@{instancename}:sysptnext a
, sysmaster@{instancename}:systabnames b
, outer {dbname}@{instancename}:systables c
where
a.pe_partnum = b.partnum
and b.tabname = c.tabname
and b.tabname not like 'sys%'
and b.dbsname='{dbname}'
and dbinfo( "DBSPACE" , pe_partnum ) :: char(10) = '{dbspacename}'
group by 1,2,3,4
order by 1,2,3,4;
14 September 2009
Informix: Left Outer Join
เพิ่งรู้ว่า
select a.key1, a.key2นอกจากจะช้านรกแล้ว ยังให้ผลลัพธ์ผิดอีกด้วย ผลลัพธ์ที่ได้จะมี store_cd อื่นๆ นอกเหนือจาก STORE1 ปนมาด้วย ถ้าอยากให้ถูกต้อง ต้องเขียนแบบนี้
,sum(col_1)::int
from TabA a left outer join TabB b
on a.cust_numb = b.cust_numb
and a.subr_numb = b.subr_numb
and b.data_dt = '2009-01-01'
and a.store_cd = 'STORE1'
group by 1,2
select a.key1, a.key2ว่างๆ จะหาเหตุผลว่า ทำไม query แรกมันถึงผิด?
,sum(col_1)::int
from TabA a, outer TabB b
where a.key1 = b.key1
and a.key2 = b.key2
and b.data_dt = '2009-01-01'
and a.store_cd = 'STORE1'
group by 1,2
25 August 2009
Informix: update statistics
หลังจาก create table เสร็จแล้ว ให้ load data เข้าไปก่อนแล้วค่อย create index เพราะการมี index อยู่ทำให้ load data ไป build index ไปช้าลง
เมื่อ load data เสร็จให้ upstat low ให้รู้ว่าตอนนี้ table มี record แล้ว ตอน built index มันจะได้ฉลาดขึ้น
หลังจาก build index เสร็จให้ upstat medium ทุก column แล้วค่อย upstat high column ที่เป็น index
เมื่อ load data เสร็จให้ upstat low ให้รู้ว่าตอนนี้ table มี record แล้ว ตอน built index มันจะได้ฉลาดขึ้น
หลังจาก build index เสร็จให้ upstat medium ทุก column แล้วค่อย upstat high column ที่เป็น index
update statistics medium for table {tabname} ;
create unique index {tabname}_p01 on {tabname} (column list) ;
create index {tabname}_i02 on {tabname} (column list) ;
update statistics high for table {tabname} (column list on primary key) ;
10 August 2009
Informix: update from another table
update tabA
set tabA.col1 = (select tabB.col1
from tabB
where tabA.key1 = tabB.key1
and tabA.key2 = tabB.key2
and tabB.col2 = '2009-06-01')
20 July 2009
Informix: Size ของแต่ละ Data Type
Integer = 4 byte
Date/Timestamp = 4 byte
You can use the following formulas (rounded down to a whole number of bytes) to calculate the byte storage (N) for a DECIMAL(p,s) data type (where N includes the byte that is required to store the exponent and the sign):
If the scale is odd: N = (precision + 4) / 2
If the scale is even: N = (precision + 3) / 2
Reference
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqlr.doc/sqlrmst111.htm
Date/Timestamp = 4 byte
You can use the following formulas (rounded down to a whole number of bytes) to calculate the byte storage (N) for a DECIMAL(p,s) data type (where N includes the byte that is required to store the exponent and the sign):
If the scale is odd: N = (precision + 4) / 2
If the scale is even: N = (precision + 3) / 2
Reference
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqlr.doc/sqlrmst111.htm
17 July 2009
Informix: HPL command
HPL หรือ High Performance Loader คือเครื่องมือของ Informix เพื่อใช้ในการ load text file เข้า table และ/หรือ unload data ออกจาก table เป็น text file สามารถเลือกทำกับ table เดียวหรือหลาย table ก็ได้ ทำทั้ง table หรือใส่เงื่อนไข filter (where condition) เข้าไปก็ได้ เลือกทุก column หรือเอาเฉพาะบาง column ก็ได้
ขั้นตอนเป็นดังนี้
1. check environment
onpladm configure default –m Sparcstation –c thai6
4. Create job
ขั้นตอนเป็นดังนี้
1. check environment
env | grep DBONPLOAD หากยังไม่มีก็ทำการ Set environment โดย2. Create HPL project ขั้นตอนนี้ทำครั้งเดียว
export DBONPLOAD=[hpl_dbname]
onpladm create project [project name]3. Configure HPL project ขั้นตอนนี้ทำครั้งเดียว
onpladm configure defaults –m [machine type] –c [data code set]ตัวอย่างเช่น
onpladm configure default –m Sparcstation –c thai6
4. Create job
onpladm create job [job name] –p [project name] –d [path of file] –D [database name] –t [table name]5. Execute job
onpload –p [project name] –j [job name] –f [u or l]6. Check process
โดยที่ u : unload, l : load
tail –f /tmp/[job name].logแถมวิธีการลบ job
onpladm delete job [job name] -p [project name] -R
07 July 2009
Teradata: Ceil() equivalent function
Ceil() เป็น function บน Oracle ใช้สำหรับปัดตัวเลขขึ้นเสมอ แต่บน TD ไม่มีคำสั่งนี้
บน TD ในกรณีที่ต้องการปัดเลขทศนิยมขึ้นเป็น Integer เสมอ ใช้คำสั่ง
บน TD ในกรณีที่ต้องการปัดเลขทศนิยมขึ้นเป็น Integer เสมอ ใช้คำสั่ง
SELECT cast((col1) as int) + (case when (col1) mod 1 > 0 then 1 else 0 end);
06 July 2009
30 June 2009
Teradata: Basic Command
1.
โดยปกติแล้ว เวลาจะอ้างชื่อ table ใน TD เราต้องอ้างชื่อเต็มคือ [dbname].[tablename] แต่เราสามารถกำหนด default database ได้ ช่วยให้ไม่ต้องกำหนดชื่อ db ใน query
อยากรู้ว่า table นั้นมี column อะไรบ้าง กรณีที่เป็น view เราจะเห็นแค่ชื่อ column เท่านั้นไม่สามารถเห็น data type ได้
แปลง timestamp เป็น date
โดยปกติแล้ว เวลาจะอ้างชื่อ table ใน TD เราต้องอ้างชื่อเต็มคือ [dbname].[tablename] แต่เราสามารถกำหนด default database ได้ ช่วยให้ไม่ต้องกำหนดชื่อ db ใน query
DATABASE [dbname];2.
อยากรู้ว่า table นั้นมี column อะไรบ้าง กรณีที่เป็น view เราจะเห็นแค่ชื่อ column เท่านั้นไม่สามารถเห็น data type ได้
HELP TABLE [tablename];3.
แปลง timestamp เป็น date
[columnname] (date, format'yyyy-mm-dd')
20 May 2009
DataStage: Merge data เติมข้อมูลฟันหลอ
ปัญหา
มีข้อมูลฟันหลออยู่หลายๆบรรทัด ยุบรวมให้เป็น record เดียวตาม key ที่กำหนด
ตัวอย่างข้อมูล
key,aaa,bbb
111,a11,null
111,null,b11
222,a22,null
222,null,b22
ตัวอย่างผลลัพธ์ที่ต้องการ
key,aaa,bbb
111,a11,b11
222,a22,b22
วิธีทำ
1. filter แยกเป็น 2 ส่วน ส่วนแรกเลือกเอาที่ aaa มีค่า ส่วนที่ 2 เลือกเอาที่ bbb มีค่า
2. ตัดข้อมูลส่วนแรกให้เหลือ 2 column คือ key และ aaa พร้อมเปลี่ยนชื่อ column ผ่าน copy stage
จากรูปจะเห็นว่า เราไม่เอา column bbb ไปด้วย
3. ตัดข้อมูลส่วนที่สองให้เหลือ 2 column คือ key และ bbb พร้อมเปลี่ยนชื่อ column ผ่าน copy stage
จากรูปจะเห็นว่า เราไม่เอา column aaa ไปด้วย
4. เอาส่วนแรกเป็น master และส่วนที่สองเป็น update รวมข้อมูลกันผ่าน merge stage โดยใช้ column key เป็น key
ข้อจำกัด
ข้อมูลต้องเป็น pattern ว่า ในบรรทัดหนึ่งต้องมีค่าเพียง column เดียวเท่านั้น นอกนั้นต้องเป็น null
DataStage Release: 7.5.x
Job Type: Parallel
OS: Unix
มีข้อมูลฟันหลออยู่หลายๆบรรทัด ยุบรวมให้เป็น record เดียวตาม key ที่กำหนด
ตัวอย่างข้อมูล
key,aaa,bbb
111,a11,null
111,null,b11
222,a22,null
222,null,b22
ตัวอย่างผลลัพธ์ที่ต้องการ
key,aaa,bbb
111,a11,b11
222,a22,b22
วิธีทำ
1. filter แยกเป็น 2 ส่วน ส่วนแรกเลือกเอาที่ aaa มีค่า ส่วนที่ 2 เลือกเอาที่ bbb มีค่า
2. ตัดข้อมูลส่วนแรกให้เหลือ 2 column คือ key และ aaa พร้อมเปลี่ยนชื่อ column ผ่าน copy stage
จากรูปจะเห็นว่า เราไม่เอา column bbb ไปด้วย
3. ตัดข้อมูลส่วนที่สองให้เหลือ 2 column คือ key และ bbb พร้อมเปลี่ยนชื่อ column ผ่าน copy stage
จากรูปจะเห็นว่า เราไม่เอา column aaa ไปด้วย
4. เอาส่วนแรกเป็น master และส่วนที่สองเป็น update รวมข้อมูลกันผ่าน merge stage โดยใช้ column key เป็น key
ข้อจำกัด
ข้อมูลต้องเป็น pattern ว่า ในบรรทัดหนึ่งต้องมีค่าเพียง column เดียวเท่านั้น นอกนั้นต้องเป็น null
DataStage Release: 7.5.x
Job Type: Parallel
OS: Unix
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
ตัวอย่างผลลัพธ์ที่ต้องการ
วิธีทำ

1. กำหนด Properties ของ Sequential File Stage / Output / Properties ดังนี้
2. ใน Column ที่ชื่อว่า fileNameColumn จะเก็บชื่อไฟล์ไว้ เพราะฉะนั้นให้ลากมันไปออกที่ data set ใน mapping ของ Copy Stage ด้วย
3. เพิ่ม environment variable ชื่อ $APT_IMPORT_PATTERN_USES_FILESET ลงไปใน job parameter และกำหนดค่าตอน run time
DataStage Release: 7.5.x
Job Type: Parallel
OS: Unix
ต้องการอ่าน 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
08 May 2009
10 Tips for Time Management (ตอนที่ 2)
6. เช็ค email วันละ 2 รอบ
email เป็นตัวกินเวลาชั้นเยี่ยมเลย เพราะหลังจากอ่านอีเมล์แล้วมักจะมีงานที่ต่อเนื่องตามมาอีกเป็นพรวน ต้องอดกลั้นที่จะเปิด email อ่านแค่วันละ 2 ครั้งเท่านั้น ไม่ต้องกังวลว่าจะมีงานด่วนเข้ามาหรอก เพราะถ้ามันด่วนจริงคนส่งจะโทรมาหาคุณแน่นอน
เมื่อเช็ค email แล้วก็ clear inbox ด้วย ถ้ามีงานต่อเนื่องให้รีบทำในช่วงเวลานี้เลย ยกเว้นเสียแต่ว่าเป็นงานใหญ่ที่ต้องใช้เวลานาน
7. จัดเอกสารให้เรียบร้อยทุกวัน
เคลียร์โต๊ะให้สะอาด จัดเอกสารต่างๆให้เป็นระเบียบ นอกจากจะสบายตาแล้ว ยังช่วยให้เราค้นหาเอกสารได้ง่ายขึ้นด้วย ยอมสละเวลาวันละนิดเพื่อทุ่นเวลามหาศาล
8. เริ่มต้นวันด้วยงานที่ใช้สมองมากที่สุด
ในตอนเช้าสมองเราจะสดชื่นที่สุด เพราะฉะนั้นจงใช้มันให้เต็มที่ เลือกดูว่างานใดใน To-Do List ที่ต้องใช้ความคิดมากที่สุด หยิบงานนั้นมาทำก่อน แล้วปิดท้ายแต่ละวันด้วยงานง่ายๆ ซึ่งจะทำให้คุณมีความสุขหลังเลิกงานกับครอบครัวได้ไม่ยากนัก
9. พักผ่อนเมื่อหมดแรง
ถ้ารู้สึกล้า ก็ละสายตาจากงานบ้าง พักเบรกสั้นๆ ซัก 5 นาที ลุกออกจากโต๊ะทำงาน เดินไปดื่มน้ำ เข้าห้องน้ำ คุยกับเพื่อนร่วมงาน กินผลไม้ซักชิ้น จะทำให้คุณสดชื่นขึ้นมาได้อีกครั้ง
10. อย่าหักโหม
อย่าหักโหมมากนัก ถ้ารู้สึกว่าทำงานต่อไปไม่ไหวแล้ว เริ่มรู้สึกสมองตัน อย่าฝืน!! เพราะผลงานที่ได้ออกมาคงจะได้ไม่ดีนัก กลับไปพัก พรุ่งนี้ค่อยลุยกันใหม่ ถึงแม้ว่าประสิทธิภาพในวันนี้จะดูไม่ดี แต่ระยะยาวแล้วมันช่วยไม่ให้เราหมดไฟไปเสียก่อน
ที่มา http://www.thesimpledollar.com/2009/03/26/most-time-management-is-rubbish-here-are-ten-things-that-work-for-me/
email เป็นตัวกินเวลาชั้นเยี่ยมเลย เพราะหลังจากอ่านอีเมล์แล้วมักจะมีงานที่ต่อเนื่องตามมาอีกเป็นพรวน ต้องอดกลั้นที่จะเปิด email อ่านแค่วันละ 2 ครั้งเท่านั้น ไม่ต้องกังวลว่าจะมีงานด่วนเข้ามาหรอก เพราะถ้ามันด่วนจริงคนส่งจะโทรมาหาคุณแน่นอน
เมื่อเช็ค email แล้วก็ clear inbox ด้วย ถ้ามีงานต่อเนื่องให้รีบทำในช่วงเวลานี้เลย ยกเว้นเสียแต่ว่าเป็นงานใหญ่ที่ต้องใช้เวลานาน
7. จัดเอกสารให้เรียบร้อยทุกวัน
เคลียร์โต๊ะให้สะอาด จัดเอกสารต่างๆให้เป็นระเบียบ นอกจากจะสบายตาแล้ว ยังช่วยให้เราค้นหาเอกสารได้ง่ายขึ้นด้วย ยอมสละเวลาวันละนิดเพื่อทุ่นเวลามหาศาล
8. เริ่มต้นวันด้วยงานที่ใช้สมองมากที่สุด
ในตอนเช้าสมองเราจะสดชื่นที่สุด เพราะฉะนั้นจงใช้มันให้เต็มที่ เลือกดูว่างานใดใน To-Do List ที่ต้องใช้ความคิดมากที่สุด หยิบงานนั้นมาทำก่อน แล้วปิดท้ายแต่ละวันด้วยงานง่ายๆ ซึ่งจะทำให้คุณมีความสุขหลังเลิกงานกับครอบครัวได้ไม่ยากนัก
9. พักผ่อนเมื่อหมดแรง
ถ้ารู้สึกล้า ก็ละสายตาจากงานบ้าง พักเบรกสั้นๆ ซัก 5 นาที ลุกออกจากโต๊ะทำงาน เดินไปดื่มน้ำ เข้าห้องน้ำ คุยกับเพื่อนร่วมงาน กินผลไม้ซักชิ้น จะทำให้คุณสดชื่นขึ้นมาได้อีกครั้ง
10. อย่าหักโหม
อย่าหักโหมมากนัก ถ้ารู้สึกว่าทำงานต่อไปไม่ไหวแล้ว เริ่มรู้สึกสมองตัน อย่าฝืน!! เพราะผลงานที่ได้ออกมาคงจะได้ไม่ดีนัก กลับไปพัก พรุ่งนี้ค่อยลุยกันใหม่ ถึงแม้ว่าประสิทธิภาพในวันนี้จะดูไม่ดี แต่ระยะยาวแล้วมันช่วยไม่ให้เราหมดไฟไปเสียก่อน
ที่มา http://www.thesimpledollar.com/2009/03/26/most-time-management-is-rubbish-here-are-ten-things-that-work-for-me/
07 May 2009
10 Tips for Time Management (ตอนที่ 1)
ถอดความมาจาก http://www.thesimpledollar.com/2009/03/26/most-time-management-is-rubbish-here-are-ten-things-that-work-for-me/
เก็บเอาไว้ใช้เวลางานยุ่งๆ เวลามีหลายโปรเจคท์ประดังเข้ามา อย่างที่คนเขียนทิปนี้กล่าวไว้ว่า “ทิปเหล่านี้น่าจะมีประโยชน์กับคุณบ้างไม่มากก็น้อย อย่างน้อยที่สุดคงไม่เสียหายอะไรถ้าจะลองมันซักตั้ง”
1. หลีกเลี่ยงการทำงานแบบ Multi-tasking
การเริ่มงานในแต่ละครั้งเราต้องเสียเวลาในการตั้งสมาธิใหม่ทุกครั้ง ยิ่งเราทำงานแบบ Multi-tasking ทำให้เราเสีย overhead ตรงนี้เยอะขึ้น และผลลัพธ์ที่ได้คือ การห่วงหน้าพะวงหลัง สุดท้ายคุณภาพของงานโดยรวมก็ลดลงด้วย
ข้อแนะนำ: กำปั้นทุบดินครับ… ทำงานเพียงอย่างเดียวในเวลาหนึ่งๆ ทุ่มแรงลงไปให้สุดๆ ปล่อยวางงานที่เหลือไป ให้เวลากับมันซักหนึ่งชั่วโมง จากนั้นพักผ่อนห้านาที ดูว่ามีอะไรด่วนเข้ามามั้ย แล้วตะลุยงานต่อ ทำอย่างนี้วนไปเรื่อยๆ จนเสร็จงานนั้น ถ้าจะให้ดีควรป้องกันสิ่งที่จะมารบกวนคุณซะ เช่น ปิดมือถือ ปิด email ปิดห้อง ปิดทุกอย่าง ตั้งนาฬิกาปลุกไว้หนึ่งชั่วโมง คุณจะได้ไม่ต้องพะวงว่าคุณใช้เวลาไปเท่าไหร่แล้ว
2. พกสมุดโน้ตไว้กับตัวเสมอ
ไว้จดสิ่งต่างๆ ไม่ว่าจะเป็น idea ที่คิดขึ้นได้ สิ่งที่เราต้องทำ ความรู้ที่ต้องไปหาเพิ่มเติม สิ่งต่างๆเหล่านี้มักจะผุดขึ้นมาในหัวเสมอๆ บางครั้งเราก็ปล่อยมันไปและคิดว่าเมื่อมีเวลาว่างจะกลับมาคิดต่อ แล้วเราก็มักจะลืมทุกที หรือบางครั้งความคิดผุดขึ้นมา เราก็จะลงมือทำเลย ส่งผลให้เกิด Multi-tasking ขึ้นมาอีก
ข้อแนะนำ: จดไว้ครับ จดในสมุดโน้ตก็ได้ PDA ก็ได้ มีเวลาค่อยหยิบจับมันขึ้นมาดู
3. จัดการกับจดหมายวันละหนึ่งถึงสองครั้ง
ไล่ดูจดหมายที่ส่งมาหาคุณวันละครั้งหลังเลิกงาน จากนั้นก็แยกออกมาว่า อันไหนไม่ต้องสนใจก็ฉีกมันทิ้งไป อันไหนต้องลงปฏิทินหรือลงสมุดนัด อันไหนต้องเพิ่มลงใน to-do list ควรทำทุกวันจดหมายจะได้ไม่หมักหมม
4. จดรายชื่อโครงการที่อยากทำไว้
โครงการที่ว่านี้เป็นอะไรก็ได้ไม่จำเป็นต้องเกี่ยวกับที่ทำงาน เช่น โครงการทำความสะอาดห้องนอน โครงการซ่อมครัว โครงการล้างรถ เป็นต้น เขียนมันลงไปในสมุดโน้ตของเรา นึกอะไรออกก็เขียนลงไปตามลำดับ เมื่อมีเวลาว่างก็ให้กลับมาดูที่กระดาษแผ่นนี้ ไล่ดูว่าอยากทำโครงการไหน ไม่จำเป็นต้องทำตามลำดับ เมื่อทำโครงการไหนเสร็จสิ้นก็ขีดฆ่ามันซะ
วิธีนี้จะช่วยให้เราเห็นว่า เมื่อเวลาผ่านไปโครงการไหนที่ไม่ถูกขีดฆ่าโดยเฉพาะโครงการเก่าๆ แปลว่าเราไม่อยากทำมันจริงๆ
5. ทำ To-Do List ทุกวัน
ตื่นเช้ามาคุณควรจะใช้เวลานั่งจดสิ่งที่คุณต้องทำวันนี้ให้ลุล่วง ไม่ต้องมากนักซัก 4-5 อย่างก็พอ โดยไม่นับพวกงานรูทีนทั้งหลายนะ แล้วจงทำมันให้ลุล่วงไปให้ได้ทุกข้อ ใช้เทคนิคในข้อ 1 มาช่วยก็ได้นะ
อีก 5 ข้อมาต่อตอนหน้า
เก็บเอาไว้ใช้เวลางานยุ่งๆ เวลามีหลายโปรเจคท์ประดังเข้ามา อย่างที่คนเขียนทิปนี้กล่าวไว้ว่า “ทิปเหล่านี้น่าจะมีประโยชน์กับคุณบ้างไม่มากก็น้อย อย่างน้อยที่สุดคงไม่เสียหายอะไรถ้าจะลองมันซักตั้ง”
1. หลีกเลี่ยงการทำงานแบบ Multi-tasking
การเริ่มงานในแต่ละครั้งเราต้องเสียเวลาในการตั้งสมาธิใหม่ทุกครั้ง ยิ่งเราทำงานแบบ Multi-tasking ทำให้เราเสีย overhead ตรงนี้เยอะขึ้น และผลลัพธ์ที่ได้คือ การห่วงหน้าพะวงหลัง สุดท้ายคุณภาพของงานโดยรวมก็ลดลงด้วย
ข้อแนะนำ: กำปั้นทุบดินครับ… ทำงานเพียงอย่างเดียวในเวลาหนึ่งๆ ทุ่มแรงลงไปให้สุดๆ ปล่อยวางงานที่เหลือไป ให้เวลากับมันซักหนึ่งชั่วโมง จากนั้นพักผ่อนห้านาที ดูว่ามีอะไรด่วนเข้ามามั้ย แล้วตะลุยงานต่อ ทำอย่างนี้วนไปเรื่อยๆ จนเสร็จงานนั้น ถ้าจะให้ดีควรป้องกันสิ่งที่จะมารบกวนคุณซะ เช่น ปิดมือถือ ปิด email ปิดห้อง ปิดทุกอย่าง ตั้งนาฬิกาปลุกไว้หนึ่งชั่วโมง คุณจะได้ไม่ต้องพะวงว่าคุณใช้เวลาไปเท่าไหร่แล้ว
2. พกสมุดโน้ตไว้กับตัวเสมอ
ไว้จดสิ่งต่างๆ ไม่ว่าจะเป็น idea ที่คิดขึ้นได้ สิ่งที่เราต้องทำ ความรู้ที่ต้องไปหาเพิ่มเติม สิ่งต่างๆเหล่านี้มักจะผุดขึ้นมาในหัวเสมอๆ บางครั้งเราก็ปล่อยมันไปและคิดว่าเมื่อมีเวลาว่างจะกลับมาคิดต่อ แล้วเราก็มักจะลืมทุกที หรือบางครั้งความคิดผุดขึ้นมา เราก็จะลงมือทำเลย ส่งผลให้เกิด Multi-tasking ขึ้นมาอีก
ข้อแนะนำ: จดไว้ครับ จดในสมุดโน้ตก็ได้ PDA ก็ได้ มีเวลาค่อยหยิบจับมันขึ้นมาดู
3. จัดการกับจดหมายวันละหนึ่งถึงสองครั้ง
ไล่ดูจดหมายที่ส่งมาหาคุณวันละครั้งหลังเลิกงาน จากนั้นก็แยกออกมาว่า อันไหนไม่ต้องสนใจก็ฉีกมันทิ้งไป อันไหนต้องลงปฏิทินหรือลงสมุดนัด อันไหนต้องเพิ่มลงใน to-do list ควรทำทุกวันจดหมายจะได้ไม่หมักหมม
4. จดรายชื่อโครงการที่อยากทำไว้
โครงการที่ว่านี้เป็นอะไรก็ได้ไม่จำเป็นต้องเกี่ยวกับที่ทำงาน เช่น โครงการทำความสะอาดห้องนอน โครงการซ่อมครัว โครงการล้างรถ เป็นต้น เขียนมันลงไปในสมุดโน้ตของเรา นึกอะไรออกก็เขียนลงไปตามลำดับ เมื่อมีเวลาว่างก็ให้กลับมาดูที่กระดาษแผ่นนี้ ไล่ดูว่าอยากทำโครงการไหน ไม่จำเป็นต้องทำตามลำดับ เมื่อทำโครงการไหนเสร็จสิ้นก็ขีดฆ่ามันซะ
วิธีนี้จะช่วยให้เราเห็นว่า เมื่อเวลาผ่านไปโครงการไหนที่ไม่ถูกขีดฆ่าโดยเฉพาะโครงการเก่าๆ แปลว่าเราไม่อยากทำมันจริงๆ
5. ทำ To-Do List ทุกวัน
ตื่นเช้ามาคุณควรจะใช้เวลานั่งจดสิ่งที่คุณต้องทำวันนี้ให้ลุล่วง ไม่ต้องมากนักซัก 4-5 อย่างก็พอ โดยไม่นับพวกงานรูทีนทั้งหลายนะ แล้วจงทำมันให้ลุล่วงไปให้ได้ทุกข้อ ใช้เทคนิคในข้อ 1 มาช่วยก็ได้นะ
อีก 5 ข้อมาต่อตอนหน้า
04 May 2009
Experimental Travel
เห็นพวกเราชอบเที่ยวกัน เลยเอาการท่องเที่ยวแบบทดลอง (Experimental Travel) มานำเสนอ
นาย Joel Henry ชาวฝรั่งเศส แกคงเที่ยวมาเยอะ เที่ยวแบบธรรมดาคงไม่มีอะไรตื่นเต้นแล้ว แกเลยนึกหาอะไรสนุก ออกจะเพี้ยนๆด้วย ใส่เข้าไปในทริป เช่น
ที่มา: หนังสือ"ป๋าไม่กลัวน้ำร้อน"
นาย Joel Henry ชาวฝรั่งเศส แกคงเที่ยวมาเยอะ เที่ยวแบบธรรมดาคงไม่มีอะไรตื่นเต้นแล้ว แกเลยนึกหาอะไรสนุก ออกจะเพี้ยนๆด้วย ใส่เข้าไปในทริป เช่น
- Fly by Night คือเลือกไปถึงที่หมายในตอนหัวค่ำ แล้วตะลุยเที่ยวไม่หลับไม่นอนก่อนจะออกเดินทางจากเมืองนั้นก่อนพระอาทิตย์ขึ้น
- Barman's Knock ทริปคนขี้เมา เริ่มด้วยไปที่ผับๆหนึ่ง สั่งเครื่องดื่ม 1 หน่วย (กั๊ก ขวด เหยือก อะไรก็ได้) แล้วถามบาร์เทนเดอร์ว่าผับไหนและเครื่องดื่มอะไรที่เขาชอบ แล้วเราก็ไปตามที่เขาบอก ทำซ้ำไปเรื่อยๆ จนไปต่อไม่ไหว
- Monopoly Travel ทริปเกมเศรษฐี ไปถึงประเทศไหนก็ซื้อเกมเศรษฐีของประเทศนั้นมา แล้วก็ไปตามสถานที่ต่างๆ ที่ระบุในเกมเท่านั้น
- Ero Tourism ทริปนี้หมาะสำหรับคู่รักครับ โดยให้แยกกันเดินทางกันคนละวิธี เช่น คนหนึ่งไปรถไฟ อีกคนไปเครื่องบิน เมื่อถึงเมืองที่หมายก็พยายามหากันให้เจอ
ที่มา: หนังสือ"ป๋าไม่กลัวน้ำร้อน"
27 April 2009
DataStage: How to create project
การสร้าง Project บน DataStage สามารถสร้างได้ 2 วิธี คือ
1. เพิ่ม Project ใหม่ใน DataStage Administrator
2. สร้าง Project ตอนติดตั้ง DataStage Engine
1. เพิ่ม Project ใหม่ใน DataStage Administrator
2. สร้าง Project ตอนติดตั้ง DataStage Engine
25 March 2009
DataStage: Transformer, Filter และ Switch แตกต่างกันอย่างไร
Transform Stage | Filter Stage | Switch Stage | |
1.เวลา | ใช้เวลาน้อยที่สุด | ใช้เวลามากที่สุด | มากกว่า Transform แต่น้อยกว่า Filter |
2.เวลาในการCompile | นานที่สุด | พอๆกับ Switch | พอๆกับ Filter |
3.กรองค่า | ใช้กรอง Dataได้ | ใช้กรอง Dataได้ | ใช้กรอง Dataได้ |
4. Function | สามารถใส่ Functionได้ | ใส่ Function ไม่ได้ | ใส่ Function ไม่ได้ |
5. การ Filter | สามารถนำ Column ตั้งแต่ 2 Column มาใช้ในการกรองร่วมกันได้ | สามารถนำ Column ตั้งแต่ 2 Column มาใช้ในการกรองร่วมกันได้ | กำหนดเป็นค่า ได้ 1 ค่า |
6. การใช้ Parameter | ไม่สามารถใช้ Parameter ร่วมได้ จะติดในส่วนของ Link Column | สามารถกรองโดยใช้ Parameter ร่วมได้ | ไม่สามารถใช้ Parameter ร่วมได้ จะติดในส่วนของ Link Column |
7. Output limit links | ไม่ได้บอกว่าจำกัดเท่าไหร่ | ไม่ได้บอกว่าจำกัดเท่าไหร่ | 128 Output links |
8. เครื่องหมายทางคณิตศาตร์ | ใช้ได้ทุกเครื่องหมาย | ใช้ได้ทุกเครื่องหมาย | ใช้ได้แค่เท่ากับ (=) |
แถมรูปการทดลอง Performance
DataStage: Preserve Partition
เวลารัน job EE แล้วมันชอบขึ้น Warning ว่า
Stage มันจำค่า Partition เดิมเอาไว้ ทำให้เมื่อมีการ re-partition จึงฟ้อง warning นี้ขึ้นมา
วิธีการแก้ไข
เข้าไปใน Stage ที่เราต้องทำการRe-Partition แล้ว ไปที่ Tab Stage > Advance > Preserver partitioning เลือก Clear แล้วลอง Run ซ้ำใหม่อีกครั้ง Warning จะหายไป ตามรูป
Copy_20: When checking operator: Operator of tyoe "APT_CopyOperator": will partition despite the preserve-partitioning flag on the data set on input port 0.สาเหตุคือ
Stage มันจำค่า Partition เดิมเอาไว้ ทำให้เมื่อมีการ re-partition จึงฟ้อง warning นี้ขึ้นมา
วิธีการแก้ไข
เข้าไปใน Stage ที่เราต้องทำการRe-Partition แล้ว ไปที่ Tab Stage > Advance > Preserver partitioning เลือก Clear แล้วลอง Run ซ้ำใหม่อีกครั้ง Warning จะหายไป ตามรูป
24 March 2009
DataStage: Dataset เก็บข้อมูลไว้ที่ไหน
dataset จะมีการแยกเก็บข้อมูลเป็น 2 ส่วน คือ ส่วน header และ ส่วน data
- header จะเก็บไฟล์ตาม path ที่ระบุไว้ใน DataStage Job โดยในไฟล์จะเก็บรายละเอียดเกี่ยวกับ configuration file ที่ใช้ในการรัน และบอกว่าไฟล์ที่เก็บ data จริงๆ ของ dataset นั้นๆ อยู่ที่ไหน
- data จะถูกเก็บไว้ตาม path ที่ระบุไว้ที่ resource disk ใน configuration file โดยจะแยกเก็บเป็นไฟล์ๆ ขึ้นอยู่กับจำนวน node ที่ระบุใน Configuration file
19 March 2009
DataStage: Configuration File
Configuration File จะถูกเก็บอยู่ที่ path [dshome]/../Configurations เป็นไฟล์นามสกุล .apt ซึ่งจะบอกว่า Job ที่เราจะรันว่าใช้กี่ node ในการรัน แต่ละ node อยู่บน server ตัวไหน กำหนดพื้นที่สำหรับเก็บข้อมูล และพื้นที่สำหรับ temporary file ไว้ที่ไหนบ้าง ดังรูป
ส่วน ใน Job ก็สามารถกำหนดได้ว่า Stage ไหนจะให้ใช้ pool ไหนในการทำงาน โดยกำหนดที่ properties ของ Stage นั้นๆ ตรง tab Stage>Advanced สามารถกำหนดได้ที่ Node pool and resource constraints โดยระบุค่าตรง Constraint เป็น Node pool และกำหนดชื่อ pool ที่ต้องการใช้ ดังรูป
ในกรณีที่กำหนดชื่อ pool เป็น reserve word ซึ่ง DataStage จะรู้จักอยู่แล้ว ก็ไม่ต้องกำหนดที่ Stage ใน Job ก็ได้
การกำหนด node pool จะช่วยในการจัดการเรื่อง CPU และ Memory
การกำหนด disk pool จะช่วยในเรื่องการจัดการ disk เพราะใน 1 node มีการกำหนด resource disk ได้หลายค่า ทำให้สามารถเลือกได้ว่า จะเก็บข้อมูลไหนใน disk ไหน
ในกรณีที่ resource scratchdisk ที่กำหนดไว้ ถูกใช้จนเต็ม จะไปใช้พื้นที่ของ Temp ที่กำหนดไว้ใน DataStage และ /tmp ของระบบ ตามลำดับ
Temp ของ DataStage สามารถดูได้ที่ uvconfig ใน DataStage Home Directory ที่ parameter UVTEMP
เพราะฉะนั้น หากต้องการกำหนดให้บาง server เท่านั้น ที่ทำการ sort data สามารถกำหนดได้โดย กำหนดที่ pool ระดับ fastname ว่าให้ใช้ในการ sort หรือสามารถกำหนดได้ที่ properties ของ Sort Stage ว่าจะใช้ node ไหนในการทำงาน
*** Home Directory ของ DataStage สามารถดูได้โดยใช้คำสั่ง cat /.dshome
Reserve word ที่ใช้ในการกำหนดชื่อ node pool มีดังนี้
1. DB2
2. INFORMIX
3. ORACLE
4. sas
5. sort
6. syncsort
Reserve word ในการกำหนดชื่อ disk pool มีดังนี้
1. buffer
2. export
3. lookup
4. sasdataset
5. sort
6. syncsort
- fastname
- pool
ส่วน ใน Job ก็สามารถกำหนดได้ว่า Stage ไหนจะให้ใช้ pool ไหนในการทำงาน โดยกำหนดที่ properties ของ Stage นั้นๆ ตรง tab Stage>Advanced สามารถกำหนดได้ที่ Node pool and resource constraints โดยระบุค่าตรง Constraint เป็น Node pool และกำหนดชื่อ pool ที่ต้องการใช้ ดังรูป
ในกรณีที่กำหนดชื่อ pool เป็น reserve word ซึ่ง DataStage จะรู้จักอยู่แล้ว ก็ไม่ต้องกำหนดที่ Stage ใน Job ก็ได้
- resource disk
การกำหนด node pool จะช่วยในการจัดการเรื่อง CPU และ Memory
การกำหนด disk pool จะช่วยในเรื่องการจัดการ disk เพราะใน 1 node มีการกำหนด resource disk ได้หลายค่า ทำให้สามารถเลือกได้ว่า จะเก็บข้อมูลไหนใน disk ไหน
- resource scratchdisk
ในกรณีที่ resource scratchdisk ที่กำหนดไว้ ถูกใช้จนเต็ม จะไปใช้พื้นที่ของ Temp ที่กำหนดไว้ใน DataStage และ /tmp ของระบบ ตามลำดับ
Temp ของ DataStage สามารถดูได้ที่ uvconfig ใน DataStage Home Directory ที่ parameter UVTEMP
เพราะฉะนั้น หากต้องการกำหนดให้บาง server เท่านั้น ที่ทำการ sort data สามารถกำหนดได้โดย กำหนดที่ pool ระดับ fastname ว่าให้ใช้ในการ sort หรือสามารถกำหนดได้ที่ properties ของ Sort Stage ว่าจะใช้ node ไหนในการทำงาน
*** Home Directory ของ DataStage สามารถดูได้โดยใช้คำสั่ง cat /.dshome
Reserve word ที่ใช้ในการกำหนดชื่อ node pool มีดังนี้
1. DB2
2. INFORMIX
3. ORACLE
4. sas
5. sort
6. syncsort
Reserve word ในการกำหนดชื่อ disk pool มีดังนี้
1. buffer
2. export
3. lookup
4. sasdataset
5. sort
6. syncsort
09 February 2009
DataStage: Oracle Date
กรณีดึงข้อมูลจาก column ที่มี data type เป็น date หากกำหนด data type ใน datastage เป็น date ตาม table จะมี error เกิดขึ้น
Error Message:
Oracle_Enterprise_0: Error when checking operator: When binding output interface field "HOMELOANDATE" to field "HOMELOANDATE": No default type conversion from type "timestamp" to type "date".
วิธีแก้ไข
1. กำหนด data type ใน oracle stage เป็น timestamp จากนั้นทำการแปลง data type จาก timestamp เป็น date โดยใช้ function TimestampToDate() ดังตัวอย่าง
หรือ
2. ตอน select ข้อมูลจาก Table ให้ทำการแปลง data โดยใช้ function TO_CHAR เพื่อเปลี่ยนข้อมูลเป็น character โดยใน datastage ให้กำหนด data type เป็น Varchar
ทั้ง 2 วิธีจะได้ output ออกมาเป็น format YYYY-MM-DD เหมือนกัน
Error Message:
Oracle_Enterprise_0: Error when checking operator: When binding output interface field "HOMELOANDATE" to field "HOMELOANDATE": No default type conversion from type "timestamp" to type "date".
วิธีแก้ไข
1. กำหนด data type ใน oracle stage เป็น timestamp จากนั้นทำการแปลง data type จาก timestamp เป็น date โดยใช้ function TimestampToDate() ดังตัวอย่าง
TimestampToDate(lnk_alscom_application.PERSONALLOANDATE)
หรือ
2. ตอน select ข้อมูลจาก Table ให้ทำการแปลง data โดยใช้ function TO_CHAR เพื่อเปลี่ยนข้อมูลเป็น character โดยใน datastage ให้กำหนด data type เป็น Varchar
TO_CHAR(HOMELOANDATE,'DD/MM/YYYY') as HOMELOANDATEจากนั้นค่อยแปลงข้อมูลกลับเป็น date อีกที โดยใช้ function StingToDate() ดังนี้
StringToDate(lnk_alscom_application.HOMELOANDATE,"%dd/%mm/%yyyy")โดยที %dd/%mm/%yyyy เป็น format ของ string
ทั้ง 2 วิธีจะได้ output ออกมาเป็น format YYYY-MM-DD เหมือนกัน
06 February 2009
DataStage: Find TOPn by Head Stage
นอกจากนี้การหา ค่าสูงสุด 20 อันดับแรกโดยใช้ Range Partition สามารถใช้อีกวิธีคือ การประยุกต์ใช้ Head Stage ดังนี้
จากรูป 1 เป็น Job ที่ใช้หาค่าสูงสุด 20 อันดับแรก หลังจากใช้ Sort Stage ที่ชื่อ srt_Data_In_Partition ในการเรยงลำดับข้อมูล CRN_BAL ในแต่ละ Partition จาก มากไปหาน้อยเรียบร้อยแล้ว จึงใช้ Head Stage ที่ชื่อ hd_Top_100 เลือกข้อมูล 100 อันดับแรก จากแต่ละ Partition โดย กำหนดค่า Property ใน Head Stage รูป 2) ดังนี้
- Rows
- Number of Rows (Per Partition) กำหนดเป็น 100 เพื่อเลือกข้อมูล 100 รายการแรก ของ ทุก Partition
- Partitions
- All Partitions กำหนดเป็น True เพื่อเลือกข้อมูล ทุก Partition
เมื่อผ่าน Head Stage ที่กล่าวมาจะทำให้ได้ ข้อมูลออกมา 400 รายการ แล้วจึง ใช้ Head Stage ชื่อ hd_Top_20_on_Partition_0 เพื่อเลือกข้อมูล เฉพาะ 20 รายการแรก โดยกำหนด ให้ Execution Mode เป็น Sequential เพื่อรวมข้อมูลที่ถูกแบ่งออกเป็น Partition เป็น File เดียว โดย กำหนดที่ Stage tab และ ไปที่ Advance Tab เลือกกำหนดค่า Execution Mode เป็น Sequential ที่ List Box ที่ชื่อ Execution Mode (รูป 3) จากนั้นจึง กำหนดค่า Number of Row (Per Partition) เป็น 20 และ All Partition เป็น True เพื่อเลือก 20 รายการแรก (รูป 4)
รูป 1
จากรูป 1 เป็น Job ที่ใช้หาค่าสูงสุด 20 อันดับแรก หลังจากใช้ Sort Stage ที่ชื่อ srt_Data_In_Partition ในการเรยงลำดับข้อมูล CRN_BAL ในแต่ละ Partition จาก มากไปหาน้อยเรียบร้อยแล้ว จึงใช้ Head Stage ที่ชื่อ hd_Top_100 เลือกข้อมูล 100 อันดับแรก จากแต่ละ Partition โดย กำหนดค่า Property ใน Head Stage รูป 2) ดังนี้
- Rows
- Number of Rows (Per Partition) กำหนดเป็น 100 เพื่อเลือกข้อมูล 100 รายการแรก ของ ทุก Partition
- Partitions
- All Partitions กำหนดเป็น True เพื่อเลือกข้อมูล ทุก Partition
รูป 2
เมื่อผ่าน Head Stage ที่กล่าวมาจะทำให้ได้ ข้อมูลออกมา 400 รายการ แล้วจึง ใช้ Head Stage ชื่อ hd_Top_20_on_Partition_0 เพื่อเลือกข้อมูล เฉพาะ 20 รายการแรก โดยกำหนด ให้ Execution Mode เป็น Sequential เพื่อรวมข้อมูลที่ถูกแบ่งออกเป็น Partition เป็น File เดียว โดย กำหนดที่ Stage tab และ ไปที่ Advance Tab เลือกกำหนดค่า Execution Mode เป็น Sequential ที่ List Box ที่ชื่อ Execution Mode (รูป 3) จากนั้นจึง กำหนดค่า Number of Row (Per Partition) เป็น 20 และ All Partition เป็น True เพื่อเลือก 20 รายการแรก (รูป 4)
รูป 3
รูป 4
05 February 2009
DataStage: Range Partition
Range Partition เป็นการแบ่งข้อมูล ในแต่ละ Partition แบบเท่าๆ กัน ซึ่งในแต่ละ Partition จะเก็บข้อมูล โดยแบ่งตาม Range ของข้อมูล ตาม Column ที่สนใจ 1 Column หรือ มากกว่า ขึ้นไป เพื่อใช้ประโยชน์สำหรับเก็บข้อมูลที่สัมพันธ์กันไว้ใน Partition เดียวกัน นอกจากนั้น ในแต่ละโหนด อาจมี Range ที่มีขอบเขตมากน้อยไม่เท่ากัน เพื่อเก็บข้อมูลในแต่ละโหนดให้มีจำนวนเท่าๆ กัน โดยส่วนใหญ่ Range Partition มักจะใช้ก่อนหน้าที่จะ ทำการเรียงข้อมูล
ในการใช้งาน Range Partition จำเป็นต้องมีการสร้าง Range Map ซึ้งทำได้โดย ใช้ Stage ชื่อ Write Range Map ซึ่งจะแสดงรายละเอียดในหัวข้อถัดไป
จากรูป 1 เป็นกราฟ แบบแท่ง แสดงแบ่ง Partition ตามข้อมูลอายุ โดยกราฟแต่ละแท่งคือจำนวน Partition และ Range ของแต่ละ Partition คือ ตัวเลขที่ปรากฎบนแท่งกราฟ ความสูลของกราฟ คือ จำนวนรายการข้อมูลที่บรรจุในแต่ละ Partition สังเกตุว่า Data Stage จะแบ่งข้อมูลให้เก็บในแต่ละ Partition ให้เท่าๆ กัน โดยมีขอบเขตของ Range ของข้อมูล ในแต่ละ Partition อาจไม่เท่ากัน โดยการคำนวณจะใช้ Range Map ในการคำนวณ
การใช้งาน Range Partition
จากรูปเป็นการรวม Sequential File 3 File เพื่อหาข้อมูลที่เก็บใน Column ชื่อ CRN_BAL สูงสุด 20 อันดับแรก ซึ่งก่อนหน้าจำทำการเรียงลำดับข้อมูล CRN_BAL โดย Sort Stage ที่ชื่อ srt_Data_In_Partition แล้วใช้ Head Stage ที่ชื่อ hd_Top_20_on_Partition_0 เพื่อเก็บเฉพาะข้อมูล 20 รายการแรก จะต้องทำการเปลี่ยนแปลง Partition ให้เป็นแบบ Range Partition โดยกำหนดที่ Transformer Stage ที่ชื่อ xfrm_Set_Range_Partition
จากที่กล่าวมา ในเมื่อมีการใช้ Partition แบบ Range Partition จะต้องมีการสร้าง Range Map ก่อน แล้วจึงนำ Range Map ที่ได้ ไปใช้เมื่อต้องการใช้ Partition แบบ Range Partition ดังนั้นก่อนหน้าที่จะสร้าง Job ดังรูป 1 ต้องสร้าง Job เพื่อสร้าง Range Map ดังต่อไปนี้
จากรูป 3 เป็น Job สำหรับสร้าง Range Map โดยนำ Sequential File ทั้ง 3 มารวมกัน และ เรียงลำดับข้อมูลใน CRN_BAL ด้วย Sort Stage ชื่อ srt_By_CRN_BAL เพื่อจำเรียงข้อมูลก่อน จะสร้าง Range Map ด้วย Write Range Map Stage ชื่อ Write_Range_Map
เนื่องจาก การสร้าง Range Map นั้น Data Stage จะอ่านข้อมูล CRN_BAL ทั้งหมดเพื่อการคำนวน Range ของข้อมูล ให้สัมพันธ์กับ จำนวน Partition ที่กำหนด ดังนั้นการเรียงลำดับจะช่วยให้ การสร้าง Range Map ทำได้เร็วขึ้น จึงควรมีการใช้ Sort Stage ก่อน Write Range Map Stage
จากรูป 4 เป็นการกำหนดค่าสำหรับ Write Range Map Stage ที่ Input Tab ไปที่ Property Tab กำหนด Option ต่างๆ ดังนี้
- File Update Mode กำหนดเป็น Overwrite เพื่ออนุญาติให้สามารถสร้าง Range Map ทับ File เดิมได้
- Key กำหนดเป็น CRN_BAL ซึ่งก็คือ Key Column ที่ต้องการสร้าง Range Map โดย กำหนด Option ย่อย ชื่อ Sort Order เป็น Descending เพื่อให้เรียงข้อมูลแบบมากไปหาน้อย
- Range Map File กำหนด Path และ ชื่อ File ที่ใช้เก็บ Range Map (รูป 5) โดยจะนำไปใช้เมื่อต้องการแบ่ง Partition แบบ Range Partition
การประยุกต์ใช้ Range Partition เพื่อหา Top20
เมื่อ Run Job ที่ใช้สร้าง Range Map เรียบร้อย จึงนำ Range Map (File และ Path ที่กำหนดเมื่อสร้าง Range Map ดังที่กล่าวมา) ดังต่อไปนี้
กำหนด รูป แบบ Partition ที่ Transformer Stage ที่ชื่อ xfrm_Set_Range_Partition ของ Job ในรูป 2 ที่ Inputs Tab และ ไปที่ Partitioning Tab กำหนด Property ต่างๆ ดังนี้
- Partition Type กำหนดเป็น Range เพื่อเลือก การแบ่ง Partition แบบ Range Partition
- Available กำหนดเป็น CRN_BAL (เมื่อ Click แล้ว จะไปปรากฏที่ Column ชื่อ Key ของตาราง Selected) เป็นการกำหนด Key Column โดย กำหนด Option ที่ตาราง Select เป็น Descending
หมายเหตุ : ในการเลือก Key Column และ Option จะต้องเลือกให้เหมือนกับ Range Map ที่ได้สร้างไว้
- File Name และ Part ของ Range Map โดย Click ที่ปุ่ม ที่ปรากฏด้านหลังของ List Box ที่ชื่อ Partition Type โดยเมื่อ Click แล้ว ช่องให้ระบุ Name และ Part ของ Range Map
หลังจากที่กำหนด Property ที่ Write Range Map Stage แล้วจึงทำการเรียงลำดับข้อมูลโดยใช้ Sort Stage ที่ชื่อ srt_Data_In_Partition โดยกำหนดให้ เรียงลำดับตาม ข้อมูลใน Column ที่ชื่อ CRN_BAL และ เรียงลำดับแบบ Descending แต่ต้องมีการกำหนด Partition Type ของ Sort Stage แบบ Same เมื่อให้ใช้ การแบ่ง Partition แบบเดียวกันกับ Transformer Stage ที่ส่งข้อมูลเข้ามา จะทำให้ข้อมูล CRN_BAL ที่มากที่สุดถูกเก็บไว้ที่ Partition ที่ 1
เมื่อได้ข้อมูลที่ถูกเรียงลำดับ CRN_BAL จากมากไปหาน้อย และ ข้อมูลดังกล่าว ถูกเก็บไว้ที่ Partition ที่ 1 ขั้นต่อไปเป้นการเลือกข้อมูล เฉพาะ 20 อันดับแรก จากรูป 7 เลือกใช้ Head Stage โดยกำหนด Property ตามขั้นตอนต่อไปนี้
เลือก Stage Tab และ ไปที่ Property Tab กำหนด Property ดังนี้
- Rows
- Number of Rows (Per Partition) กำหนดเป็น 20 เพื่อเลือกข้อมูล 20 รายการแรก ของ ทุก Partition
- Partitions
- All Partitions กำหนดเป็น False เพื่อเลือกข้อมูล เฉพาะ Partition ที่สนใจเท่านั้น
- Partition Number กำหนดเป็น 0 เพื่อเลือกข้อมูลจาก Partition ที่ 1 (เลขที่ ที่ใช้กำหนด Partition ที่สนใจ จะเริ่มจาก 0 คือ Partition ที่ 1 และ 1 คือ Partition ที่ 2 ต่อเนื่องกันไปตามจำนวน Partition)
ดังนั้นจากตัวอย่าง Range Partition สามารถใช้หาข้อมูล สูงสุด 20 อันดับ โดย ให้ Range Partition ช่วยในการรวบรวมข้อมูล สูงสุด ไปหา ต่ำสุด เก็บไว้ที่ Partition ที่ 1, 2, 3 … ไปจนถึง Partition สุดท้าย จากนั้นจึงใช้ Sort Stage ช่วยในการเรียงลำดับข้อมูลในแต่ละ Partition จากมากไปหาน้อย แล้วจึง ใช้ Head Stage เลือกข้อมูล 20 อันดับแรกจาก Partition ที่ 1 จึงทำให้ได้ข้อมูล 20 อันดับแรก ที่ถูกต้อง
ในการใช้งาน Range Partition จำเป็นต้องมีการสร้าง Range Map ซึ้งทำได้โดย ใช้ Stage ชื่อ Write Range Map ซึ่งจะแสดงรายละเอียดในหัวข้อถัดไป
รูป 1
จากรูป 1 เป็นกราฟ แบบแท่ง แสดงแบ่ง Partition ตามข้อมูลอายุ โดยกราฟแต่ละแท่งคือจำนวน Partition และ Range ของแต่ละ Partition คือ ตัวเลขที่ปรากฎบนแท่งกราฟ ความสูลของกราฟ คือ จำนวนรายการข้อมูลที่บรรจุในแต่ละ Partition สังเกตุว่า Data Stage จะแบ่งข้อมูลให้เก็บในแต่ละ Partition ให้เท่าๆ กัน โดยมีขอบเขตของ Range ของข้อมูล ในแต่ละ Partition อาจไม่เท่ากัน โดยการคำนวณจะใช้ Range Map ในการคำนวณ
การใช้งาน Range Partition
รูป 2
จากรูปเป็นการรวม Sequential File 3 File เพื่อหาข้อมูลที่เก็บใน Column ชื่อ CRN_BAL สูงสุด 20 อันดับแรก ซึ่งก่อนหน้าจำทำการเรียงลำดับข้อมูล CRN_BAL โดย Sort Stage ที่ชื่อ srt_Data_In_Partition แล้วใช้ Head Stage ที่ชื่อ hd_Top_20_on_Partition_0 เพื่อเก็บเฉพาะข้อมูล 20 รายการแรก จะต้องทำการเปลี่ยนแปลง Partition ให้เป็นแบบ Range Partition โดยกำหนดที่ Transformer Stage ที่ชื่อ xfrm_Set_Range_Partition
จากที่กล่าวมา ในเมื่อมีการใช้ Partition แบบ Range Partition จะต้องมีการสร้าง Range Map ก่อน แล้วจึงนำ Range Map ที่ได้ ไปใช้เมื่อต้องการใช้ Partition แบบ Range Partition ดังนั้นก่อนหน้าที่จะสร้าง Job ดังรูป 1 ต้องสร้าง Job เพื่อสร้าง Range Map ดังต่อไปนี้
รูป 3
จากรูป 3 เป็น Job สำหรับสร้าง Range Map โดยนำ Sequential File ทั้ง 3 มารวมกัน และ เรียงลำดับข้อมูลใน CRN_BAL ด้วย Sort Stage ชื่อ srt_By_CRN_BAL เพื่อจำเรียงข้อมูลก่อน จะสร้าง Range Map ด้วย Write Range Map Stage ชื่อ Write_Range_Map
เนื่องจาก การสร้าง Range Map นั้น Data Stage จะอ่านข้อมูล CRN_BAL ทั้งหมดเพื่อการคำนวน Range ของข้อมูล ให้สัมพันธ์กับ จำนวน Partition ที่กำหนด ดังนั้นการเรียงลำดับจะช่วยให้ การสร้าง Range Map ทำได้เร็วขึ้น จึงควรมีการใช้ Sort Stage ก่อน Write Range Map Stage
รูป 4
รูป 5
จากรูป 4 เป็นการกำหนดค่าสำหรับ Write Range Map Stage ที่ Input Tab ไปที่ Property Tab กำหนด Option ต่างๆ ดังนี้
- File Update Mode กำหนดเป็น Overwrite เพื่ออนุญาติให้สามารถสร้าง Range Map ทับ File เดิมได้
- Key กำหนดเป็น CRN_BAL ซึ่งก็คือ Key Column ที่ต้องการสร้าง Range Map โดย กำหนด Option ย่อย ชื่อ Sort Order เป็น Descending เพื่อให้เรียงข้อมูลแบบมากไปหาน้อย
- Range Map File กำหนด Path และ ชื่อ File ที่ใช้เก็บ Range Map (รูป 5) โดยจะนำไปใช้เมื่อต้องการแบ่ง Partition แบบ Range Partition
การประยุกต์ใช้ Range Partition เพื่อหา Top20
เมื่อ Run Job ที่ใช้สร้าง Range Map เรียบร้อย จึงนำ Range Map (File และ Path ที่กำหนดเมื่อสร้าง Range Map ดังที่กล่าวมา) ดังต่อไปนี้
รูป 6
กำหนด รูป แบบ Partition ที่ Transformer Stage ที่ชื่อ xfrm_Set_Range_Partition ของ Job ในรูป 2 ที่ Inputs Tab และ ไปที่ Partitioning Tab กำหนด Property ต่างๆ ดังนี้
- Partition Type กำหนดเป็น Range เพื่อเลือก การแบ่ง Partition แบบ Range Partition
- Available กำหนดเป็น CRN_BAL (เมื่อ Click แล้ว จะไปปรากฏที่ Column ชื่อ Key ของตาราง Selected) เป็นการกำหนด Key Column โดย กำหนด Option ที่ตาราง Select เป็น Descending
หมายเหตุ : ในการเลือก Key Column และ Option จะต้องเลือกให้เหมือนกับ Range Map ที่ได้สร้างไว้
- File Name และ Part ของ Range Map โดย Click ที่ปุ่ม ที่ปรากฏด้านหลังของ List Box ที่ชื่อ Partition Type โดยเมื่อ Click แล้ว ช่องให้ระบุ Name และ Part ของ Range Map
หลังจากที่กำหนด Property ที่ Write Range Map Stage แล้วจึงทำการเรียงลำดับข้อมูลโดยใช้ Sort Stage ที่ชื่อ srt_Data_In_Partition โดยกำหนดให้ เรียงลำดับตาม ข้อมูลใน Column ที่ชื่อ CRN_BAL และ เรียงลำดับแบบ Descending แต่ต้องมีการกำหนด Partition Type ของ Sort Stage แบบ Same เมื่อให้ใช้ การแบ่ง Partition แบบเดียวกันกับ Transformer Stage ที่ส่งข้อมูลเข้ามา จะทำให้ข้อมูล CRN_BAL ที่มากที่สุดถูกเก็บไว้ที่ Partition ที่ 1
รูป 7
เมื่อได้ข้อมูลที่ถูกเรียงลำดับ CRN_BAL จากมากไปหาน้อย และ ข้อมูลดังกล่าว ถูกเก็บไว้ที่ Partition ที่ 1 ขั้นต่อไปเป้นการเลือกข้อมูล เฉพาะ 20 อันดับแรก จากรูป 7 เลือกใช้ Head Stage โดยกำหนด Property ตามขั้นตอนต่อไปนี้
เลือก Stage Tab และ ไปที่ Property Tab กำหนด Property ดังนี้
- Rows
- Number of Rows (Per Partition) กำหนดเป็น 20 เพื่อเลือกข้อมูล 20 รายการแรก ของ ทุก Partition
- Partitions
- All Partitions กำหนดเป็น False เพื่อเลือกข้อมูล เฉพาะ Partition ที่สนใจเท่านั้น
- Partition Number กำหนดเป็น 0 เพื่อเลือกข้อมูลจาก Partition ที่ 1 (เลขที่ ที่ใช้กำหนด Partition ที่สนใจ จะเริ่มจาก 0 คือ Partition ที่ 1 และ 1 คือ Partition ที่ 2 ต่อเนื่องกันไปตามจำนวน Partition)
ดังนั้นจากตัวอย่าง Range Partition สามารถใช้หาข้อมูล สูงสุด 20 อันดับ โดย ให้ Range Partition ช่วยในการรวบรวมข้อมูล สูงสุด ไปหา ต่ำสุด เก็บไว้ที่ Partition ที่ 1, 2, 3 … ไปจนถึง Partition สุดท้าย จากนั้นจึงใช้ Sort Stage ช่วยในการเรียงลำดับข้อมูลในแต่ละ Partition จากมากไปหาน้อย แล้วจึง ใช้ Head Stage เลือกข้อมูล 20 อันดับแรกจาก Partition ที่ 1 จึงทำให้ได้ข้อมูล 20 อันดับแรก ที่ถูกต้อง
03 February 2009
IBM Technical Library View
เอกสารเกี่ยวกับ Informix Dynamic Server (IDS) และ DataStage เต็มเลย เอาตัวอย่างไปดูก่อน
Informix
ว่างๆ ก็เข้าไปอ่านได้
Informix
- Data Modeling with Rational Data Architect and Informix Dynamic Server
- Data Partitioning with Informix Dynamic Server
- Informix Bit-Map Pages: Are those bit map pages in the system any use to the DBA? By Oninit Tech Team ชื่อทีมเท่มากๆว่ะ
- Informix Dynamic Server bridges virtual and real worlds
- Customizing the Informix Dynamic Server for Your Environment
- IBM InfoSphere DataStage Data Flow and Job Design
- Custom combinable operators for WebSphere DataStage, Part 2:
ว่างๆ ก็เข้าไปอ่านได้
30 January 2009
Oracle: How to import data by Toad (2)
วิธี Import File บน Toad Oracle มี 2 วิธี
1. Import Table Data เป็นการ Import Text File
2. Import Utility Wizard เป็นการ Import Dump File สามารถเลือก Import แบบ Partial Table ได้ และ ตั้ง Schedule การ Import ได้
วิธีที่ 2 Import Utility Wizard เป็นการ Import Dump File สามารถเลือก Import แบบ Partial Table ได้ และ ตั้ง Schedule การ Import ได้
ขั้นตอน
2.1 Import Utility Wizard เข้า database > Import > Import Utility Wizard
2.2 เลือก Import tables แล้ว กด Next
2.3 ในช่อง From User ให้พิมพ์ชื่อ Schema table ที่มาจาก Source dump File เราจะทราบได้จาก File log ที่มาพร้อม กับ dump file ในที่นี้ dump file มาจาก OFSADBA ต่อจากนั้นให้กำหนด Schema ปลายทาง ในช่อง To User ต่อจากนั้นกด Next
2.4 ไม่ต้องเปลี่ยนแปลง Default กด Next
2.5 กำหนด Path ที่ dump file อยู่ โปรแกรมจะ auto generate log file และ parameter file ให้เอง ต่อจากนั้นกด Next
2.6 หาก ต้องการ Import เลยให้กด เลือก Import now แล้วกด Finish โปรแกรมจะทำการ Import dump file ให้ ในกรณีที่ต้องการ ตั้ง Schedule ให้เลือก Schedule to run later แล้วกด Next
2.8 ถ้าเลือก Schedule โปรแกรม จะ Pop up task name ขึ้นมาเพื่อให้ตั้งชื่อ schedule ในการ run สามารถสั่ง Run แบ ทุกวัน ,ทุกสัปดาห์ , ทุกเดือน หรือ Run ครั้งเดียวก็ได้
กำหนด เวลา และ วันที่ที่ต้องการ Run
กำหนด User name และ Password
กด Finish เพื่อเริ่มการ ตั้ง Schedule
ปัญหาที่พบในการ Import
1. กำหนดค่า From user ในข้อ 2.3 ผิด
2. ไม่มี Tablespace สำหรับ Table ที่ต้องการ dump ลงไป
1. Import Table Data เป็นการ Import Text File
2. Import Utility Wizard เป็นการ Import Dump File สามารถเลือก Import แบบ Partial Table ได้ และ ตั้ง Schedule การ Import ได้
วิธีที่ 2 Import Utility Wizard เป็นการ Import Dump File สามารถเลือก Import แบบ Partial Table ได้ และ ตั้ง Schedule การ Import ได้
ขั้นตอน
2.1 Import Utility Wizard เข้า database > Import > Import Utility Wizard
2.2 เลือก Import tables แล้ว กด Next
2.3 ในช่อง From User ให้พิมพ์ชื่อ Schema table ที่มาจาก Source dump File เราจะทราบได้จาก File log ที่มาพร้อม กับ dump file ในที่นี้ dump file มาจาก OFSADBA ต่อจากนั้นให้กำหนด Schema ปลายทาง ในช่อง To User ต่อจากนั้นกด Next
2.4 ไม่ต้องเปลี่ยนแปลง Default กด Next
2.5 กำหนด Path ที่ dump file อยู่ โปรแกรมจะ auto generate log file และ parameter file ให้เอง ต่อจากนั้นกด Next
2.6 หาก ต้องการ Import เลยให้กด เลือก Import now แล้วกด Finish โปรแกรมจะทำการ Import dump file ให้ ในกรณีที่ต้องการ ตั้ง Schedule ให้เลือก Schedule to run later แล้วกด Next
2.8 ถ้าเลือก Schedule โปรแกรม จะ Pop up task name ขึ้นมาเพื่อให้ตั้งชื่อ schedule ในการ run สามารถสั่ง Run แบ ทุกวัน ,ทุกสัปดาห์ , ทุกเดือน หรือ Run ครั้งเดียวก็ได้
กำหนด เวลา และ วันที่ที่ต้องการ Run
กำหนด User name และ Password
กด Finish เพื่อเริ่มการ ตั้ง Schedule
ปัญหาที่พบในการ Import
1. กำหนดค่า From user ในข้อ 2.3 ผิด
2. ไม่มี Tablespace สำหรับ Table ที่ต้องการ dump ลงไป
Oracle: How to import data by Toad (1)
วิธี Import File บน Toad Oracle มี 2 วิธี
1. Import Table Data เป็นการ Import Text File
2. Import Utility Wizard เป็นการ Import Dump File สามารถเลือก Import แบบ Partial Table ได้ และ ตั้ง Schedule การ Import ได้
1. Import Table Data เป็นการ Import Text File ที่มี Format เข้า Table
ขั้นตอน
1.1 เข้า menu database > Import > Import Table Data
1.2 เลือก ปลายทาง Schema ,Object Type และ Object Name ที่ต้องการจะ Import Data เข้า หลังจากนั้นกด Show data และ กด Next
1.3 โปรแกรมสามารถ เลือก Import จาก Text File หรือ Excel File ในที่นี้เราต้องการ Import File จาก Text เข้า Table ดังนั้นจึงต้องเลือก Import From Text File และเลือก Path ที่ File นั้นอยู่ ต่อจากนั้นกด Next
1.4 ระบุ Delimiter ที่คั่นระหว่างข้อมูล และกด Next
*** ข้อควรระวัง หากข้อมูลมี Format เป็น Unix ต้องทำการเปลี่ยน Record Separate เป็น LF ***
1.5 สามารถกำหนด จำนวน row ที่จะนำเข้าได้ ให้กำหนด First Rows เป็น 1 และ Last Rows:ไม่ต้องกำหนด ต่อจากนั้นกด Next
*** ข้อควรระวัง ในกรณี ที่ Column มี Column ที่เป็น Date ให้ตรวจสอบ Format และเลือก Format ให้ตรง
ใน Date Order ว่าเป็น YMD,DMY,MDY หากกำหนด Format Date ผิด ข้อมูลอาจผิดเพี้ยนได้
1.6 โปรแกรม จะ Preview Data เมื่อตรวจสอบแล้ว หากไม่พบปัญหา ให้กด Next
1.7 สามารถ กำหนด Primary Key ได้ หากไม่ต้องการกำหนดให้กด Next
1.8 โปรแกรม จะ แสดง Preview Results ให้ดู กด Next
1.9 กำหนด Commit Mode ให้เป็น Commit after each record แล้วกด execute
1.10 โปรแกรมจะแสดงผล การ Import กด OK เพื่ออกจาก การ Import data
1. Import Table Data เป็นการ Import Text File
2. Import Utility Wizard เป็นการ Import Dump File สามารถเลือก Import แบบ Partial Table ได้ และ ตั้ง Schedule การ Import ได้
1. Import Table Data เป็นการ Import Text File ที่มี Format เข้า Table
ขั้นตอน
1.1 เข้า menu database > Import > Import Table Data
1.2 เลือก ปลายทาง Schema ,Object Type และ Object Name ที่ต้องการจะ Import Data เข้า หลังจากนั้นกด Show data และ กด Next
1.3 โปรแกรมสามารถ เลือก Import จาก Text File หรือ Excel File ในที่นี้เราต้องการ Import File จาก Text เข้า Table ดังนั้นจึงต้องเลือก Import From Text File และเลือก Path ที่ File นั้นอยู่ ต่อจากนั้นกด Next
1.4 ระบุ Delimiter ที่คั่นระหว่างข้อมูล และกด Next
*** ข้อควรระวัง หากข้อมูลมี Format เป็น Unix ต้องทำการเปลี่ยน Record Separate เป็น LF ***
1.5 สามารถกำหนด จำนวน row ที่จะนำเข้าได้ ให้กำหนด First Rows เป็น 1 และ Last Rows:ไม่ต้องกำหนด ต่อจากนั้นกด Next
*** ข้อควรระวัง ในกรณี ที่ Column มี Column ที่เป็น Date ให้ตรวจสอบ Format และเลือก Format ให้ตรง
ใน Date Order ว่าเป็น YMD,DMY,MDY หากกำหนด Format Date ผิด ข้อมูลอาจผิดเพี้ยนได้
1.6 โปรแกรม จะ Preview Data เมื่อตรวจสอบแล้ว หากไม่พบปัญหา ให้กด Next
1.7 สามารถ กำหนด Primary Key ได้ หากไม่ต้องการกำหนดให้กด Next
1.8 โปรแกรม จะ แสดง Preview Results ให้ดู กด Next
1.9 กำหนด Commit Mode ให้เป็น Commit after each record แล้วกด execute
1.10 โปรแกรมจะแสดงผล การ Import กด OK เพื่ออกจาก การ Import data
Subscribe to:
Posts (Atom)