mysql external table_创建Oracle外部表 External Table

对于处理数据库海量数据的存储,也可以采用以下的方法处理;

主要是针对CSV等格式的外部文件。

1. csv的结构,每个字段以什么为分割

2. external table的创建

3. 如何实现外部表访问外部文件,并显示在数据库里面

例如 有一个外部文件名字为temptes.csv

文件内容如下:

sunny,85,85,FALSE,no

sunny,80,90,TRUE,no

overcast,83,86,FALSE,yes

rainy,70,96,FALSE,yes

rainy,68,80,FALSE,yes

rainy,65,70,TRUE,no

overcast,64,65,TRUE,yes

sunny,72,95,FALSE,no

sunny,69,70,FALSE,yes

rainy,75,80,FALSE,yes

sunny,75,70,TRUE,yes

overcast,72,90,TRUE,yes

overcast,81,75,FALSE,yes

rainy,71,91,TRUE,no

要导入到数据库里。

首先创建一个创建一个Directory:必须用sys用户创建   create directory dirtemp as 'F:\EXTERNALDIR'

;

然后授权 grant read,write on directory dirtemp to users; //用户名

把文件temptes.csv放到'F:\EXTERNALDIR'文件里。

使用被授权的用户users创建外部表,表名和你的文件名一定要一致。

Create table temptes

(WTMARKET varchar2(20),

fenli1 varchar2(50),

fenli2  varchar2(20),

errro varchar2(20),

flag varchar2(20)

)

organization external

(

type oracle_loader

default directory dirtemp

access parameters ( fields terminated by ',' )

location (temptes.CSV')

)

reject limit unlimited;

表创建完成;

可以查看数据 select * from  temptes;

如果不知道怎么写external table的创建语法,可以利用利用sqlldr生成external_table表的语法;

例如在F盘有个SQLLDR文件的DETAIL.ctl文件:

load data

infile 'DETAIL.csv'

into table global_region_bns_detail

(SBH       char terminated by '|',

DBH       char terminated by '|',

Y_GJ      char terminated by '|',

D_XJ      char terminated by '|',

GRXFBV    char terminated by '|',

TERMLYBV  char terminated by '|',

GYBV_300I char terminated by '|',

GYBV_300O char terminated by '|',

GYBV_ZC   char terminated by '|',

ZC        char terminated by '|',

ZC_CS     char terminated by '|',

ZJ        char terminated by '|',

JJ        char terminated by '|',

LDDOWN    char terminated by '|',

PW        char terminated by '|',

LD        char terminated by '|',

LD_CS     char terminated by '|',

DS        char terminated by '|',

BNS_CS    char terminated by '|',

BNS_ID    char terminated by '|'

);

利用命令 :CMD>sqlldr scott/123@user control=DETAIL.ctl external_table=generate_only;

生成了DETAIL.log文件,打开如下:

SQL*Loader: Release 10.2.0.1.0 - Production on 星期三 4月 10 12:45:27 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

控制文件:      DETAIL.ctl

数据文件:      DETAIL.csv

错误文件:    DETAIL.bad

废弃文件:    未作指定

(可废弃所有记录)

要加载的数: ALL

要跳过的数: 0

允许的错误: 50

继续:    未作指定

所用路径:       外部表

表 GLOBAL_REGION_BNS_DETAIL,已加载从每个逻辑记录

插入选项对此表 INSERT 生效

列名                        位置      长度  中止 包装数据类型

------------------------------ ---------- ----- ---- ---- ---------------------

SBH                                 FIRST     *   |       CHARACTER

DBH                                  NEXT     *   |       CHARACTER

Y_GJ                                 NEXT     *   |       CHARACTER

D_XJ                                 NEXT     *   |       CHARACTER

GRXFBV                               NEXT     *   |       CHARACTER

TERMLYBV                             NEXT     *   |       CHARACTER

GYBV_300I                            NEXT     *   |       CHARACTER

GYBV_300O                            NEXT     *   |       CHARACTER

GYBV_ZC                              NEXT     *   |       CHARACTER

ZC                                   NEXT     *   |       CHARACTER

ZC_CS                                NEXT     *   |       CHARACTER

ZJ                                   NEXT     *   |       CHARACTER

JJ                                   NEXT     *   |       CHARACTER

LDDOWN                               NEXT     *   |       CHARACTER

PW                                   NEXT     *   |       CHARACTER

LD                                   NEXT     *   |       CHARACTER

LD_CS                                NEXT     *   |       CHARACTER

DS                                   NEXT     *   |       CHARACTER

BNS_CS                               NEXT     *   |       CHARACTER

BNS_ID                               NEXT     *   |       CHARACTER

文件需要 CREATE DIRECTORY 语句

------------------------------------------------------------------------

CREATE DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000 AS 'F:\'

用于外部表的 CREATE TABLE 语句:

------------------------------------------------------------------------

CREATE TABLE "SYS_SQLLDR_X_EXT_GLOBAL_REGION"

(

"SBH" VARCHAR2(30),

"DBH" VARCHAR2(30),

"Y_GJ" VARCHAR2(30),

"D_XJ" VARCHAR2(30),

"GRXFBV" VARCHAR2(30),

"TERMLYBV" VARCHAR2(30),

"GYBV_300I" VARCHAR2(30),

"GYBV_300O" VARCHAR2(30),

"GYBV_ZC" VARCHAR2(30),

"ZC" VARCHAR2(30),

"ZC_CS" VARCHAR2(30),

"ZJ" VARCHAR2(30),

"JJ" VARCHAR2(30),

"LDDOWN" VARCHAR2(30),

"PW" VARCHAR2(30),

"LD" VARCHAR2(30),

"LD_CS" VARCHAR2(30),

"DS" VARCHAR2(30),

"BNS_CS" VARCHAR2(30),

"BNS_ID" VARCHAR2(30)

)

ORGANIZATION external

(

TYPE oracle_loader

DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000

ACCESS PARAMETERS

(

RECORDS DELIMITED BY NEWLINE CHARACTERSET ZHS16GBK

BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'DETAIL.bad'

LOGFILE 'DETAIL.log_xt'

READSIZE 1048576

FIELDS LDRTRIM

REJECT ROWS WITH ALL NULL FIELDS

(

"SBH" CHAR(255)

TERMINATED BY "|",

"DBH" CHAR(255)

TERMINATED BY "|",

"Y_GJ" CHAR(255)

TERMINATED BY "|",

"D_XJ" CHAR(255)

TERMINATED BY "|",

"GRXFBV" CHAR(255)

TERMINATED BY "|",

"TERMLYBV" CHAR(255)

TERMINATED BY "|",

"GYBV_300I" CHAR(255)

TERMINATED BY "|",

"GYBV_300O" CHAR(255)

TERMINATED BY "|",

"GYBV_ZC" CHAR(255)

TERMINATED BY "|",

"ZC" CHAR(255)

TERMINATED BY "|",

"ZC_CS" CHAR(255)

TERMINATED BY "|",

"ZJ" CHAR(255)

TERMINATED BY "|",

"JJ" CHAR(255)

TERMINATED BY "|",

"LDDOWN" CHAR(255)

TERMINATED BY "|",

"PW" CHAR(255)

TERMINATED BY "|",

"LD" CHAR(255)

TERMINATED BY "|",

"LD_CS" CHAR(255)

TERMINATED BY "|",

"DS" CHAR(255)

TERMINATED BY "|",

"BNS_CS" CHAR(255)

TERMINATED BY "|",

"BNS_ID" CHAR(255)

TERMINATED BY "|"

)

)

location

(

'DETAIL.csv'

)

)REJECT LIMIT UNLIMITED

用于加载内部表的 INSERT 语句:

------------------------------------------------------------------------

INSERT /*+ append */ INTO GLOBAL_REGION_BNS_DETAIL

(

SBH,

DBH,

Y_GJ,

D_XJ,

GRXFBV,

TERMLYBV,

GYBV_300I,

GYBV_300O,

GYBV_ZC,

ZC,

ZC_CS,

ZJ,

JJ,

LDDOWN,

PW,

LD,

LD_CS,

DS,

BNS_CS,

BNS_ID

)

SELECT

"SBH",

"DBH",

"Y_GJ",

"D_XJ",

"GRXFBV",

"TERMLYBV",

"GYBV_300I",

"GYBV_300O",

"GYBV_ZC",

"ZC",

"ZC_CS",

"ZJ",

"JJ",

"LDDOWN",

"PW",

"LD",

"LD_CS",

"DS",

"BNS_CS",

"BNS_ID"

FROM "SYS_SQLLDR_X_EXT_GLOBAL_REGION"

用于清除由以前的语句创建的对象的语句:

------------------------------------------------------------------------

DROP TABLE "SYS_SQLLDR_X_EXT_GLOBAL_REGION"

DROP DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000

从 星期三 4月  10 12:45:27 2013 开始运行

在 星期三 4月  10 12:45:28 2013 处运行结束

经过时间为: 00: 00: 00.13

CPU 时间为: 00: 00: 00.08;

这里面就有你要的语法,同时还创建了CREATE DIRECTORY 语句。

可以说SQLLDR是external_table的一个补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值