外部表示例

本节中的示例显示使用外部表加载和卸装数据的不同方法。

以下是 CREATE EXTERNAL TABLE 语法的示例。在本示例中,创建带有两列且名为 empdata 的外部表。DATAFILES 子句指示数据文件的位置,指定该文件是定界的,指示拒绝文件的位置并指定该拒绝文件包含的错误不能多于 100 个。

CREATE EXTERNAL TABLE empdata 
        (
        empname	char(40),
        empdoj	date
        ) 
        USING 
        (DATAFILES 
        (
        "DISK:/work/empdata.unl"
        ),
        FORMAT "DELIMITED",
        REJECTFILE "/work/errlog/empdata.rej",
        MAXERRORS 100);

使用 SAMEAS 子句创建外部表

SAMEAS template 子句在新表的定义中使用来自 template 表所有的列名称和数据类型。以下示例使用 empdata 表的列名及其数据类型来创建外部表:

CREATE EXTERNAL TABLE emp_ext SAMEAS empdata
        USING 
        (DATAFILES
        (
        "DISK:/work/empdata2.unl"
        ), 
        REJECTFILE "/work/errlog/empdata2.rej", 
        DELUXE 
        );

向外部表中卸装数据

以下示例显示将数据库表的数据加载到外部表所使用的语句。

CREATE EXTERNAL TABLE ext1( col1 int )
        USING 
        (DATAFILES 
        (
        "DISK:/tmp/ext1.unl"
        )
        );
        
        CREATE TABLE base (col1 int);
        INSERT INTO ext1 SELECT * FROM base;

还可以按照以下示例使用 SELECT...INTO EXTERNAL 语法卸装数据:

SELECT * FROM base
        INTO EXTERNAL emp_target
        USING 
        (DATAFILES 
        (
        "DISK:/tmp/ext1.unl"
        )
        );

从外部表查询数据将其加载到数据库表

以下示例从外部表查询,且显示了将查询到的数据加载到数据库表的各种方法。

CREATE EXTERNAL TABLE ext1( col1 int )
        USING
        (DATAFILES 
        (
        "DISK:/tmp/ext1.unl"
        )
        );
        
        CREATE TABLE target1 (col1 int);
        CREATE TABLE target2 (col1 serial8, col2 int);
        
        SELECT * FROM ext1;
        SELECT col1,COUNT(*) FROM ext1 GROUP BY 1;
        SELECT MAX(col1) FROM ext1;
        SELECT col1 FROM ext1 a, systables b WHERE a.col1=b.tabid;
        
        INSERT INTO target1 SELECT * FROM ext1;
        INSERT INTO target2 SELECT 0,* FROM ext1;

从数据库表中的将数据卸装到一个使用 FIXED 格式的文本文件中

以下示例创建了一个名为 emp_ext 的外部表,定义了列名及其数据类型,并从使用固定格式的数据库卸装数据。

CREATE EXTERNAL TABLE emp_ext
        ( name CHAR(18) EXTERNAL CHAR(20),
        address VARCHAR(40) EXTERNAL CHAR(40),
        empno INTEGER EXTERNAL CHAR(6) 
        )
        USING (
        FORMAT 'FIXED',
        DATAFILES 
        (
        "DISK:/work2/mydir/emp.fix"
        )
        );
        
        INSERT INTO emp_ext SELECT * FROM employee;

从数据文件将数据加载到使用 FIXED 格式的数据库表中

下一示例创建了名为 emp_ext 的外部表,并从固定格式文件将数据加载到数据库中。

CREATE EXTERNAL TABLE emp_ext
        ( name CHAR(18) EXTERNAL CHAR(18),
        address VARCHAR(40) EXTERNAL CHAR(40),
        empno INTEGER EXTERNAL CHAR(6) 
        )
        USING (
        FORMAT 'FIXED',
        DATAFILES 
        (
        "DISK:/work2/mydir/emp.fix"
        )
        );
        
        INSERT INTO employee SELECT * FROM emp_ext;

在 DATAFILES 子句中使用格式化字符

要处理三个文件,请按照以下示例创建 DATAFILES 子句。
DATAFILES
          (
          "DISK:/work2/extern.dir/mytbl.%r(1..3)"
          )
下列显示了当运行语句时列表是如何展开的:
DATAFILES 
          (
          "DISK:/work2/extern.dir/mytbl.1",
          "DISK:/work2/extern.dir/mytbl.2",
          "DISK:/work2/extern.dir/mytbl.3"
          )