Oracle9i为继承数据打开了方便之门,在近几年里,更是最大限度地增强了关系技术。
许多公司想通过合并数据和自动化系统的方式,从而获取如Oracle在近期内所获得的超过10亿美元的节省。他们想把数据从完全不同的系统中迁移到Oracle数据库里,这样,这些数据便能享有Oracle数据库提供的有用性和可恢复性。但直到把数据完全转移到Oracle数据库之前,他们都需要通过一个中间步骤来访问数据。他们需要从平面文件访问数据。把数据加载到Oracle数据库的成本成为从遗留系统迁移到Oracle系统的最大障碍。
进入Oracle9i和外部表。Oracle9i的外部表把关系模型扩展到了数据库之外,使你可以访问存储在平面文件中的原有数据或者其中的一些副本。
不仅仅是为了ETL(提取、传送、加载)
数据仓库和商务智能的提取、传送、加载(ETL)过程中,开销最大的元素之一是把数据加载到临时表中使得它能被存在于数据库中的其他表所使用。外部表最初是被引入用来协助ETL过程的,而现在则有很多其他的用途。外部表能够把整台机器的数据装入数据库并改变数据操作规则。
为了帮助你理解怎样使用外部表,我创建了几个例子。我需要做的第一件事是为这些例子建一个用以存取的数据平面文件。我用Spool命令从一个好朋友的EMP表获取了一些数据:
SQL> spool emp4.dat
SQL> select empno||','||ename ||','||
job||','||deptno
from scott.emp;
SQL> spool off
7369,SMITH,CLERK,20
7499,ALLEN,SALESMAN,30
7521,WARD,SALESMAN,30
7566,JONES,MANAGER,20
7654,MARTIN,SALESMAN,30
然后,我用SQL*Plus创建了一个目录,这样,Oracle便能知道从哪里找到我的外部表:
SQL> create directory rich_new as
'/u01/home/oracle/rich';
目录已创建。
接下来,我创建了一个真实的表定义来引用外部平面文件。注意,如果数据不是储存在你的表定义的字段中,在你选择真实数据的时候,你将得到一条出错信息。清单1给出了一个创建表命令的例子。
统计记录
一个数据库中的外部表能作为虚拟的只读表那样被访问,但是因为数据是在平面文件里,所以能在数据库外部通过使用外壳脚本来执行插入、更新和删除命令。虽然目前还不能创建索引,但外部表的速度还是快得惊人。
为了统计记录条数,你可以使用Unix命令,也可以在数据库内部进行统计。用这两种方式,你都可以在平面文件而不是数据库中处理数据。下面的代码是一条用于在平面文件中统计记录的简单的UNIX命令。注意包含"?"的word count(wc) 命令,这条命令告诉操作系统统计行数。我建了一个有200,020行的文件。
$ wc ?emp4.dat
200020 200020 4400400 emp4.dat
$ ls -l emp4.dat
-rwxr-xr-x 1 oracle oinstall 4400400 Aug 9 06:31 emp4.dat
我能使用SQL统计平面文件中的记录,因为现在我已经建好了一个外部表。下面的命令将在1秒钟之内返回结果。
SQL> select count(*) from emp_external4;
COUNT(*)
_________________
200020
耗时: 00:00:00.63
一旦你知道了能在一秒钟之内统计记录,你就能查找特定的信息,比如平面文件中的一个特殊的雇员编号(empno),现在可以通过一个外部表引用。你能用多快的速度扫描数百万条记录?在这个例子中,我建了第二个表并把它与第一个表结合起来。
create table emp_external5
(empno char(4), ename char(10), job char(9), deptno
char(2))
organization external
...
location ('emp5.dat'));
现在我把第一个结果中的20行与第二个表中的20行合并,用以连接那两个200,000行的表。结果是400行的结果集合,获得了4百万条行的联合访问能力。使用一般的硬件配置(我是用单处理器的机器),结果才花了不到3秒钟的时间。
select a.empno, b.job, a.job
from emp_external4 a, emp_external5 b
where a.empno = b.empno
and a.empno = 7900
and b.empno = 7900;
400 rows selected.
Elapsed: 00:00:02.46
这是上述连接的执行计划。
执行计划
--------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 MERGE JOIN
2 1 SORT (JOIN)
3 2 EXTERNAL TABLE ACCESS (FULL) OF 'EMP_EXTERNAL5'
4 1 SORT (JOIN)
5 4 EXTERNAL TABLE ACCESS (FULL) OF 'EMP_EXTERNAL4'
你也能通过外部表使用提示信息,并且把外部表加入到常规表中。你能并行化进行操作,而且,你甚至可以在任何时间从外部表中把数据直接插入到数据库里。其潜力无穷。
Rich Niemiec 是TUSC(www.tusc.com) 的首席执行官,并且是Oracle国际用户团体(International Oracle Users Group,www.ioug.org) 的总裁。
分享到:
相关推荐
5. **clear_his_data_lastNday_external_ods.sh** 和 **clear_his_data_lastNday_external.sh**:这两个脚本可能是清理外部表历史数据的工具。它们可能根据指定的天数自动删除过期数据,以节省存储空间。 6. **...
Oracle外部表由三部分组成:定义外部表的DDL语句、数据文件和一个可选的外部表目录。DDL语句定义了外部表的结构,包括列名、数据类型等。数据文件则包含要访问的实际数据,可以是文本文件、CSV文件或其他格式。外部...
5. **集成和开放性**:为了简化用户界面和提高整体解决方案的统一性,ETL工具应能与其他系统(如OLAP工具、前端分析工具、建模工具)无缝集成,提供API和自定义转换过程的能力,允许调用外部应用程序(如存储过程、...
Kettle是由Pentaho公司维护的一款开源ETL工具,它提供了一种用于数据集成的图形化设计界面,允许用户通过简单的图形操作来设计复杂的ETL流程。Kettle支持多种数据源,包括关系型数据库、NoSQL数据库、文件系统等,...
Kettle是一款开源的ETL工具,以其出色的性能和丰富的功能受到广大用户的青睐。Kettle的核心组件包括: 1. **Chef——工作(job)设计器**:这是一个图形用户界面工具,用于设计作业。作业是由多个作业项按照特定顺序...
1. **设计策略**:包括合理的抽取、转换和装载策略,解决引用约束问题,优化维表和事实表的装载,以及应对外部数据导入的不确定性。 2. **采用先进工具**:如Microsoft SQL Server Integration Services (SSIS),...
Oracle 9i通过提供内置的ETL功能,如外部表、多表插入、更新和插入操作、表功能以及可传送的表空间,简化了这个过程。这使得数据处理更高效,减少了对额外中间层软件的依赖。 在Oracle 9i中,外部表允许直接从非...
SQL Server 2008 提供了强大的ETL工具,即Integration Services (SSIS),用于高效地执行这些任务。 在SQL Server 2008中,Integration Services包含一系列预先构建的任务和转换,允许开发者构建灵活且可扩展的数据...
Oracle数据库的外部表是一种特殊类型的表,它不同于常规的数据库表,不存储数据在数据库的表空间中,而是引用操作系统上的数据文件,如文本文件或二进制文件。外部表在Oracle数据库中以元数据的形式存在,其结构和...
- **数据仓库**:一种用于存储历史数据的数据库系统,主要用于支持商业智能(BI)活动,特别是分析行为。 - **数据集市**:通常是从数据仓库中提取出的一小部分数据,针对特定主题或部门设计。 **1.2 SAS ...
- **原理**:在要抽取的表上建立插入、修改和删除触发器,当源表中的数据发生变化时,触发器会将变化的数据写入一个临时表中,然后由ETL工具从中抽取数据。 - **优点**:性能高,加载规则简单,速度快,不需要修改...
Kettle是一款开源的数据集成工具,主要用于完成数据抽取(Extract)、转换(Transform)、加载(Load),简称ETL过程。它提供了一个图形化的操作界面,帮助用户设计复杂的ETL流程而无需编写大量代码。 ##### 1.2 ...
2. 维度表很宽:一个典型的维度表会有相当多的属性/列。 3. 文本属性:维度表中的属性一般是文本格式的。 4. 非直接相关属性:维度表中的某些属性常常不会及其中的其他属性直接相关。 5. 非规范化:规范化会导致维度...
Hive 语法和常用函数 Hive 是一个基于 Hadoop 分布式系统上的数据仓库,最初由 Facebook...Hive 是一个强大的数据仓库工具,提供了丰富的数据处理和分析能力,但也存在一些限制,需要根据实际情况选择合适的使用场景。
2. 维度表很宽:一个典型的维度表会有相当多的属性/列。 3. 文本属性:维度表中的属性一般是文本格式的。 4. 非直接相关属性:维度表中的某些属性经常不会及其中的其他属性直接相关。 5. 非规范化:规范化会导致维度...
2. **外部表**:这是一种存储在数据库之外的数据结构,允许直接访问文件系统中的数据,无需事先将数据导入到数据库中,大大简化了数据处理流程。 3. **多表插入**:这项功能支持同时向多个表中插入数据,极大地...
file_fdw 是一个外部表插件,用于将文件作为 PostgreSQL 的外部表。使用 file_fdw 可以将 CSV 文件、文本文件等作为 PostgreSQL 的外部表。 tds_fdw tds_fdw 是一个外部表插件,用于连接 Microsoft SQL Server ...
在Oracle 10g中,对于大型ETL项目,Data Integrator(ODI)是一个重要的工具,它提供了一种图形化的开发环境,便于设计、测试和部署ETL流程。ODI支持元数据驱动的ETL,允许用户在不触及底层代码的情况下更改业务规则...
### DataStage ETLD开发指南知识点解析 ...以上是对 DataStage EE 开发指南中重要知识点的详细解析,涵盖了从基础知识到高级应用的多个层面,旨在帮助读者更好地理解和掌握 IBM DataStage 这一强大的 ETL 工具。