مقدمه
این مقاله نشان میدهد که چگونه جداول خارجی برای خواندن دادههای CLOB و BLOB استفاده میشوند و عملیات بارگذاری PARALLEL مقادیر زیادی از داده را ممکن میسازند.
جداول خارجی شامل LOB ها در اوراکل
آماده کردن محیط بررسی:
Multiple CLOB Files:
برای این کار یک oracle Directory ایجاد می کنیم
create or replace directory temp_dir aS ‘/tmp/’;
یکسری فایل از نوع های زیر ایجاد می کنیم و در مسیر فوق قرار می دیم
فایل lob_test_data.txt را که شامل محتوی زیر می باشد را ایجاد می کنیم
1,one,01-JAN-2006,clob_test1.txt,blob_test1.doc
2,two,02-JAN-2006,clob_test2.txt,blob_test2.doc
اکنون همه داده ها را داریم، به یک جدول خارجی نیاز داریم تا همه آنها را جمع آوری کنیم.
drop table lob_tab;
create table lob_tab (
number_content number(10),
varchar2_content varchar2(100),
date_content date,
clob_content clob,
blob_content blob
)
organization external
(
type oracle_loader
default directory temp_dir
access parameters
(
records delimited by newline
badfile temp_dir:’lob_tab_%a_%p.bad’
logfile temp_dir:’lob_tab_%a_%p.log’
fields terminated by ‘,’
missing field values are null
(
number_content char(10),
varchar2_content char(100),
date_content char(11) date_format date mask “DD-MON-YYYY”,
clob_filename char(100),
blob_filename char(100)
)
column transforms (clob_content from lobfile (clob_filename) from (temp_dir) clob,
blob_content from lobfile (blob_filename) from (temp_dir) blob)
)
location (‘lob_test_data.txt’)
)
parallel 2
reject limit unlimited;
Translation is too long to be saved
در تعریف جدول خارجی باید به چند نکته توجه کرد:
کوئری زیر خروجی جدول را به ما نشان می دهد.
column varchar2_content format a16
column date_content format a12
column clob_content format a20
select number_content,
varchar2_content,
to_char(date_content, ‘DD-MON-YYYY’) as date_content,
clob_content,
dbms_lob.getlength(blob_content) as blob_length
from lob_tab;
NUMBER_CONTENT VARCHAR2_CONTENT DATE_CONTENT CLOB_CONTENT BLOB_LENGTH
————– —————- ———— ——————– ———–
1 one 01-JAN-2006 This is a clob test1 24064
2 two 02-JAN-2006 This is a clob test2 24064
2 rows selected.
SQL>
Inline CLOB Files:
برای این کار یک oracle Directory ایجاد می کنیم
create or replace directory temp_dir as ‘/tmp/’;
یک فایل بسازید که برای نمونه در آن رکوردهایی با دو ستون قرار گرفته باشد. ستون اول ID و ستون دوم رشته ای بیش از 4000 کاراکتر باشه. ما نام این فایل را inline_clob_test1.txt قرار می دهیم.
drop table lob_tab;
create table lob_tab (
id number,
clob_content clob
)
organization external
(
type oracle_loader
default directory temp_dir
access parameters
(
records delimited by newline
badfile temp_dir:’lob_tab_%a_%p.bad’
logfile temp_dir:’lob_tab_%a_%p.log’
fields terminated by ‘,’ optionally enclosed by ‘”‘
missing field values are null
(
id,
clob_content char(1000000)
)
)
location (‘inline_clob_test1.txt’)
)
parallel 2
reject limit unlimited;
در ادامه بر روی جدول کوئری را اجرا می کنیم
select id, dbms_lob.getlength(clob_content) as clob_length
from lob_tab
order by id;
ID CLOB_LENGTH
———- ———–
1 9000
2 9000
SQL>