Purpose
External Tables นั้นก็จะมีลักษณะเหมือนๆ
กันกับ SQL Tables ที่เราใช้งานกันทั่วไปแตกต่างกันเพียงแต่ว่าข้อมูลที่เราจะใช้งานนั้นจะเป็นในลักษณะอ่านเพียงอย่างเดียว
(Read Only) และตัวข้อมูลจริงๆ ก็อยู่นอก Database ซึ่งก็คืออยู่ที่ระดับ
file System แทน
ในการใช้งาน External Table เราสามารถดึงข้อมูลได้โดยตรง
รวมถึงการทำงานในลักษณะ Parallel ได้โดยใช้ คำสั่ง SQL ส่วนในการทำ
DML และการสร้าง Index นั้นยังไม่สามารถทำได้
Metadata สำหรับ external Table นั้นจะถูกสร้างได้
คำสั่ง CREATE TABLE ... ORGANIZATION EXTERNAL
Prerequistires
Oracle9i Database (9.0.1)
Step-by-Step Example:
Prepare Data Source
เริ่มต้นด้วยการตรวจสอบ Directory
ที่เราเก็บข้อมูลไว้ต้องเป็น Directory ที่ Oracle Process มีสิทธิในการอ่าน,
เขียน
| $
pwd
/d1/o9i/mydemo/data
$
ls -al
total
6
drwxr-xr-x
2 o9i dba 512 Jun 23 08:47 .
drwxr-xr-x
3 o9i dba 512 Jun 23 08:47 ..
-rw-r--r--
1 o9i dba 186 Jun 23 08:48 Employees.csv
$
$
cat Employees.csv
20015,Teddy,Graham,teddy@exzilla.net
20011,Spider,webb,spidix@exzilla.net
20012,Kouprey,Rex,kouprex@exzilla.net
20016,Fuju,Graham,fuju@exzilla.net
20018,Bruce,Archer,barcher@exzilla.net
$ |
CREATE ANY DIRECTORY system Privilege
ทำการ Grant สิทธิ CREATE
ANY DIRECTORY system Privilege ให้กับ User ที่ต้องการที่ต้องการใช้งาน
| SQL>
connect system/manager
Connected.
SQL>
grant CREATE ANY DIRECTORY to scott;
Grant
succeeded.
SQL> |
Create Directory Ojbect for a directory
on the server's file system where external table data are located
ในขั้นตอนนี้ เราก็ทำการ
CREATE directory object ที่มีการอ้างถึงตำแหน่งข้อมูลที่เราจัดเก็บอยู่
| SQL>
connect scott/tiger
Connected.
SQL>
create or replace directory demo_dir as '/d1/o9i/mydemo/data';
Directory
created.
SQL>
select owner,object_name,object_type from all_objects
2 where object_name = 'DEMO_DIR';
OWNER
OBJECT_NAME OBJECT_TYPE
-----------
------------------- ------------------
SYS
DEMO_DIR DIRECTORY
SQL> |
Directory Object ที่ถูกสร้างขั้นมานั้นจะใช้
namespace ที่เดียวกัน ( A single namespace) ซึ่งก็หมายความว่า
Directory Object ไม่ได้มีเจ้าของที่ที่แยกกันแต่ละ Schema จะเห็นได้ว่าจากเมื่อเราลอง
select ข้อมูลจาก Data Dictionary ดูก็จะเห็นได้ว่า Directory Object
ที่ Scott เป็นคนสร้างนั้นเป็น SYS
grant read, write on directory
<demo_dir> to <user>;
โดยปกติ user ที่ทำการสร้าง
Directory Object จะมีสิทธิในการ read,write กับ Directory Object
นั้นโดอัตโนมัติ แต่ถ้าต้องการให้ user อื่นมีสิทธิเช่นกันก็ต้อง
Grant สิทธิในการในงาน Directory Object นั้น ๆ ให้กับ User ที่ต้องการ
| SQL>
grant read,write on directory external_dir to teddy;
Grant
succeeded. |
CREATE EXTERNAL TABLE
| SQL> connect scott/tiger
Connected.
SQL> drop table employees_ext;
Table dropped.
SQL> @c2.sql
Table created.
SQL> l
1 CREATE table employees_ext
(
2 employee_id NUMBER(5),
3 first_name varchar2(30),
4 last_name varchar2(30),
5 email varchar2(30)
6 )
7 ORGANIZATION EXTERNAL --
External Table
8 (
9 TYPE oracle_loader -- Access
Driver
10 DEFAULT DIRECTORY demo_dir
-- Files Directory
11 ACCESS PARAMETERS -- Similar
to SQL*Loader
12 (
13 RECORDS DELIMITED BY NEWLINE
14 BADFILE 'bad_sample'
15 LOGFILE 'log_sample'
16 FIELDS TERMINATED BY ','
17 MISSING FIELD VALUES ARE
NULL
18 )
19 LOCATION ('Employees.csv')
20 )
21 PARALLEL 1 -- Independent
from the number of files
22* REJECT LIMIT UNLIMITED
SQL> |
Query data from external table
| SQL>
select * from employees_ext;
EMPLOYEE_ID
FIRST_NAME LAST_NAME EMAIL
-----------
---------- --------- ------------
20015 Teddy Graham teddy@exzilla.net
20011 Spider webb spidix@exzilla.net
20012 Kouprey Rex kouprex@exzilla.net
20016 Fuju Graham fuju@exzilla.net
20018 Bruce Archer barcher@exzilla.net
SQL > |
Note:
Data Dictionary for External
Tables
- DBA_EXTERNAL_TABLES
- DBA_EXTERNAL_LOCATIONS
Complete Sample code:
References:
1.Oracle9i SQL Reference
Release 1 (9.0.1) Part Number A90125-01
More Information:
http://otn.oracle.com/
Keywords:
Externale table, 9.0.1,
9i
|