`
380071587
  • 浏览: 445981 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

外部表(EXTERNAL TABLE)

 
阅读更多

来自:http://blog.itpub.net/post/12524/461332


external table可以实现将flat file的内容不用真正装载到数据库,就跟使用数据库内部的表一样来使用。只是不能对这种类型的表进行DML和INDEX操作。这样方便我们在flat file和数据库表之间load和unload数据。
这个功能在oracle 9i上就实现了,当时仅仅使用oracle_loader引擎来从外部读取数据,到了10G增加了另一种方式ORACLE_DATAPUMP,既可以读这种格式的外部文件,也可以将内部表的数据保存为外部文件。
创建external table:
假设我们有下面内容的flat file:
360,Jane,Janus,ST_CLERK,121,17-MAY-2001,3000,0,50,jjanus
361,Mark,Jasper,SA_REP,145,17-MAY-2001,8000,.1,80,mjasper
362,Brenda,Starr,AD_ASST,200,17-MAY-2001,5500,0,10,bstarr
363,Alex,Alda,AC_MGR,145,17-MAY-2001,9000,.15,80,aalda
建立目录并且赋予test对这个目录的读写权限。
SQL> conn /as sysdba
Connected
SQL> create or replace directory test_dir as '/export/home/oracle';
Directory created.
SQL> grant read,write on directory test_dir to test;
Grant succeeded.
创建exteral table:
SQL> conn test/xxxx
Connected.
SQL> create table test_ext
2 (employee_id NUMBER(4),
3 first_name VARCHAR2(20),
4 last_name VARCHAR2(25),
5 job_id VARCHAR2(10),
6 manager_id NUMBER(4),
7 hire_date DATE,
8 salary NUMBER(8,2),
9 commission_pct NUMBER(2,2),
10 department_id NUMBER(4),
11 email VARCHAR2(25)
12 )
13 ORGANIZATION EXTERNAL
14 (TYPE ORACLE_LOADER
15 DEFAULT DIRECTORY test_dir
16 ACCESS PARAMETERS
17 (
18 records delimited by newline
19 fields terminated by ','
20 )
21 LOCATION ('test.dat'))
22 REJECT LIMIT UNLIMITED;
Table created.
SQL> select * from test_ext;
EMPLOYEE_ID FIRST_NAME LAST_NAME JOB_ID MANAGER_ID
----------- -------------------- ------------------------- ---------- ----------
HIRE_DATE SALARY COMMISSION_PCT DEPARTMENT_ID EMAIL
------------ ---------- -------------- ------------- -------------------------
360 Jane Janus ST_CLERK 121
17-MAY-01 3000 0 50 jjanus
361 Mark Jasper SA_REP 145
17-MAY-01 8000 .1 80 mjasper
362 Brenda Starr AD_ASST 200
17-MAY-01 5500 0 10 bstarr

EMPLOYEE_ID FIRST_NAME LAST_NAME JOB_ID MANAGER_ID
----------- -------------------- ------------------------- ---------- ----------
HIRE_DATE SALARY COMMISSION_PCT DEPARTMENT_ID EMAIL
------------ ---------- -------------- ------------- -------------------------
363 Alex Alda AC_MGR 145
17-MAY-01 9000 .15 80 aalda
在创建external表时不做检查的,如果有问题,在查询时报错,同时查日志确认,默认会在test_dir放置bad,log等文件,通过这些文件能够知道如何工作及其有什么问题。
到10G我们可以将表的数据unload成oracle_datadump格式的文件。方便我们数据传送。
将内部的表保存到外部文件tet_dir.dmp,格式是oracle_datapump.
1 create table test_ext1
2 organization external
3 (type oracle_datapump
4 default directory test_dir
5 location('test_dir.dmp')
6* ) as select * from test_ext
SQL> /
Table created.
这样我们就生成一个oracle_datapump格式的文件,然后将这个文件传送到本地或其他数据库,用下面格式导入即可:
1 create table imp_test_ext1
2 (employee_id NUMBER(4),
3 first_name VARCHAR2(20),
4 last_name VARCHAR2(25),
5 job_id VARCHAR2(10),
6 manager_id NUMBER(4),
7 hire_date DATE,
8 salary NUMBER(8,2),
9 commission_pct NUMBER(2,2),
10 department_id NUMBER(4),
11 email VARCHAR2(25)
12 )
13 ORGANIZATION EXTERNAL
14 (TYPE ORACLE_DATAPUMP
15 DEFAULT DIRECTORY test_dir
16* LOCATION ('test_dir.dmp'))
SQL> /
Table created.
SQL> select * from imp_test_ext1;
EMPLOYEE_ID FIRST_NAME LAST_NAME JOB_ID MANAGER_ID
----------- -------------------- ------------------------- ---------- ----------
HIRE_DATE SALARY COMMISSION_PCT DEPARTMENT_ID EMAIL
------------ ---------- -------------- ------------- -------------------------
360 Jane Janus ST_CLERK 121
17-MAY-01 3000 0 50 jjanus
361 Mark Jasper SA_REP 145
17-MAY-01 8000 .1 80 mjasper
362 Brenda Starr AD_ASST 200
17-MAY-01 5500 0 10 bstarr

EMPLOYEE_ID FIRST_NAME LAST_NAME JOB_ID MANAGER_ID
----------- -------------------- ------------------------- ---------- ----------
HIRE_DATE SALARY COMMISSION_PCT DEPARTMENT_ID EMAIL
------------ ---------- -------------- ------------- -------------------------
363 Alex Alda AC_MGR 145
17-MAY-01 9000 .15 80 aalda
这里我们发现使用oracle_datapump比oracle_loader语法要简单很多,格式说明是内包含的。



转摘一篇好文章:http://blog.chinaunix.net/uid-10697776-id-2935685.html

分类:

定义

Externaltablesaccessdatainexternalsourcesasifitwereinatableinthedatabase.

YoucanconnecttothedatabaseandcreatemetadatafortheexternaltableusingDDL.

TheDDLforanexternaltableconsistsoftwoparts:onepartthatdescribestheOracle

columntypes,andanotherpart(theaccessparameters)thatdescribesthemappingof

theexternaldatatotheOracledatacolumns.

u创建的语法类似于:"CREATETABLE...ORGANIZATIONEXTERNAL"

u数据在数据库的外部组织,是操作系统文件。

u操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。

u数据是只读的。(外部表相当于一个只读的虚表)

u不可以在上面运行任何DML操作不可以创建索引

u可以查询操作和连接。可以并行操作。

建立外部表的步骤

1、创建以“,”分隔的文件“TestTable.csv”至“D:\Test

2、创建一个Directory:

createdirectoryTestTable_diras'D:\Test';

3、创建一个外部表:

createtableTestTable(

IDvarchar2(10),

NAMEvarchar2(20),

TYPEvarchar2(20),

AGEvarchar2(20))

organizationexternal(

typeoracle_loader

defaultdirectoryTestTable_dir

accessparameters(fieldsterminatedby',')

location('TestTable.csv')

);

各类参数说明

1、typeoracle_loader

数据转换驱动器,oracle_loader为默认,也可以改换其他

2、defaultdirectoryTestTable_dir

location('TestTable.csv')

指定外部表所在文件夹以及指定文件

3、accessparameters

设置转换参数,例如(fieldsterminatedby',')表示以','为字段间的分隔符

●参数由访问驱动程序定义

外部表的错误处理

1、REJECTLIMIT子句

在创建外部表时最后加入LIMIT子句,表示可以允许错误的发生个数。

*默认的REJECTLIMIT值为0

*REJECTLIMITUNLIMITED则不会报错

2、BADFILENOBADFILE子句

在accessparameters中加入BADFILE'BAD_FILE.txt'子句,则所有数据转换错误的值会被放入'BAD_FILE.txt'中

使用NOBADFILE子句则表示忽略转换错误的数据

●如果不写BADFILE或NOBADFILE,则系统自动在源目录下生成与外部表同名的.BAD文件

●BADFILE只能记录前1次操作的结果,他会被第2次操作所覆盖。

3、LOGFILENOLOGFILE子句

在accessparameters中加入LOGFILE'LOG_FILE.log'子句,则所有Oracle的错误信息放入'LOG_FILE.log'中

使用NOLOGFILE子句则表示不记录错误信息到log中

●如果不写LOGFILE或NOLOGFILE,则系统自动在源目录下生成与外部表同名的.LOG文件

修改外部表语句

外部表与堆表一样可以之用ALTERTABLE命令修改表属性

*REJECTLIMIT--错误数

*DEFAULTDIRECTORY--默认目录

*ACCESSPARAMETERS--参数

*LOCATION--数据文件

*ADDCOLUMN--增加列

*MODIFYCOLUMN--列定义

*DROPCOLUMN--删除列

*RENAMETO--外部表更名

其他约束

●外部表无法使用insert、update、delete等操作,要修改其数据只能通过修改数据文件。

●外部表不能建立索引,如要建立,则需要先createtableXXasselect*fromTestTable

PS:

1.外部表可以加载和卸载数据泵格式的数据,只需把organization external里的参数type设置为oracle_datapump。

create table all_objects_unload
organization external
(
type oracle_datapump
default directory testdir
location('allobjects.dat')
)
as
select * from all_objects


分享到:
评论

相关推荐

    oracle外部表Externaltable[借鉴].pdf

    oracle外部表Externaltable[借鉴].pdf

    基于Informix+External+Table实现数据快速加载

    基于Informix+External+Table实现数据快速加载

    Hive内部表和外部表

    创建表时使用关键字external创建的表就是外部表,没有使用该关键字创建的表就是内部表。 删除表时(drop table)内部表会删除hdfs对应路径,而外部表不会删除hdfs对应的路径, 删除表无论是内部表和外部表都会删除元...

    hive操作命令大全.txt

    # 注意:若是外部表,则还需要删除文件(hadoop fs -rm -r -f hdfspath) alter table table_name drop if exists partitions (d=‘2016-07-01'); # 字段类型 # tinyint, smallint, int, bigint, float, decimal,...

    Hive管理表和外部表的区别

    关于Hive数据仓库的管理表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)的区别,在创表的时候,如果不指定,则默认创建管理表。如果不知道此表是什么类型的表的话,可以在hive的命令行里打desc formatted table_name...

    1Z0-47试题详解

    外部表是只读的,不能进行插入操作 B. merge命令只能针对一张表进行插入或者修改操作,不能针对多张表进行插入操作 D. insert命令没有with check option选项,with check option选项是create view时使用的

    hive原理1介绍

    hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据...Hive中包含以下数据模型:Table内部表,External Table外部表,Partition分区,Bucket桶。Hive默认可以直接加载文本文件,还支持sequence file 、RCFile。

    DBA常用命令

    三、外部表: bad file: 不符合规则的列 discard file: 过滤得列 1 . 创建目录 SQL> conn system/oracle Connected. SQL> create directory external_2 as 'D:\backup\exp'; 2. 授权 SQL> grant read,...

    Hive DDL 之 表

    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], …)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], …)] [CLUSTERED ...

    mysql数据库my.cnf配置文件

    skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启 default-storage-engine = InnoDB #默认存储引擎 innodb_file_per_table = 1 # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 ...

    OFDM正交频分复用(zslcn周生烈编译摘注评)(1栏).doc

    Contents 目录  [hide]  1 Example of applications 应用实例 1.1 Cable 有线 1.2 Wireless 无线 2 Key features 主要特点 2.1 Summary of advantages 优点摘要 2.2 Summary of ...10 External links外部链接

    RW8021量产工具ptool v1.15_20100115.rar

    出错信息一览表:《 Error Massage Table 》 ==================================================================== Error:0x01 重新启动错误(ReBoot Error). Error:0x02 连结错误(Link Error). Error...

    redcap-em-shazam:Shazam外部模块

    这种方法的工作方式是在您要放置自定义表的表单上插入一个“描述性”字段。 接下来,设置外部模块并定义您的自定义HTML。 这是一个例子: < table class =' fy_summary '> < th> < th> 2012 < th> 2013 ...

    MySQL 5.1官方简体中文参考手册

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    MySQL 5.1参考手册 (中文版)

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    MySQL5.1参考手册官方简体中文版

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    mysql官方中文参考手册

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    MYSQL中文手册

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 ...

    MySQL 5.1参考手册中文版

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 ...

    MySQL 5.1参考手册

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

Global site tag (gtag.js) - Google Analytics