BULK INSERT

说明

按照指定格式将数据文件导入到神通数据库中。

语法

bulk_insert ::=

hint ::=

csv_option ::=

参数

tablename

导入目标表的名字。

data_file

数据文件的完整路径,该数据文件包含要加载到指定表中的数据。BULK INSERT 可以从磁盘(包括网络、软盘、硬盘等)加载数据。

data_file 必须基于运行ShenTong的服务器指定有效路径。如果 data_file 为远程文件,则指定通用命名约定 (UNC) 名称。

CHECK_CONSTRAINTS

指定在大容量导入操作期间,必须检查所有对目标表CHECK约束。 如果没有 CHECK_CONSTRAINTS 提示,则忽略所有 CHECK 约束。 始终强制使用 UNIQUE、PRIMARY KEY或 NOT NULL 约束。

FOREIGNKEY_CONSTRAINTS

指定在大容量导入操作期间,必须检查所有对目标表的 FOREIGN KEY 约束。 如果没有 FOREIGNKEY_CONSTRAINTS 提示,则忽略所有 FOREIGN KEY 约束。 始终强制使用 UNIQUE、PRIMARY KEY 或 NOT NULL 约束。

FIRE_TRIGGERS

对目标表中定义的任何插入触发器都将在大容量导入操作期间运行。 如果不指定 FIRE_TRIGGERS,将不运行任何插入触发器。

FIELDTERMINATOR = 'field_terminator'

指定用于数据文件的字段终止符。

非CSV模式下默认的字段终止符是\t(制表符)

CSV模式下默认的字段终止符是逗号

FIRSTROW = first_row

指定要加载的第一行的行号。

默认值是1表示数据文件中的第一行

TABLOCK

指定数据导入使用直接路径导入方式。 直接路径导入方式可以提高数据的导入性能,但可能会造成一定的磁盘空间浪费。 直接路径导入方式下,可通过参数 ENABLE_READ_ON_DP_INSERT 设置导入数据时是否支持脏读查询, 默认情况下只支持并行导入,不支持脏读查询,当打开此开关时支持脏读查询。

KEEPIDENTITY

指定导入数据文件中的标识值用于标识列。 如果没有指定 KEEPIDENTITY,则此列的标识值可被验证但不能导入, 并且数据库将根据表创建时指定的serial类型自动分配一个值。 如果数据文件不包含该表中标识列的值,请使用一个格式文件指定在导入数据时表或视图中的标识列被忽略; 数据库自动为此列分配唯一的值。

KEEPNULLS

指定在大容量加载操作中空列应保留一个空值,而不是对插入的列分配任何默认值。

LASTROW = last_row

默认值为 0,表示指定数据文件中的最后一行。

ROWTERMINATOR = 'row_terminator'

指定对于 char 和 widechar 数据文件要使用的行终止符。 如果未指定,则将第一次检测到的\r\n或\n作为行终止符。

MAXERRORS = max_errors

指定数据中允许出现的最大语法错误数,超过该数量后,大容量加载操作将取消。 大容量加载操作中未能导入的每一行都将被忽略并且被计为一次错误。

如果未指定 max_errors,则默认值为 10。

ERRORFILE = 'file_name'

指定用于收集格式有误的行的文件。这些行将按原样从数据文件复制到此错误文件中。

错误文件是发生文件解析错误时创建的。如果错误文件已经存在则会将错误行添加到文件末尾。 另外,还创建了一个扩展名为 .ERROR.txt 的控制文件。此文件引用错误文件中的每一行并提供错误诊断。纠正错误后即可加载数据。

注意:只有指定了ERRORFILE选项以后才进行容错处理,否则一遇到错误就会报错退出。

CSV

打开逗号分隔值(Comma Separated value)模式,指定数据文件为csv格式文件。

HEADER

声明文件包含一个标题头行,包含文件中每个字段的名字。导入时,第一行被忽略。

QUOTE = 'quote_string'

声明 CSV 模式里的引号字符。缺省是双引号。

ESCAPE = 'escape_string'

声明在 CSV 模式下应该出现在数据里 QUOTE 字符值前面的字符。缺省是 QUOTE 值(通常是双引号)。

NULL = 'null string'

指定代表null值的字符串。以分隔符方式解析出来的、非引号包含的字段值如果等于该字符串,则表示NULL值。

注解

只有指定ERRORFILE选项以后才会进行容错处理,错误行被复制到指定的文件中。如果错误行数超过MAXERRORS值(默认为10),导入将会报错退出,此时应当检查指定的格式是否符合数据文件。

指定TABLOCK选项,在数据库为归档模式且导入表为logging时,会产生大量redo日志;否则仅产生少量日志。如果导入过程仅记录少量日志,如果对数据库进行介质恢复,则直接路径导入更改的页面均标记为逻辑错误,在用户访问到这些页面时,系统会报错该页面无法访问。

未指定TABLOCK选项,默认情况下会记录大量日志,配置参数ENABLE_NORMAL_NOLOGGING可设置非直接路径下导入表的nologging属性是否有效。该参数为TRUE时,表明nologging属性对非直接路径导入操作有效,记录少量日志,若非直接路径插入操作失败可能会导致数据丢失或数据库无法启动;参数为FALSE,表明nologging属性对非直接路径插入操作无效。

BULK INSERT的文件目录必须在参数EXTERN_DATA_DIR_PATH目录或其子目录下面。

示例

-- 导入一个CSV文件。
BULK INSERT lineitem FROM 'd:\lineitem.csv' WITH(CSV);

-- 按指定分隔符导入文本文件
BULK INSERT lineitem FROM 'd:\tpch\lineitem.tbl'
WITH(FIELDTERMINATOR = '|', ROWTERMINATOR = '\r\n');

-- 导入文件中的第101到200行
BULK INSERT lineitem FROM 'd:\tpch\lineitem.tbl'
WITH(FIELDTERMINATOR = '|', FIRSTROW = 101, LASTROW = 200);

-- 指定错误文件开启文件解析容错功能
BULK INSERT lineitem FROM 'd:\tpch\lineitem.tbl'
WITH(FIELDTERMINATOR = '|', ROWTERMINATOR = '\r\n', ERRORFILE = 'd:\lineitem.err.txt');