LOAD
功能描述
在数据库迁移或者数据备份时,需要进行数据导入导出,GaussDB 100支持使用“LOAD”命令导入数据。
语法格式
LOAD DATA INFILE "file_name" INTO TABLE table_name [ REPLACE | IGNORE ] [{ FIELDS | COLUMNS } ENCLOSED BY 'ascii_char' [ OPTIONALLY ]] [{ FIELDS | COLUMNS } TERMINATED BY 'string'] [{ LINES | ROWS } TERMINATED BY 'string'] [ TRAILING COLUMNS( COLUMN1[ , COLUMN2, ... ] ) ] [ IGNORE uint64_num { LINES | ROWS }] [ CHARSET string ] [ THREADS uint32_threads ] [ ERRORS uint32_num ] [ NOLOGGING ] [ NULL2SPACE ] [ DEBUG ] [ SET col_name = expr,... ];
参数说明
- file_name
被导入的文件路径和文件名。
- table_name
导入的表名。
- REPLACE
指定REPLACE时,新行将代替有相同唯一键值的现有行。
- IGNORE
指定IGNORE时,导入数据时跳过与现有行唯一键值重复的输入行。
- FIELDS
指定每一列的格式。
- COLUMNS
FIELDS的同义词。
- ENCLOSED BY
指定列的包含符号。
- ascii_char
每一列的包含符号,默认不设定包含符。
取值范围:单个ASCII字符,或者空字符串('',表示不设定包含符)。
- 10进制ASCII字符取值范围为0~127。
- 16进制ASCII字符取值范围为\x00~\x7F。
- 常见转义字符请参见表1。
- OPTIONALLY
仅对字符串和二进制类型增加符号,默认为单引号。
- TERMINATED BY
指定列的分隔字符串。
string
列分隔字符串,默认为“,”。
取值范围:单个或多个ASCII字符,该字符串长度不能超过10。
- 10进制ASCII字符取值范围为0~127。
- 16进制ASCII字符取值范围为\x00~\x7F。
- 常见转义字符请参见表1。
- LINES
一条记录有多行,则可以使用LINES来指定行的结束符。
- ROWS
LINES的同义词。
string
行尾结束符,默认为\n。
取值范围:单个ASCII字符。
- 10进制ASCII字符取值范围为0~127。
- 16进制ASCII字符取值范围为\x00~\x7F。
- 常见转义字符请参见表1。
- TRAILING COLUMNS( column_name[ , ... ] )
指定列名导入数据,其中column_name为列名,至少指定一个列名。
- SET col_name = expr, ...
SET子句用于提供不是来源于输入文件的值,必须位于LOAD命令的末尾处。
其中col_name表示列名,expr为表达式,表达式中可对列名字段进行运算,并且只能含有位于赋值操作符左侧的列名称。set子句中需要至少指定一列及对应表达式。
SET子句设置的列不能重复,不能是“TRAILING COLUMNS”子句中指定的列。
- IGNORE uint64_num
指定忽略的行数,uint64_num表示忽略前uint64_num行,默认值为0。
- CHARSET
指定插入数据的字符集。
string
当前仅支持UTF8无BOM字符集(CHARSET = UTF8)和GBK字符集(CHARSET = GBK),默认UTF8无BOM字符集。
- THREADS
指定并行导入的线程数。
- uint32_threads
表示并行导入的线程数,默认值1,多线程并发是为了提高效率,允许错误条数统计有误差,同时会记录详细错误行号信息,不影响后续的导入。
取值范围:[1, 128]。
- ERRORS
指定允许出错的sql语句数。
- uint32_num
表示允许出错的sql语句数,默认为0。
- NOLOGGING
表示插入数据不记录redo日志和undo日志。必须将目标表设置为append only,才能使用此选项。
- NULL2SPACE
若导入的列数据为空,其类型为CHAR、LOB等字符型并且要求NOT NULL时,将插入一个空格字符代替NULL。
- DEBUG
此选项会将工具运行过程中的调试信息打印到屏幕上。
表1 常见转义字符表 转义字符
意义
ASCII码值(十进制)
16进制值
\a
响铃(BEL)
007
\x07
\f
换页(FF),将当前位置移到下页开头
012
\x0C
\n
换行(LF) ,将当前位置移到下一行开头
010
\x0A
\r
回车(CR) ,将当前位置移到本行开头
013
\x0D
\t
水平制表(HT) (跳到下一个TAB位置)
009
\x09
\v
垂直制表(VT)
011
\x0B
\\
代表一个反斜线字符''\'
092
\x5C
'' (两个单引号)
代表一个单引号(撇号)字符
039
\x27
\"
代表一个双引号字符
034
\x22
\?
代表一个问号
063
\x3F
\0
空字符(NULL)
000
\x00
\ooo
1到3位八进制数所代表的任意字符
三位八进制
-
\xhh
1到2位十六进制所代表的任意字符
二位十六进制
-
说明:由于单引号是SQL的转义符,在指定单引号作为分隔符号时,需要指定两个单引号作为分隔符。例如,
.... enclosed by ''''....
算上符号包含符, 共计4个包含符。
数据导出的转义符:当字段内容中遇到指定的包裹符的时候,用包裹符再转义一次,例如字段内容是1"1导出内容为 "1""1"
示例
将数据文件training_backup导入到表training_new中。
--删除表training。 DROP TABLE IF EXISTS training;
--创建表training。 CREATE TABLE training(staff_id INT NOT NULL,course_name CHAR(50),course_start_date DATETIME, course_end_date DATETIME,exam_date DATETIME,score INT);
--向表training中插入记录1。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'SQL majorization','2017-06-15 12:00:00','2017-06-20 12:00:00','2017-06-25 12:00:00',90); --向表training中插入记录2。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'information safety','2017-06-20 12:00:00','2017-06-25 12:00:00','2017-06-26 12:00:00',95); --向表training中插入记录3。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'master all kinds of thinking methonds','2017-07-15 12:00:00','2017-07-20 12:00:00','2017-07-25 12:00:00',97); --提交事务。 COMMIT;
--导出表training,并增加“|”符号。 DUMP TABLE training INTO FILE '/opt/gaussdb/data/training_backup' FIELDS ENCLOSED BY '|';
--创建要导入数据的表training_new。 CREATE TABLE training_new(staff_id INT NOT NULL,course_name CHAR(50),course_start_date DATETIME, course_end_date DATETIME,exam_date DATETIME,score INT);
--数据文件training_backup导入到表training_new中。 LOAD DATA INFILE "/opt/gaussdb/data/training_backup" INTO TABLE training_new FIELDS ENCLOSED BY '|';
--数据文件training_backup导入到表training_new指定列course_name中。 LOAD DATA INFILE "/opt/gaussdb/data/training_backup" INTO TABLE training_new TRAILING COLUMNS(course_name);
--数据文件training_backup导入到表training_new中,并更新score字段的值。 LOAD DATA INFILE "/opt/gaussdb/data/training_backup" INTO TABLE training_new SET 'score = score + 10';
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论