ORACLE9I中外部表的使用

原创 2003年07月22日 13:35:00
ORACLE9I中外部表的使用

说明:
这个帖子讲述Oracle9I外部表(External Table)的初级使用。


什么是外部表?

External table和正规的表很相似,具体的定义可以参见《Oracle概念手册》,以下的几点需要注意:

   >创建的语法类似于: "CREATE TABLE ... ORGANIZATION EXTERNAL"
   >数据在数据库的外部组织,是操作系统文件。
   >操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。       
   >数据是只读的。(外部表相当于一个只读的虚表)
   >不可以在上面运行任何DML操作,不可以创建索引。   
   >可以查询操作和连接。可以并行操作。

例子:

假定有如下的两个数据文件:

1 平面文件数据的描述
  假设如下的两个平面文件
  1.dat:
 
   7369,SMITH,CLERK,7902,17-DEC-80,100,0,20
   7499,ALLEN,SALESMAN,7698,20-FEB-81,250,0,30
   7521,WARD,SALESMAN,7698,22-FEB-81,450,0,30
   7566,JONES,MANAGER,7839,02-APR-81,1150,0,20


  2.dat:
                                 
   7654,MARTIN,SALESMAN,7698,28-SEP-81,1250,0,30
   7698,BLAKE,MANAGER,7839,01-MAY-81,1550,0,30
   7934,MILLER,CLERK,7782,23-JAN-82,3500,0,10


   (要有对操作系统中该目录的读写权限。)
    
2 创建一个逻辑目录并进行适当授权:
  
 
     SQL> CREATE DIRECTORY TESTDIR AS 'D:/TEMP/';
     目录已创建。

     SQL> GRANT READ ON DIRECTORY TESTDIR TO DEMO;
     授权成功。

     SQL> GRANT WRITE ON DIRECTORY TESTDIR TO DEMO;
     授权成功。


注意:创建完毕逻辑目录之后要把平面文件拷贝到该目录下,另外还要注意文件名字不要写错。

3 创建外部表
 
SQL> ED
已写入文件 afiedt.buf

  1 CREATE TABLE DEMO.EXT
  2 (emp_id number(4),
  3 ename varchar2(12),
  4 job varchar2(12) ,
  5 mgr_id number(4) ,
  6 hiredate date,
  7 salary number(8),
  8 comm number(8),
  9 dept_id number(2))
10 ORGANIZATION EXTERNAL
11 (TYPE ORACLE_LOADER
12 DEFAULT DIRECTORY TESTDIR
13 ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE
14 FIELDS TERMINATED BY ',')
15* LOCATION('1.DAT','2.DAT'))
SQL> /

表已创建。


4 进行Select选择操作看看是否正确:
      
 
      SQL> select * from DEMO.EXT;

      EMP_ID ENAME JOB MGR_ID HIREDATE SALARY COMM DEPT_ID
      ------ ------- ---------- ------- --------- -------- ---------- -------
        7369 SMITH CLERK 7902 17-DEC-80 100 0 20
        7499 ALLEN SALESMAN 7698 20-FEB-81 250 0 30
        7521 WARD SALESMAN 7698 22-FEB-81 450 0 30
        7566 JONES MANAGER 7839 02-APR-81 1150 0 20
        7654 MARTIN SALESMAN 7698 28-SEP-81 1250 0 30
        7698 BLAKE MANAGER 7839 01-MAY-81 1550 0 30
        7934 MILLER CLERK 7782 23-JAN-82 3500 0 10



   如果要得到外部表的有关信息:
 

SQL> DESC DBA_EXTERNAL_TABLES;

名称
-----------------------------------------------------------------
OWNER
TABLE_NAME
TYPE_OWNER
TYPE_NAME
DEFAULT_DIRECTORY_OWNER
DEFAULT_DIRECTORY_NAME
REJECT_LIMIT
ACCESS_TYPE
ACCESS_PARAMETERS

SQL> SELECT OWNER,TABLE_NAME,DEFAULT_DIRECTORY_NAME,ACCESS_PARAMETERS
  2 FROM
  3 DBA_EXTERNAL_TABLES;

OWNER TABLE_NAME DEFAULT_DIRECTORY_NAME ACCESS_PARAMETERS
------------------ ------------------------------ ------------------------------
DEMO EXT TESTDIR RECORDS DELIMITED BY NEWLINE
                                                                 FIELDS TERMINATED BY ','

如果DBA想要知道平面文件的位置,使用如下的查询:
 

SQL> desc DBA_EXTERNAL_LOCATIONS;
名称
-----------------------------------------
OWNER
TABLE_NAME
LOCATION
DIRECTORY_OWNER
DIRECTORY_NAME

SQL> select * from DBA_EXTERNAL_LOCATIONS;

OWNER TABLE_NAME LOCATION DIR DIRECTORY_NAME
------------------------------------------------------------------------
DEMO EXT 1.DAT SYS TESTDIR
DEMO EXT 2.DAT SYS TESTDIR


参考文档:Oracle9i Database Administration Guide


PostgreSQL外部表应用

Postgresql连接查询 MS SQL Server简介PostgreSQL从9.x开始支持所谓的外表的功能,就是在PostgreSQL中通过安装一些扩展再进行一些配置可以在本地建立一个外表映射到...
  • sunbocong
  • sunbocong
  • 2017年09月06日 16:36
  • 465

Hive中管理表(内部表)和外部表的区别是什么,及分区表使用场景

Hive中管理表(内部表)和外部表的区别是什么,及分区表使用场景? ⑴区别: ①Hive创建内部表时(默认创建内部表),会将数据移动到数据仓库指向的路径;创建外部表(需要加关键字exter...
  • qq_15103205
  • qq_15103205
  • 2017年06月08日 13:27
  • 3319

oracle 外部表使用详解

外部表,相对于数据库内部表来说的,意思是将操作系统文件作为一个数据库,数据从文件而来。我把它理解成类似指针的东西,告诉用户,这个表的数据是从哪些文件来的。外部表的创建,这里写的比网上其他介绍复杂许多,...
  • Mr_Errol
  • Mr_Errol
  • 2016年08月03日 10:06
  • 3029

Hadoop 从零开始学习系列-hive与hbase外部关联表建立及数据导入

由于项目中要把统计的结果提供给外部使用,由于hive查询启动mapreduce等等太慢,所以考虑把数据导入到hbase,用hbase实现。 其中调研过用bulkload来把数据导入hbase。这个下...
  • jdzms23
  • jdzms23
  • 2015年04月16日 17:19
  • 2554

hive建hbase外部表,内部表的问题

对于4000个字符的配置单元存储区中的SERDE_PARAMS表中的PARAM_VALUE字段的字符限制是此问题的根本原因。此限制可防止Hive创建高列数的表,最终导致desc或select * fr...
  • gyxinguan
  • gyxinguan
  • 2017年11月17日 11:07
  • 170

Oracle外部表详解(原创)

Oracle外部表详解(原创) 外部表概述 外部表只能在Oracle 9i之后来使用。简单地说,外部表,是指不存在于数据库中的表。通过向Oracle提供描述外部表的元数据,我...
  • snow1wolf
  • snow1wolf
  • 2014年10月15日 19:25
  • 762

Oracle读取外部表注意事项

Oracle可以通过创建外部表以只读的方式来查询文件数据的内容,这对于文件数据的分析非常有用。 示例代码: CREATE OR REPLACE DIRECTORY admin_dat_di...
  • hpdlzu80100
  • hpdlzu80100
  • 2016年09月19日 23:28
  • 772

GP中外部表例子

创建外部表注意事项: 同一台机器上的外部表对应的gpfdist端口号尽量错开,从8081-8088 gpfdist -p 8081 -d /ftp2/interface/data/GPload_h...
  • learning_oracle_lh
  • learning_oracle_lh
  • 2016年01月08日 18:39
  • 1270

Hive内部表和外部表的区别详解

Hive内部表和外部表的区别
  • qq_36743482
  • qq_36743482
  • 2017年10月30日 15:37
  • 283

转:韩顺平玩转Oracle9i

 1. Oracle认证和安装,与其他数据库比较 Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,...
  • songjuntao8
  • songjuntao8
  • 2014年12月16日 22:31
  • 777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE9I中外部表的使用
举报原因:
原因补充:

(最多只允许输入30个字)