暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

南大通用GBase8s 常用SQL语句(四十四)

晚安的星星云 2022-01-19
252

将数据从 GBase 8s 卸装到外部表

通过创建外部表并将数据插入到该表中,或者从内部表查询数据并将数据插入到外部文件,来卸装数据。

要并行地卸装数据,启动并行运行的查询,并将其输出结果写到多个文件中。该卸装任务使用循环技术均衡输出文件汇总的行数。

卸载到定界文件

您可以将表中的数据卸载到定界的 ASCII 文本文件中,如下所示:

CREATE EXTERNAL TABLE emp_ext

        SAMEAS employee

        USING (

        DATAFILES ("DISK:/work2/mydir/emp.dat")

        );

        INSERT INTO emp_ext SELECT * FROM employee;

定界文件缺省为 ASCII 。

卸载到 GBase 8s 数据文件

要将 employee 表卸载到 GBase 8s 内部格式的表,请使用类似的下列语句:

SELECT * FROM employee

        WHERE hiredate > "1/1/1996"

        INTO EXTERNAL emp_ext

        USING (

        FORMAT 'GBASEDBT',

        DATAFILES ("DISK:/work2/mydir/emp.dat")

        );

因为输出文件使用 GBase 8s 内部表示法,所以您需要在 USING 子句中指定 FORMAT 'GBASEDBT' 选项。(缺省为定界 ASCII 格式。)

卸载到固定文本文件

可将数据库的数据卸载到固定格式文件。

以下 SQL 语句将以固定文本格式的 employee 表卸载到 emp_ext 外部表中:

CREATE EXTERNAL TABLE emp_ext

        ( name CHAR(18) EXTERNAL CHAR(20),

        hiredate DATE EXTERNAL CHAR(10),

        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;

这些语句创建了有 20 个字符位置的第一个字段,10 个字符位置的第二字段等等的固定文本文件。因为通过 SELECT 语句选择行,所以您可以任何您希望的方式格式化该 SELECT 列表。

向固定文本文件添加行结束符

您可以向固定文本文件的每行添加行结束符,以将文件用于其它应用程序。

如果您以固定文本格式写文本,一行写一个记录是有帮助的。行结束符使得数据更清晰易读。如果您使用缺省的定界格式,则会自动添加行结束符。然而,对于固定格式卸载,需要在您的记录中添加行结束符。例如:考虑具有以下结构的表:

TABLE sample (

        lastname CHAR(10),

        firstname CHAR(10),

        dateofbirth DATE);

该表包含以下值:

Adams      Sam        10-02-1957

Smith      John       01-01-1920

接下来,考虑以下结构的外部表:

CREATE EXTERNAL TABLE sample_ext (

              lastname CHAR(10) EXTERNAL CHAR(10),

              firstname CHAR(10) EXTERNAL CHAR(10),

              dateofbirth DATE EXTERNAL CHAR(12));

不带行结束符卸载 sample_ext 会产生以下输出:

Adams     Sam       10-02-1957  Smith     John      01-01-1920

您可以通过使用程序或脚本添加行结束符,或者在 SELECT 语句中添加换行字段。

使用程序或脚本

要添加行结束符,您可以将固定长度的记录写到数据文件中,然后用程序或脚本修改该数据文件。

例如:您可以用 C 程序查找每一记录的长度,定位每一行的末尾,然后添加行结束符。

在 SELECT 语句中添加换行字段

您可以使用外部表卸载在您内部表中的换行符。

要添加行结束符,请从含有换行符的表中查询最终值,如下所示:

1. 创建一个只包含换行字符的文件。

echo "" > /tmp/cr.fixed

2. 创建一个存储该换行值的内部表,在卸载数据时使用该表。

CREATE TABLE dummyCr (cr CHAR(1));

3. 创建外部表以卸载换行值。

CREATE EXTERNAL TABLE x_cr (cr CHAR(1) EXTERNAL CHAR(1))

USING (DATAFILES ("DISK:/tmp/cr.fixed"), FORMAT 'FIXED');

4. 加载该外部表到内部表 dummyCr 中。

INSERT INTO dummyCr SELECT * FROM x_cr;

该内部表,dummyCr ,现在包含一个行结束符,您可以在 SELECT 语句中既使用它进行卸载。

1. 要将内部表的数据卸载到外部表,请创建带有行结束符 EXTERNAL CHAR 的外部表。

CREATE EXTERNAL TABLE sample_ext

        (

        lastname CHAR(10) EXTERNAL CHAR(10),

        firstname CHAR(10) EXTERNAL CHAR(10),

        dateofbirth DATE EXTERNAL CHAR(12),

        eol CHAR(1) EXTERNAL CHAR(1))

        USING (DATAFILES ....), FORMAT 'FIXED');

2. 将从内部表和 dummyCr 表的查询用于创建拥有被行结束符分隔的行的输出文件。

INSERT INTO sample_ext(lastname, firstname, dateofbirth, eol)

            SELECT a.lastname, a.firstname, a.dateofbirth, b.cr

            FROM mytable a, dummyCr b;

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论