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

南大通用GBase8s 常用SQL语句(四十)
DATAFILES 子句
DATAFILES 子句指定当您使用外部表时打开的操作系统文件或管道。
DATAFILES 子句

元素 描述 限制 语法
fixed_path 在外部表的定义中的输入或输出文件的路径名 请参阅随该表之后的注意事项 必须遵循操作系统规则
formatted_path 使用模式匹配字符的格式化的路径名 请参阅随该表之后的注意事项 必须遵循操作系统规则
T数据库服务器不会验证存在于指定的 fixed_path 或 formatted_path 上的任何文件或管道,此指定的管道是打开的,且用户具有存取该文件系统的权限。然而,如果当数据库服务器尝试读或写到外部表时,指定的管道正在被使用,即是打开的,随后外部表上的操作会失败,除非该路径是有效的。
有关 DATAFILES 子句的示例,请参阅外部表示例。
关键字 描述
CLOBDIR 指定存储 CLOB 文件的服务器的目录。
BLOBDIR 指定存储 BLOB 文件的服务器的目录。当创建查询时,在 CLOBDIR 之后的 BLOBDIR 之后,指定 DISK 。如果省略了 BLOBDIR ,则 BLOB 文件存储于 DISK 子句指定的相同的目录。如果 BLOBDIR 和 CLOBDIR 都被省略,则会为 BLOB 或 CLOB 列创建一个新的文件,并将其存储于 DISK 子句指定的目录下。
以下示例中,存储在 /work1/exttab1.dat 中的行拥有位于 /work1/blobdir1 的 BLOBs 和位于 /work1/clobdir1 目录下的 CLOBs 。
存储在 /work1/exttab2.dat 中的行拥有位于 /work1 目录中的 BLOBs 和位于 /work1/clobdir2 目录中的 CLOBs。因为省略了 BLOBDIR 子句,所以 BLOBs 存储在存储 exttab2.dat 的目录中。
存储在 /work1/exttab3.dat 中的行拥有位于 /work1 目录中的 BLOBs 和 CLOBs ,因为 BLOBDIR 和 CLOBDIR 都被省略了。
CREATE EXTERNAL TABLE exttab (
id SERIAL,
lobc CLOB,
lobb BLOB)
USING (DATAFILES(
“DISK:/work1/exttab1.dat;BLOBDIR:/work1/blobdir1;CLOBDIR:/work1/clobdir1”,
“DISK:/work1/exttab2.dat;CLOBDIR:/work1/clobdir2”,
“DISK:/work1/exttab3.dat”),
DELIMITER ‘|’);
在外部表中使用格式化字符
可以使用格式化的路径名称来指定文件名,通过使用替代字符 %r(first …last)。
格式化字符串 作用
%r(first …last) 在 GBase 8s 服务器上对外部表指定多个文件。
first 和 last 参数代表语句运行时代替的表达式中的值的范围。例如:指定 my_file.%r(1…3) 可展开为:
my_file.1
my_file.2
my_file.3
GBase 8s 仅支持的格式字符是 %r 。
Table 选项
这些选项指定定义外部表的其它特征,并定义该表上加载或卸载操作的属性。
Table 选项

元素 描述 限制 语法
field_delimiter 用来分隔字段的字符。缺省值为管道 ( | )字符 对于非打印字符,使用八进制符号 引用字符串
filename 用来转换错误消息的完整路径名 请参阅 拒绝文件 必须遵循操作系统规则
num_errors 终止加载操作之前的错误数目 除非设置 REJECTFILE 值,否则该值被忽略 精确数值
num_rows 外部表中包含的行的近似数目 必须为正数 精确数值
record_delimiter 用来分隔记录的字符。缺省为换行符( \n ) 对于非打印字符,使用八进制符号 引用字符串
num_errors 规范在 unload 任务期间被忽略。
如果未指定 RECORDEND 值,record_delimiter 缺省值为换行符(\n)。要将非打印字符指定为记录定界符或字段定界符,您必须将它编码为 ASCII 字符的八进制表示法。例如 \006 可表示 CTRL-F 。
在 Windows™ 系统上,如果您使用 DB-Access 实用程序或者 dbexport 实用程序加载数据库表到文件中,然后计划使用该文件作为外部表数据文件,则您应当在 CREATE EXTERNAL TABLE 语句中将 RECORDEND 定义为 ‘\012’ 。
按照下表描述使用 table 选项关键字。除非指定了两种方式其中一种,否则只要计划 load 或 unload 数据,就可以使用每个关键字。
关键字
描述
DBDATE
当读取或写入外部表时指定数据格式。在从外部表加载和卸装操作期间,使用 DBDATE 子句转换数据。在以下示例中,DBDATE 设置为 DMY2-。如果数据库表中的日期值存储为 06/24/2009 ,则该值写入外部表后为 24-06-09 。
CREATE EXTERNAL TABLE ext_date (dob date)
USING ( DATAFILES (“DISK:/tmp/datedisk”),
REJECTFILE “/tmp/datereject”,
DBDATE “DMY2-”,
FORMAT “delimited”);

INSERT INTO ext_date SELECT * FROM basetab;
DBDATE 子句还在从外部表表插入数据到数据库表时使用。在以下示例中,外部表中的数据被转换为基于由 CREATE EXTERNAL TABLE 语句设置的 DBDATE 值的内部二进制格式。
INSERT INTO basetab SELECT * FROM ext_date;
如果在 CREATE EXTERNAL TABLE 的 USING 子句中未指定 DBDATE 关键字,则日期格式由 DBDATE 环境变量的设置决定。如果未指定 DBDATE 环境变量,则日期格式由 GL_DATE 环境变量的设置决定。DBDATE 子句指定的值优先于 DBDATE 环境变量指定的值。DBDATE 变量设置的值优先于 GL_DATE 环境变量。有关 DBDATE 和 GL_DATE 值的信息,请参阅 GBase 8s SQL 参考指南。
DBMONEY
当正在读取或写入外部表时,指定货币格式。在从外部表加载和卸装操作期间,使用 DBMONEY 子句转换数据。在以下示例中,DBMONEY 设置为 DM, 。货币格式化为 DM(德国马克)单位,使用货币符号 DM 和逗号(,)。如果在数据库表中的存储的货币值为 100.50,则写入外部表的值为 100,50 。
CREATE EXTERNAL TABLE ext_money (sales money)
USING ( DATAFILES ( “DISK:/tmp/moneydisk” ),
REJECTFILE “/tmp/moneyreject”,
DBMONEY “DM,”,
FORMAT “delimited”);

INSERT INTO ext_money SELECT * FROM basetab;
当将外部表中的数据读到数据库表中时,外部表不需要货币符号。例如,如果外部表包含值 1000,78且 DBMONEY 设置为 DM, ,则该数据不会被拒绝且该行会正确存储。
如果十进制符号在外部表中且设置的 DBMONEY 值不符合,那么该行被拒绝。例如:如果外部表包含值 1000,78 (使用逗号代替小数点)且将 DBMONEY 子句设置为 DM.,则该行被拒绝。如果数据文件包含一个货币符号并且该货币符号不符合 DBMONEY 货币符号,则该行被拒绝。
当从数据库表写入数据到外部表时,货币符号不会写入到外部表中。
如果没有指定 DBMONEY 子句,则通过设置 DBMONEY 环境变量决定数据格式。DBMONEY 子句指定的值优先于 DBMONEY 环境变量指定的值。如果没有指定 DBMONEY 子句且也没有设置 DBMONEY 环境变量,则使用数据库语言环境指定的十进制分隔符。有关 DBMONEY 值的信息,请参阅 GBase 8s SQL 参考指南。
DEFAULT (load only)
指定用列缺省值(如果已定义)而不是 NULL 值来替换定界输入文件中缺少的值,这样就可以稀疏地填充输入文件。在缺省值是要装入的值的文件中,文件不需要每一列都有一个条目。
DELIMITED
指定数据文件是一个定界文本文件。可以使用可选的 DELIMITER 表选项指定定界符。
DELIMITER
指定在定界文本文件分隔字段的字符。如果表选项不包含 DELIMITER 规范,则管道符(|)是缺省的字符分隔符。
DELUXE (load only)
请求使用 DELUXE 方式加载数据(而不是 EXPRESS 方式)时,数据库服务器会忽略该关键字,并内部选择 DELUXE 或 EXPRESS 方式。如果您指定 DELUXE 关键字,但数据库服务器内部选择 EXPRESS 方式,则向联机日志中写入一条警告:“Switching load on target table .

to EXPRESS”.
DELUXE 方式将更改索引、执行约束检查以及评估触发器的数据插入到该表。DELUXE 方式加载不如 EXPRESS 方式加载快,但是它更灵活。在 DELUXE 方式,您可以存取并更改正在加载的表。数据库服务器在加载数据到使用事务日志记录的数据库的 STANDARD 表和任何定义索引的表中时,总是选择 DELUXE 方式。
ESCAPE
在 DELIMITER 指定任何 field_delimiter 分隔符的实例之前,立即插入缺省转义字符,该字符是数据的字面值而不是分隔符。无论您包含或者省略该 ESCAPE 关键字,缺省启用该功能,或者您可以指定 ESCAPE ON 关键字使它清晰地认识到人类读者的您启用了此功能的 SQL 代码。要阻止数据中的 field_delimiter 字面分隔符被转义,您必须指定 ESCAPE OFF 关键字。
缺省情况下,在 field_delimiter 字符之前 ESCAPE 关键字插入的转义字符是反斜杠(\)。但是如果 DEFAULTESCCHAR 配置参数设置为单符号值,则当指定了 ESCAPE 或 ESCAPE ON 后,用此符号代理反斜杠(\)作为定界符。
注:
在 GBase 8s 中 ESCAPE 缺省的设置是 OFF 。
EXPRESS (load only)
请求使用 EXPRESS 方式加载数据(而不是 DELUXE 方式)时,数据库服务器会忽略该关键字,并内部选择 DELUXE 或 EXPRESS 方式。如果您指定 EXPRESS 关键字,但数据库服务器内部选择 DELUXE 方式,则向联机日志中写入一条警告:“Switching load on target table .
to DELUXE” 。
数据库服务器仅在以下情景中内部地选择 EXPRESS 方式:
数据库是非日志记录的且目标表(任一表类型)没有索引。
数据库是日志记录的且目标表是 RAW 并没有索引。
对于其它情况,数据库服务器内部选择 DELUXE 方式。
EXPRESS 方式加载(使用轻量级追加)比 DELUXE 方式加载明显快很多,但是不太灵活。在 EXPRESS 方式,直到加载完毕,您才能更新该表或读取新数据项。
如果指定 EXPRESS 方式,而表 BLOB 、BYTE 、CLOB 或 TEXT 类型的对象,则加载停止,产生错误消息。
当使用 EXPRESS 方式加载数据时,目标表不能位于 Enterprise Replication (ER) 复制中。此外,目标数据库服务器必须没有启用高可用数据复制(HDR)。
FIXED
指定数据文件是固定宽度的。当在外部表中使用 EXTERNAL 数据类型时,必须使用 FIXED 格式。
FORMAT
指定数据文件中数据的格式。
GBASEDBT
指定数据文件的格式是内部 GBase 8s 格式。从以 GBase 8s 格式保存的外部表加载数据比从固定或者定界外部文件中加载数据的速度快。当从一个 GBase 8s 数据库移动到另一个数据库时,使用 GBase 8s 格式。
MAXERRORS
设置在数据库服务器停止加载数据之前所允许的错误数目。
MAXERRORS 的最小值为 1 。将 MAXERRORS 值设置为小于 1 的值会产生错误。MAXERRORS 的最大值为 2,147,483,647 。
RECORDEND
指定已定界的文本文件中分隔记录的字符。
REJECTFILE
设置数据库服务器写入数据转换错误的完整路径名。如果未指定或者文件不能打开,则任何错误均会异常结束装入作业。另见拒绝文件 。
NUMROWS 或 SIZE
外部表中的大约行数。
在连接查询中使用外部表时,指定 NUMROWS(或者它的同义词 SIZE)可以提高性能。该值不能为 NULL 。

你可能感兴趣的:(sql,服务器,数据库)