Hãy để tôi cho bạn xem một ví dụ về tệp điều khiển mà tôi sử dụng để tải một tệp rất lớn (120 triệu bản ghi mỗi ngày)
OPTIONS (SKIP=0, ERRORS=500, PARALLEL=TRUE, MULTITHREADING=TRUE, DIRECT=TRUE, SILENT=(ALL))
UNRECOVERABLE
LOAD DATA
CHARACTERSET WE8ISO8859P1
INFILE '/path_to_your_file/name_of_the_file.txt'
BADFILE '/path_to_your_file/name_of_the_file.bad'
DISCARDFILE '/path_to_your_file/name_of_the_file.dsc'
APPEND
INTO TABLE yourtablename
TRAILING NULLCOLS
(
COLUMN1 POSITION(1:4) CHAR
,COLUMN2 POSITION(5:8) CHAR
,COLUMN3 POSITION(9:11) CHAR
,COLUMN4 POSITION(12:18) CHAR
....
....)
Một số cân nhắc
- Việc tải theo vị trí luôn nhanh hơn so với sử dụng dấu phân cách
- Sử dụng các tùy chọn của
PARALLEL
,MULTITHREADING
vàDIRECT
để tối ưu hóa hiệu suất tải. -
UNRECOVERABLE
Đây cũng là một lời khuyên hữu ích nếu bạn luôn có tệp trong trường hợp cần khôi phục cơ sở dữ liệu, bạn cần tải lại dữ liệu. - Sử dụng bộ ký tự thích hợp.
- Mệnh đề TRAILING NULLCOLS yêu cầu SQL * Loader xử lý bất kỳ cột nào được định vị tương đối không có trong bản ghi là cột rỗng.
- Vị trí có nghĩa là mỗi hàng chứa dữ liệu không có bất kỳ dấu phân cách nào, vì vậy bạn biết vị trí của từng trường trong bảng theo độ dài.
AAAAABBBBBBCCCCC19828733UUUU
- Nếu tệp txt hoặc csv của bạn có dấu phân tách trường, giả sử là dấu chấm phẩy, thì bạn cần sử dụng
FIELDS DELIMITED BY
Điều này được lưu trữ trong một tệp điều khiển, thường là một tệp văn bản có phần mở rộng là ctl. Sau đó, bạn gọi từ dòng lệnh
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl