Pages

1/06/2011

การโหลดข้อมูลจำนวนมาก เข้า Oracle โดยใช้ Oracle Bulk Loader

หลักการ
SQL*Loader คือเครื่องมือหนึ่งที่ใช้ในการจัดการข้อมูลจาก source file ไปยัง Oracle โดยจะประกอบด้วยสองไฟล์ ไฟล์แรกคือ Control file เอาไว้ระบุว่าจะ

จัดการไฟล์ที่ไหน อย่างไร และ Data File ซึ่งจะเป็นไฟล์ข้อมูลที่ต้องการโหลด

การสร้าง Control File Syntax จะสร้างเป็น "ชื่อไฟล์.ctl"

LOAD DATA
INFILE <dataFile>
APPEND INTO TABLE <tableName>
FIELDS TERMINATED BY '<separator>'
(<list of all attribute names to load>)

<dataFile> เป็นชื่อไฟล์ของข้อมูล ส่วนใหญ่จะเป็นไฟล์ฟอร์แมท .txt,.dat * กรณีที่ไฟล์อยู่ต่างที่ สามารถอ้าง path เต็มได้ เช่น c:/somewhere/example.dat
<tableName> ชื่อตารางที่ต้องการบันทึกข้อมูลลง
** APPEND เพิ่มในกรณีที่ตารางไม่ว่างมีข้อมูลเก่าแล้ว แต่ถ้าตารางเปล่า ไม่ต้องมี
<separator> ระบุตัวคั่นระหว่างข้อมูล สามารถใช้สัญลักษณ์ได้ เช่น | หรือสัญลักษณ์ที่ไม่มีในข้อมูล
<list of all attribute names to load> List ของฟิวล์ที่ต้องการใส่ข้อมูลที่ตรงกันกับตาราง <tableName> และตรงกับข้อมูลของไฟล์ข้อมูล

ตัวอย่าง
LOAD DATA
INFILE test.dat
INTO TABLE test
FIELDS TERMINATED BY '|'
(i, s)

ตัวอย่างการสร้างไฟล์ Data File
กรณีนี้มีสองฟิวล์ และคั่นด้วยสัญลักษณ์ | แบบ textfile ทั่วๆไป
1|foo
2|bar
3| baz

กรณีที่มีหลายฟิวล์ และคั่นด้วยสัญลักษณ์ , แบบ csv
10001,"Scott Tiger", 1000, 40
10002,"Frank Naude", 500, 20

** การเรียกการโหลดข้อมูล สามารถใช้งานบน Dos-Mode ( UNIX-level command ) หรือ sqlplus
syntax
sqlldr <yourName> control=<ctlFile> log=<logFile> bad=<badFile>

ตัวอย่าง
sqlldr username@server/password control=loader.ctl log=log.txt

เทคนิคเพิ่มเติม
กรณีรวมไฟล์ Contral กับ Data ไว้ในไฟล์เดียวกัน ใช้สัญลักษณ * เข้ามาแทนที่ ดังตัวอย่าง

LOAD DATA
INFILE *
INTO TABLE test
FIELDS TERMINATED BY '|'
(i, s)
BEGINDATA
1|foo
2|bar
3| baz


กรณีที่โหลดข้อมูลที่เป็น Date ลงตาราง

LOAD DATA
INFILE *
INTO TABLE foo
FIELDS TERMINATED BY '|'
(i, d DATE 'dd-mm-yyyy')
BEGINDATA
1|01-01-1990
2|4-1-1998

อ้างอิงเพิ่มเติม

No comments:

Post a Comment