当前位置: 代码迷 >> Sybase >> Sybase IQ Load 话语
  详细解决方案

Sybase IQ Load 话语

热度:4512   发布时间:2013-02-26 00:00:00.0
Sybase IQ Load 语句

IQ Load 语句 参考

?

load in

?

set temporary option CONVERSION_ERROR = 'OFF'; LOAD TABLE dba.table01 (s1 '|',s2 '|',s3 '\x0a') from '/home/a.txt' escapes off quotes off notify 100000 Ignore Constraint ALL 5000000 Message Log '/home/error/msg_0203.log' Row Log '/home/error/error_0203.log' only log ALL Log Delimited By '|' with checkpoint on; commit;

?

?

load out

?

      set temporary option Temp_Extract_Column_Delimiter = '|';      set temporary option Temp_Extract_Name1 = '/home/sybiq/error/out_iq.txt';       select *       from table01;       set temporary option Temp_Extract_Name1 = '';

?

?LOAD TABLE 语句
说明将数据从外部 ASCII 格式文件导入数据库表。
语法LOAD [ INTO ] TABLE [ owner ].table-name
... ( load-specification [, ...] )
... FROM { 'filename-string' | filename-variable } [, ...]
... [ CHECK CONSTRAINTS { ON | OFF } ]
... [ DEFAULTS { ON | OFF } ]
... QUOTES OFF
... ESCAPES OFF
... [ FORMAT { 'ascii' | 'binary' } ]
... [ DELIMITED BY 'string' ]
... [ STRIP { ON | OFF } ]
... [ WITH CHECKPOINT { ON | OFF } ]
... [ { BLOCK FACTOR number | BLOCK SIZE number } ]
... [ BYTE ORDER { NATIVE | HIGH | LOW } ]
... [ LIMIT number-of-rows ]
... [ NOTIFY number-of-rows ]
... [ ON FILE ERROR { ROLLBACK | FINISH | CONTINUE} ]
... [ PREVIEW { ON | OFF } ]
... [ ROW DELIMITED BY 'delimiter-string' ]
... [ SKIP number-of-rows ]
... [ WORD SKIP number ]
... [ START ROW ID number ]
... [ UNLOAD FORMAT ]
... [ IGNORE CONSTRAINT constrainttype [, ...] ]
... [ MESSAGE LOG ‘string’ ROW LOG ‘string’ [ ONLY LOG logwhat [, ...] ]
... [ LOG DELIMITED BY ‘string’ ]
参数load-specification:
{ column-name [ column-spec ]
| FILLER ( filler-type ) }
LOAD TABLE 语句
522 Sybase IQ
column-spec:
{ ASCII ( input-width )
| BINARY [ WITH NULL BYTE ]
| PREFIX { 1 | 2 | 4 }
| 'delimiter-string'
| DATE ( input-date-format )
| DATETIME ( input-datetime-format ) }
[ NULL ( { BLANKS | ZEROS | 'literal', ... } ) ]
filler-type:
{ input-width
| PREFIX { 1 | 2 | 4 }
| 'delimiter-string' }
constrainttype:
{ CHECK integer | UNIQUE integer
| NULL integer
| FOREIGN KEY integer
| DATA VALUE integer
| ALL integer }
logwhat:
{ CHECK | ALL | NULL | UNIQUE | DATA VALUE | FOREIGN KEY | WORD }
示例? 将数据从一个文件装载到 Windows 系统上的 product 表中。使用制表
符作为列分隔符,后跟 description 和 color 列。
LOAD TABLE product
( id ASCII(6),
FILLER(1),
name ASCII(15),
FILLER(1),
description '\x09',
size ASCII(2),
FILLER(1),
color '\x09',
quantity PREFIX 2,
unit_price PREFIX 2,
FILLER(2) )
FROM 'C:\\mydata\\source1.dmp'
QUOTES OFF
ESCAPES OFF
BYTE ORDER LOW
NOTIFY 1000
第6 章 SQL 语句
参考手册523
? 将数据从两个文件装载到 UNIX 系统上的 product_new 表中(该表允
许 NULL 值)。制表符为缺省的列分隔符,并且使用换行符作为行
分隔符。
LOAD TABLE product_new
( id,
name,
description,
size,
color '\x09' NULL( 'null', 'none', 'na' ),
quantity PREFIX 2,
unit_price PREFIX 2 )
FROM '/s1/mydata/source2.dump', '/s1/mydata/
source3.dump'
QUOTES OFF
ESCAPES OFF
BLOCKSIZE 100000
FORMAT ascii
DELIMITED BY '\x09'
ON FILE ERROR CONTINUE
ROW DELIMITED BY '\n'
? 忽略 10 字长度违规;出现第 11 字时,显示新错误并回退装载:
load table PTAB1(
ck1 ',' null ('NULL') ,
ck3fk2c2 ',' null ('NULL') ,
ck4 ',' null ('NULL') ,
ck5 ',' null ('NULL') ,
ck6c1 ',' null ('NULL') ,
ck6c2 ',' null ('NULL') ,
rid ',' null ('NULL') )
FROM 'ri_index_selfRI.inp'
row delimited by '\n'
LIMIT 14 SKIP 10
IGNORE CONSTRAINT UNIQUE 2, FOREIGN KEY 8
word skip 10 quotes off escapes off strip
off
用法使用 LOAD TABLE 语句可从带有 ASCII 或二进制数据的文件到数据库表
的高效批量插入。
使用 LOAD TABLE 选项也可以控制违反完整性约束时的装载行为并且记
录有关违规的信息。
如果未指定 WITH CHECKPOINT ON,则必须保留用于装载的文件以在需
要时恢复。如果指定了 WITH CHECKPOINT ON,则在装载后执行检查点,
这样,即使从系统中删除该数据文件,也可以保证能够恢复。
LOAD TABLE 语句
524 Sybase IQ
对临时表可以使用 LOAD TABLE,但是该临时表必须是用 ON COMMIT
PRESERVE ROWS 声明的,否则下一条 COMMIT 将删除已装载的行。
您还可以指定多个文件来装载数据。在 FROM 子句中,指定每个 filenamestring
(各项之间以逗号分隔)。但是,由于内存约束, Sybase IQ 无法保
证能够装载所有数据。如果内存分配失败,整个装载事务将被回退。一次
只读取一个文件,这些文件按从左到右的顺序(在 FROM 子句中指定)进
行处理。任何 SKIP 或 LIMIT 值都只在装载开始时应用,而不是针对每个
文件应用。
注意 当装载 Multiplex 数据库时,请在所有文件名中使用绝对(完全限
定)路径。请不要使用相对路径名。
Sybase IQ 支持从 ASCII 和二进制数据装载,并且支持固定长度格式和可
变长度格式。要处理所有这些格式,您必须提供一个 load-specification 来
通知 Sybase IQ 需要从源文件中的每个“列”或字段获得何种数据。使
用 column-spec 可以定义下列格式:
? 固定字节长度的 ASCII。input-width 值为表示每条记录中输入字段的
固定宽度的整数值(单位为字节)。
? 使用一定数量的 PREFIX 字节(1、2 或 4 个)指定二进制输入长度
的二进制字段。
如果使用提取功能卸载数据时将 TEMP_EXTRACT_BINARY 选项设置
为 ON,则在装载二进制数据时必须针对每个列使用 BINARY WITH
NULL BYTE 参数。
? 由分隔符分隔的可变长度字符。可以将终结符指定为十六进制 ASCII
字符。delimiter-string 可以是最多 4 个字符的任意字符串,包括可打印
字符的任意组合以及表示不打印字符的任意 8 位十六进制 ASCII 代
码。例如,指定:
? '\x09',以将制表符表示为终结符。
? '\x00',表示空终结符(如同“C”字符串中一样,没有可见终
结符)。
? '\x0a',表示作为终结符的换行符。还可以使用特殊字符组合
“\n”作为换行符。
注意 分隔符字符串长度可为 1 到 4 字符,不过,您在 DELIMITED BY 子
句中只能指定单个字符。
第6 章 SQL 语句
参考手册525
? DATE 或 DATETIME 字符串(ASCII 字符形式)。您必须使用 Sybase
IQ 支持的日期数据类型和日期时间数据类型的对应格式之一定义字
符串的 input-date-format 或 input-datetime-format。使用 DATE 表示日
期值,并使用 DATETIME 表示日期时间和时间值。
表 6-9:日期和时间格式设置
表 6-10:示例 DATE 和 DATETIME 格式选项
Sybase IQ 具有针对常用日期、时间和日期时间格式的装载优化。如果您
要装载的数据与其中一种格式匹配,则使用相应的格式可以显著缩短装
载时间。有关这些格式的列表以及有关装载日期和日期时间数据时优化
性能的详细信息,请参见《Sybase IQ 系统管理指南》中的第 7 章“将
数据移入和移出数据库”。
选项含义
yyyy 或 YYYY
yy 或 YY
表示年份数字。缺省为当前年份。
mm 或 MM 表示月份数字。适当情况下始终在月份数字中使用前导零或空白,例如,“05”表示
5 月。DATE 值必须包含月份。例如,如果您输入的 DATE 值为 1998,则会收到错误
提示。如果您输入“03”,则 Sybase IQ 将应用缺省年份和日期,并将其转换为“1998-
03-01”。
dd 或 DD
jjj 或 JJJ
表示日期数字。缺省日期为 01。适当情况下始终在日期数字中使用前导零,例如,
“01”表示 1 号。J 或 j 表示一年中的儒略日(1 至 366)。
hh
HH
表示小时。小时基于 24 小时制。适当情况下始终在小时中使用前导零或空白,例
如,“01”表示上午 1 点。对于上午 12 点,“00”也是有效值。
nn 表示分钟。适当情况下始终在分钟中使用前导零,例如,“08”表示 8 分钟。
ss[.ssssss] 表示秒和秒的小数部分。
aa 表示 a.m. 或 p.m. 指示。
pp 仅当需要时表示指定为 p.m。(这与 12.0 之前的 Sybase IQ 版本不兼容;先前“pp”
与“aa”是同义词。)
hh Sybase IQ 假设分钟和秒钟均为零。例如,如果您输入的 DATETIME 值为“03”,则
Sybase IQ 将该值转换为“03:00:00.0000”。
hh:nn 或 hh:mm Sybase IQ 假设秒钟为零。例如,如果您输入的时间值为“03:25”,则 Sybase IQ 将
该值转换为“03:25:00.0000”。
输入数据格式规范
12/31/98 DATE ('MM/DD/YY')
19981231 DATE ('YYYYMMDD')
123198140150 DATETIME ('MMDDYYhhnnss')
14:01:50 12-31-98 DATETIME ('hh:mm:ss MM-DD-YY')
18:27:53 DATETIME ('hh:mm:ss')
12/31/98 02:01:50AM DATETIME ('MM/DD/YY hh:mm:ssaa')
LOAD TABLE 语句
526 Sybase IQ
还可以将日期/时间字段指定为 ASCII 固定宽度字段(如上所述),并使
用 FILLER(1) 选项以跳过列分隔符。有关指定日期和时间数据的详细信
息,请参见“日期和时间数据类型”(第 213 页)或《Sybase IQ 系统
管理指南》中的第 7 章“将数据移入和移出数据库”。
column-spec 的 NULL 部分表示将特定输入值装载至表列中时如何将其
视为空值。这些字符可能包括 BLANKS、ZEROS 或您定义的任何其它
文字列表。指定 NULL 值或从源文件读取 NULL 值时,目标列必须能够
包含 NULL。
ZEROS 的含义如下:如果(并且仅当)输入数据(转换前,如果为
ASCII)均为二进制零(而不为字符零),则此单元设置为 NULL。
? 如果输入数据为字符零,则:
a NULL (ZEROS) 永远不会导致单元变为 NULL。
b NULL ('0') 导致单元变为 NULL。
? 如果输入数据为二进制零(清除所有位),则:
a NULL (ZEROS) 导致单元变为 NULL。
b NULL ('0') 永远不会导致单元变为 NULL。
例如,如果 LOAD 语句包含 col1 date('yymmdd') null(zeros) 并且日
期为 000000,则会收到错误消息,指示 000000 无法转换为 DATE(4)。
要使 load 在数据为 000000 时在 col1 中插入一个 NULL 值,请将 NULL
子句编写为 null('000000'),或将数据修改为等于二进制零并使用
NULL(ZEROS)。
如果 VARCHAR 单元的长度为零并且该单元不为 NULL,则将获得一个零
长度单元。对于所有其它数据类型来说,如果单元长度为零,则 Sybase IQ
将插入 NULL。这是 ANSI 行为。对于零长度字符数据的非 ANSI 处理,请
设置 Non_Ansi_Null_Varchar 数据库选项。
load-specification 的另一重要部分是 FILLER 选项。它指示您希望跳过源
输入文件中的指定字段。例如,在输入文件中的行末尾或整个字段可能
会存在不希望添加到表中的字符。与 column-spec 定义一样,使用 FILLER
可以指定 ASCII 固定字节长度、由分隔符分隔的可变长度字符,以及使
用 PREFIX 字节的二进制字段。
filename-string filename-string 以字符串的形式传递到服务器。因此,该
字符串遵循的格式要求与其它 SQL 字符串一样。尤其是:
? 要在 Windows 系统中指示目录路径,反斜杠字符\必须用两个反斜杠
来表示。因此,用于将数据从文件 c:\temp\input.dat 装入 employee 表
的语句是:
LOAD TABLE employee
FROM 'c:\\temp\\input.dat' ...
第6 章 SQL 语句
参考手册527
? 路径名对应于数据库服务器,而不是客户端应用程序。如果在某一
其它计算机的数据库服务器上运行此语句,则目录名是指服务器计
算机上的目录,而不是指客户端计算机上的目录。
以下介绍该语句的每个子句:
WORD SKIP 遇到长度超过创建单词索引时指定的限制时,允许装载继
续进行。
如果因为字超过最大允许大小而未能装载某一行,则会将一条警告写入
.iqmsg 文件。还可以选择将 WORD 大小违规记录到 MESSAGE LOG 文件
中,并将被拒绝的行记录到 LOAD TABLE 语句中指定的 ROW LOG 文件。
? 如果未指定此选项,则 LOAD TABLE 将在第一次遇到长度超过指定限
制的字时报告错误并回退。
? number 指定了忽略“Words exceeding the maximum permitted word
length not supported”(不支持超过最大允许字长的字)错误的次数。
? 0 ( 零) 表示没有限制。
QUOTES 此参数是可选的,缺省值为 ON。将 QUOTES 选项打开时,LOAD
TABLE 要求将输入字符串引在引号字符内。引号字符是撇号(单引号)或
引号(双引号)。字符串中出现的第一个这样的字符将被视为该字符串的
引号字符。字符串数据必须以匹配的引号结束。
在 QUOTES 设置为 ON 的情况下,可以在列值中包括列或行分隔符。假定
前导引号字符和结尾引号字符不是值的一部分并从加载的数据值中排除。
当 QUOTES 为 ON 时,要在值中包含引号字符,请使用两个引号。例如,
下面的行在第三列中包含一个单引号字符值:
‘123 High Stree, Anytown’, ‘(715)398-2354’,’’’’
在打开 STRIP 时(缺省情况),首先将从值中去除尾随空白,然后再插入
这些值。仅去除不带引号的字符串的尾随空白。带引号的字符串保留其尾
随空白。仅当 QUOTES 设置为 ON 时,才会剪裁前导空白或 TAB 字符。
数据提取功能提供多个用于处理引号的选项(TEMP_EXTRACT_QUOTES、
TEMP_EXTRACT_QUOTES_ALL 和 TEMP_EXTRACT_QUOTE) 。如果您计划
重新装载提取的文件,文件中有包含缺省 ASCII 提取方式的列或行分隔符
的字符串字段,请使用 TEMP_EXTRACT_BINARY 选项提取并对 LOAD TABLE
使用 FORMAT ‘binary’ 和 QUOTES OFF 选项。
限制:
? QUOTES ON 选项仅适用于列分隔的 ASCII 字段。
? 在 QUOTES 设置为 ON 的情况下,列分隔符或行终结符的第一个字符
不能是单引号或双引号。
LOAD TABLE 语句
528 Sybase IQ
? QUOTES 选项不适用于从辅助文件装载二进制大对象 (BLOB) 或字符
大对象 (CLOB) 数据,而无论其设置如何。前导或尾随引号将作为
CLOB 数据的一部分来装载。使用 QUOTES ON 选项,位于引号之间
的两个连续引号将作为两个连续引号进行装载。
? Adaptive Server Enterprise BCP 不支持 QUOTES 选项。拷入或拷出所
有字段数据时等同于将 QUOTES 设置为 OFF 的情况。由于 QUOTES
ON 是 Sybase IQ LOAD TABLE 语句的缺省设置,将 ASE 数据从 BCP
输出导入 Sybase IQ 表时,必须指定 QUOTES OFF。
异常:
? 如果 LOAD TABLE 在引起来的字段的结尾引号字符之后遇到非空白
字符,将报告以下错误并回退装载操作:
Non-SPACE text found after ending quote character for
an enclosed field.
SQLSTATE: QTA14 SQLCODE: -1005014L
? 在 QUOTES 设置为 ON 的情况下,如果将单引号或双引号指定为列分
隔符的第一个字符,则将报告错误并且装载操作会失败:
Single or double quote mark cannot be the 1st character
of column delimiter or row terminator with QUOTES option
ON.
SQLSTATE: QCA90 SQLCODE: -1013090L
有关 QUOTES 选项的示例,请参见《Sybase IQ 系统管理指南》的第 7
章“将数据移入和移出数据库”中的“使用 LOAD TABLE 语句批量装
载数据”。
CHECK CONSTRAINTS 此选项缺省值为 ON。指定 CHECK CONSTRAINTS
ON 时,将评估检查约束,您可以任意忽略或记录评估结果。
设置 CHECK CONSTRAINTS OFF 将导致 Sybase IQ 忽略所有检查约束违规。
这很有用,例如在重建数据库时。如果表的检查约束调用尚未创建的用户
定义的函数,则重建将失败,除非此选项设置为 OFF。
此选项与以下选项互斥。如果在同一装载中指定了以下任何选项,将导
致错误:
? IGNORE CONSTRAINT ALL
? IGNORE CONSTRAINT CHECK
? LOG ALL
? LOG CHECK
第6 章 SQL 语句
参考手册529
DEFAULTS 如果 DEFAULTS 为 ON(缺省值)并且列具有缺省值,则使用
该值。如果 DEFAULTS 选项为 OFF,则将任何未在列表中显示的值指定为
NULL。
DEFAULTS 选项的设置适用于所有列 DEFAULT 值,包括
AUTOINCREMENT。
有关列的 DEFAULT 值在装载和插入中的用法的详细信息,请参见《Sybase
IQ 系统管理指南》的第 9 章“确保数据完整性”中的“使用列缺省值”。
ESCAPES 如果省略输入字段的 column-spec 定义,则在 ESCAPES 为
ON (缺省值)的情况下,跟在反斜杠字符后的字符将由数据库服务器
识别并解释为特殊字符。换行符可以作为组合 \n\ 包括,其它字符则可以
作为十六进制 ASCII 代码包括在数据中,例如 \x09 表示制表符。两个连
续的反斜杠字符 (\\) 被解释为单个反斜杠。对于 Sybase IQ,必须将此选
项设置为 OFF。
FORMAT Sybase IQ 支持 ASCII 和二进制输入字段。此格式通常由上述
column-spec 定义。如果省略列的此定义,缺省情况下, Sybase IQ 使用
此选项定义的格式。假定输入行具有 ascii (缺省值)或二进制字段,每
行各一个输入行,并使用列分隔符来分隔各个值。
DELIMITED BY 如果在 column-spec 定义中省略列分隔符,则缺省的列
分隔符为逗号。通过提供单个 ASCII 字符或十六进制字符表示形式可指
定其它列分隔符。DELIMITED BY 子句如下:
... DELIMITED BY '\x09' ...
若要将换行符作为分隔符使用,您可以指定特殊组合“\n”或其 ASCII
值“\x0a”。虽然可以在 column-spec delimiter-string 中指定最多 4 个字
符,但在 DELIMITED BY 子句中只能指定单个字符
STRIP 在打开 STRIP 时(缺省情况),首先将从值中去除尾随空白,然
后再插入这些值。这仅对 VARCHAR 数据起作用;不适用于 ASCII 固定
宽度的插入。要关闭 STRIP 选项,使用如下子句:
... STRIP OFF ...
仅去除不带引号的字符串的尾随空白。带引号的字符串保留其尾随空
白。还可以使用 FILLER 选项对要去除的字节数进行更具体的规定,而不
是去除所有尾随空格。对于 Sybase IQ,更有效的方式是关闭此选项,这
样,在处理尾随空白时,它将遵循 ANSI 标准。(char 数据始终会填充补
空,因此该选项仅影响 varchar 数据。)
WITH CHECKPOINT 缺省设置为 OFF。如果设置为 ON,则成功完成
并记录语句后会执行检查点操作。
LOAD TABLE 语句
530 Sybase IQ
如果未指定 WITH CHECKPOINT ON,而且此后需要恢复,则需要用来装载
表的数据文件才能成功完成恢复。如果指定了 WITH CHECKPOINT ON,而
且此后需要恢复,则恢复在检查点之后开始,并且不需要数据文件。
BLOCK FACTOR 指定块因子或使用的每块记录数(创建磁带时)。此
选项对于从可变长度输入字段插入无效;请改用 BLOCKSIZE 选项。但
是,它确实会影响带固定长度输入字段的所有文件插入(包括从磁盘插
入),因而可能对性能有极大影响。不能与 BLOCK SIZE 选项一起指定此
选项。缺省值为 10,000。
BLOCK SIZE 指定读取输入时应使用的缺省大小(以字节为单位)。此
选项仅影响从文件读取的可变长度输入数据;它对固定长度输入字段无
效。与 BLOCK FACTOR 类似,但对于记录大小与块大小的关系则没有限
制。不能与 BLOCK FACTOR 选项一起指定此选项。缺省值为 500,000。
BYTE ORDER 指定读取时的字节顺序。此选项适用于所有二进制输入
字段。如果未定义,则此选项将会被忽略。Sybase IQ 始终以负责其运行
的计算机的本机格式读取二进制数据(缺省值为 NATIVE)。您还可以指
定以下值:
? HIGH,当多字节数量以高位字节优先时(对于类似 Sun、IBM AIX
和 HP 之类的大型平台而言)。
? LOW,当多字节数量以低位字节优先时(对于类似 Windows 之类的
小型平台而言)。
LIMIT 指定要插入表中的最大行数。缺省值为 0,表示无限制。最大数
量为 2GB - 1。
NOTIFY 指定每次在表中成功插入指定行数时将通过消息通知您。缺
省值为每 100,000 行。此选项的值将覆盖 NOTIFY_MODULUS 数据库选项
的值。
ON FILE ERROR 指定 Sybase IQ 在因为输入文件不存在或没有读取该
文件的正确权限而不能打开此文件时应执行的操作。您可以指定以下操
作中的一个:
? ROLLBACK 中止整个事务(缺省设置)。
? FINISH 结束已完成的插入操作并终止装载操作。
? CONTINUE 返回一个错误但仅跳过该文件以继续执行装载操作。不
能将此选项用于部分宽度的插入。
只允许有一个 ON FILE ERROR 子句。
PREVIEW 显示目标表中输入的布局,包括每列的起始位置、名称和数
据类型。Sybase IQ 将在装载过程开始时显示此信息。如果正在写入日志
文件,此信息也包括在日志中。对于部分宽度插入,此选项尤其有用。
第6 章 SQL 语句
参考手册531
ROW DELIMITED BY 指定最大长度 4 字节的字符串,以指示输入记录
的结尾。仅当行中的所有字段为以下情形中任意一种情形时才能使用此
选项:
? 由列终结符分隔
? 通过 DATE 或 DATETIME column-spec 选项定义数据
? ASCII 固定长度字段
如果任何输入字段包含二进制数据,则不能使用此选项。使用此选项,
行终结符将使任何缺失字段设置为 NULL。所有行均必须具有相同的行
分隔符,并且必须区别于所有列分隔符。行分隔符字符串和字段分隔符
字符串彼此不能为初始子集。例如,不能指定“*”作为字段分隔符并
指定“*#”作为行分隔符,但可以与该行分隔符一起指定“#”作为字
段分隔符。
如果行缺少其分隔符,则 Sybase IQ 返回一个错误并回退整个装载事务。
唯一的例外是回退该行并返回一条警告消息的文件的最后一条记录。在
Windows 上,通常由换行符后跟回车符表示行分隔符。您可能需要将此
指定为该选项或 FILLER 的 delimiter-string (参见上述说明)。
SKIP 用于定义此装载要从输入表的开头跳过的行数。缺省值为 0。
START ROW ID 指定 Sybase IQ 表中应开始插入的行的记录标识号。此
选项用于 partial-width 插入操作,即插入到表的一部分列中的操作。缺省
情况下,在表中有空间的任何位置插入新行,并且每项插入操作都从新
行开始执行。而 Partial-width 插入操作需要从现有的行开始执行。这些操
作还需要按列定位方式将数据从源文件插入目标表,因此指定目标列时
必须按与其对应源列相同的顺序。使用 column-spec 定义每个输入列的格
式。缺省值为 0。有关部分宽度插入的详细信息,请参见《Sybase IQ 系
统管理指南》中的第 7 章“将数据移入和移出数据库”。
仅对部分宽度插入使用 START ROW ID 选项。如果要装载的列中已包含
数据,则插入操作将失败。
UNLOAD FORMAT 指定对于由早期 Sybase IQ 版本(12.0 版之前)创
建的每个列,文件具有 Sybase IQ 内部卸载格式。此装载选项具有以下
限制:
? 对于非 BINARY 列,不能指定任何 column-spec (例如 ASCII 或
PREFIX)。这包括 NULL 规范。
? 如果需要为使用 BINARY column-spec 的列装载 null 值,必须指定
WITH NULL BYTE 关键字,否则 Sybase IQ 将返回错误。
? 不能与 UNLOAD FORMAT 一起使用 DELIMITED BY 或 ROW DELIMITED
BY 选项。
LOAD TABLE 语句
532 Sybase IQ
ON PARTIAL INPUT ROW 指定在装载期间遇到部分输入行时采取的操
作。您可以指定以下操作中的一个:
? CONTINUE 发出一条警告并继续装载操作。这是缺省值。
? ROLLBACK 中止整个装载操作并报告错误。
Partial input record skipped at EOF.
SQLSTATE:QDC32 SQLSTATE: -1000232L
IGNORE CONSTRAINT 指定是否忽略装载期间发生的 CHECK、
UNIQUE、NULL、DATA VALUE 和 FOREIGN KEY 完整性约束违约,
以及在启动回退之前忽略的最大违约数。指定每个 constrainttype 都具有
以下结果:
? CHECK limit 如果 limit 指定为零,则忽略的 UNIQUE 约束违约次数
将为无限次。如果未指定 CHECK,则首次发生任何 CHECK 约束违
约时将导致 LOAD 语句回退。如果 limit 为非零,则 limit +1 次 CHECK
约束违约将导致装载回退。
? UNIQUE limit 如果 limit 指定为零,则忽略的 UNIQUE 约束违约次
数将为无限次。如果 limit 为非零,则 limit +1 次 UNIQUE 约束违约
将导致装载回退。
? NULL limit 如果 limit 指定为零,则忽略的 NULL 约束违约次数将
为无限次。如果 limit 为非零,则 limit +1 次 NULL 约束违约将导致
装载回退。
? FOREIGN KEY limit 如果 limit 指定为零,则忽略的 FOREIGN KEY
约束违约次数将为无限次。如果 limit 为非零,则 limit +1 次 FOREIGN
KEY 约束违约将导致装载回退。
? DATA VALUE limit 如果数据库选项 CONVERSION_ERROR 为 ON,
则将报告错误并且该语句将回退。如果 limit 指定为零,则忽略的
DATA VALUE 约束违约(数据类型转换错误)次数将为无限次。如果
limit 为非零,则 limit +1 次 DATA VALUE 约束违约将导致装载回退。
? ALL limit 如果数据库选项 CONVERSION_ERROR 为 ON,则将报告
错误并且该语句将回退。如果 limit 指定为零,则忽略的所有完整性
约束违约的累积总数将为无限次。如果 limit 为非零,则所有忽略的
UNIQUE、NULL、DATA VALUE 和 FOREIGN KEY 完整性约束违
约的累计总数超过 limit 值时,装载将回退。例如,指定以下 IGNORE
CONSTRAINT 选项:
IGNORE CONSTRAINT NULL 50, UNIQUE 100, ALL 200
完整性约束违约的总数不能超过 200,而 NULL 和 UNIQUE 约束违约
的总数分别不能超过 50 和 100。只要超出这些限制中的任何一个,
LOAD TABLE 语句便将回退。
第6 章 SQL 语句
参考手册533
注意 单个行可具有多个完整性约束违约。每出现一次完整性约束违
约,便计数一次,直至该类型违约的限定值。
如果要记录忽略的完整性约束违约, Sybase 强烈建议将 IGNORE
CONSTRAINT 选项限制设置为非零值。记录过多的违约数会影响装
载性能。
如果在 IGNORE CONSTRAINT 子句中未指定 CHECK、UNIQUE、NULL
或 FOREIGN KEY,则在第一次发生这些完整性约束违约类型中的一种
时,装载将回退。
如果未在 IGNORE CONSTRAINT 子句中指定 DATA VALUE,则当这种类
型的完整性约束违约首次发生时,将会回退装载,但如果数据库选项
CONVERSION_ERROR 设置为 OFF 则例外。如果 CONVERSION_ERROR
设置为 OFF,则对于任何 DATA VALUE 约束违约,将报告警告并继续
装载。
装载完成时,将在 .iqmsg 文件中记录一条与完整性约束违约有关的信息
性消息。此消息包含装载时发生的完整性约束违约次数及跳过的行数。
MESSAGE LOG 指定在其中记录完整性约束违约相关信息的文件的名
称及要记录的违约类型。时间戳表示记录在 MESSAGE LOG 和 ROW LOG
文件中的装载开始和完成时间。必须指定 MESSAGE LOG 和 ROW LOG,
否则将不记录与完整性违约有关的信息。
? 如果未指定 ONLY LOG 子句,则不会记录有关完整性约束违约的任何
信息。只记录表示装载开始和完成时间的时间戳。
? 对于 ONLY LOG 子句中指定的所有完整性约束类型违约,或指定关键
字 WORD 时的所有字索引长度违约,将记录相关违约信息。
? 如果正在记录约束违约,则每次发生完整性约束违约时,将在
MESSAGE LOG 文件中正好生成一行信息。
MESSAGE LOG 文件中的行数(已报告错误)可能超出 IGNORE
CONSTRAINT 选项限制,因为装载是由并行运行的多个线程执行
的。多个线程可以报告约束违约次数已超出指定限定值。
? 如果正在记录约束违约,则对于某一给定行,将在 ROW LOG 文件中
正好记录一行信息,而不考虑在该行发生的完整性约束违约的次数。
MESSAGE LOG 文件中的不同错误数可能与 ROW LOG 文件中的行数
不完全匹配。行数差是由于 MESSAGE LOG 的上述并行装载处理造
成的。
? MESSAGE LOG 和 ROW LOG 文件不能为原始分区。
? 如果已经存在 MESSAGE LOG 或 ROW LOG 文件,新信息将附加到该
文件。
LOAD TABLE 语句
534 Sybase IQ
? 如果为 MESSAGE LOG 或 ROW LOG 文件指定了无效文件名,将产生
错误。
? 如果为 MESSAGE LOG 和 ROW LOG 文件指定了相同的文件名,将产
生错误。
IGNORE CONSTRAINT 和 MESSAGE LOG 选项的各种组合将导致不同的记
录操作,如表 6-11 中所示。
表 6-11:LOAD TABLE 记录操作
注意 如果要记录忽略的完整性约束违约, Sybase 强烈建议将 IGNORE
CONSTRAINT 选项限制设置为非零值。如果单行出现多次完整性约束违
约,则将针对每次违约在 MESSAGE LOG 文件中写入一行。记录过多的
违约数会影响装载性能。
LOG DELIMITED BY 指定 ROW LOG 文件中各数据值之间的分隔符。
缺省分隔符为逗号。
有关 MESSAGE LOG 和 ROW LOG 文件的内容和格式的详细信息,请参
见《Sybase IQ 系统管理指南》的第 7 章“将数据移入和移出数据库”
中的“使用 LOAD TABLE 语句批量装载数据”。
副作用
无。
标准? SQL92 供应商扩展。
? Sybase 不适用。
权限执行 LOAD TABLE 语句所需的权限取决于数据库服务器的 -gl 命令行选项,
如下所示:
? 如果 -gl 选项设置为 ALL,则您必须是表的所有者,拥有 DBA 授权
或拥有 ALTER 权限。
? 如果 -gl 选项设置为 DBA,则您必须拥有 DBA 授权。
? 如果 -gl 选项设置为 NONE,则不允许执行 LOAD TABLE。
已指定 IGNORE
CONSTRAINT?
已指定
MESSAGE
LOG? 操作
是是回退之前,将记录所有被忽略的完整
性约束违约(包括用户指定的限制)。
否是回退之前,将记录第一次完整性约束
违约。
是否不记录。
否否不记录。第一次完整性约束违约将导
致回退。
第6 章 SQL 语句
参考手册535
有关详细信息,请参见《Sybase IQ 实用程序指南》的第 1 章“运行数
据库服务器”中“服务器命令行开关”(第 7 页)的 -gl 命令行选项。
LOAD TABLE 也需要表具有排它锁。
另请参见INSERT 语句(第 511 页)
LOAD_ZEROLENGTH_ASNULL 选项(第 94 页)
NON_ANSI_NULL_VARCHAR 选项(第 113 页)
《Sybase IQ 系统管理指南》的第 7 章“将数据移入和移出数据库”中
的“使用 LOAD TABLE 语句批量装载数据”
《Sybase IQ 故障排除和恢复指南》的第 1 章“故障排除提示”中的“监
视磁盘空间使用情况”

  相关解决方案