#yasldr使用指导
# 查看帮助
使用yasldr -H命令可查看帮助信息。
$ yasldr -H
# 查看版本
使用yasldr -V命令可查看版本信息。
$ yasldr -V
# 命令格式
$ YASLDR USERNAME/PASSWORD@IP:PORT {LOAD Options} {LOAD Statement}
USERNAME/PASSWORD@IP:PORT
执行导入命令的数据库用户名、密码、地址,地址默认值为127.0.0.1:1688。
对该用户的权限要求为:
1.对要导入的表应该拥有写权限和查询权限。
2.执行分布式数据库导入时,用户还需要如下系统表权限:
ROUTE$,NODE_INFO$,DIST$,OBJ$,DISTCOL$,TAB$,USER$
GRANT SELECT ON sys.route$ TO USER;
GRANT SELECT ON sys.node_info$ TO USER;
GRANT SELECT ON sys.dist$ TO USER;
GRANT SELECT ON sys.obj$ TO USER;
GRANT SELECT ON sys.distcol$ TO USER;
GRANT SELECT ON sys.tab$ TO USER;
GRANT SELECT ON sys.USER$ TO USER;
3.分布式数据库导入支持连接CN主节点地址和DN主节点地址,若连接备节点则会返回错误。
#以DN备节点地址127.0.0.1:1701为例
$ yasldr sales/sales@127.0.0.1:1701 batch_size=4032 control_text="'LOAD DATA INFILE '/home/yasdb/area.csv' FIELDS TERMINATED BY '|' optionally enclosed by '\"' INTO TABLE area (area_no,area_name,dhq) '"
YashanDB Loader Release 22.2.0.9 x86_64 bbd4bd4
YAS-04880 invalid node type
[YASLDR] execute failed
4.分布式数据库导入数据至复制表仅能通过直连DN主节点的方式进行导入,否则返回错误。
# LOAD Options
导入命令选项,可同时指定多个。
- BATCH_SIZE:每批次的CSV数据行数,默认4032,范围[1,65535]。
- MODE:导入方式,包括BASIC方式和BATCH方式,默认BATCH方式。
- PACKET_SIZE*:协议包大小,单位为字节,仅语法兼容。默认131072,范围[65536,524288]。
- CONN_POOL_SIZE:连接池的大小,默认5,范围[1,32]。
BATCH导入方式不支持interval分区,如需导入具有interval分区的表请在单机部署下选择BASIC方式导入。
BASIC导入方式不支持容错处理,在遇到错误数据或数据违反约束时yasldr会报错退出。
SPLIT模式下仅做文件拆分,不会进行数据导入,因此不会创建连接池。
# LOAD Statement
# 指定方式
指定LOAD语句,可以为如下方式:
CONTROL_FILE:含有单条LOAD语句的控制文件。
示例
#准备本地CSV文件(以/home/yasdb/area.csv为例) $ vi /home/yasdb/area.csv 12|load|1201|loadbranch|12 13|load|1301|loadbranch|13 $ vi /home/yasdb/load.ctl LOAD DATA INFILE '/home/yasdb/area.csv' FIELDS TERMINATED BY '|' optionally enclosed by '"' INTO TABLE branches (branch_no,branch_name,area_no) $ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 mode=batch packet_size=131072 control_file=/home/yasdb/load.ctl YashanDB LOADER VERSION: RELEASE 1.0.0.0 [YASLDR] import succeeded
CONTROL_TEXT:以双引号+单引号包围的单条LOAD语句,只有不指定CONTROL_FILE且指定CONTROL_TEXT时才被选用。
示例
#准备本地CSV文件(以/home/yasdb/area.csv为例) $ vi /home/yasdb/area.csv 12|load|1201|loadbranch|12 13|load|1301|loadbranch|13 $ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA INFILE '/home/yasdb/area.csv' FIELDS TERMINATED BY '|' optionally enclosed by '\"' INTO TABLE area (area_no,area_name,dhq) '" YashanDB LOADER VERSION: RELEASE 1.0.0.0 [YASLDR] import succeeded
Note:
使用CONTROL_TEXT指定时,需同时满足操作系统对特殊字符的转义要求,例如在Linux下对双引号需使用\转义。
# 语句内容
yasldr工具中执行的LOAD语句与LOAD DATA具有相同的语法格式,部分约束不同,相同部分可参考LOAD DATA章节描述。
# option_clause
该语句用于指定加载操作的相关选项。
# ENABLE_BULK
当其值为TRUE时,yasldr工具使用bulkload模式导入LSC表,不支持导入TAC和HEAP表。
parameter_value须为TRUE或FALSE,默认值为FALSE。
# ERRORS
指定数据导入的容错数据条数上限,当数据错误条数达到上限时,终止数据导入。由于数据库服务端不感知该参数,在完成数据导入后数据库客户端会校验该参数,此时若服务端的容错数量超过指定的errors参数,可能会导致实际打印的error数据大于该值。
parameter_value须为一个范围在[0,4294967295]之间的整数,默认值是50。
# RUN_LEVEL
该选项用于指定程序执行的任务类型。
SPLIT模式
执行csv文件拆分的任务,但不执行数据导入。
大数据量情况下(超过500G),建议先执行此命令将csv文件进行拆分后再导入。
为方便用户使用,YashanDB提供一键拆分csv文件和导入csv文件的功能,见工具手册数据导入命令中描述。
需注意的是,yasboot要求执行导入的数据库实例已纳入OM管理,否则需先进行托管。
SPLIT模式仅在使用yasldr工具进行数据导入时实现,无法直接通过LOAD DATA语句使用该模式。
默认不进行文件拆分操作,指定该选项后才进行文件拆分操作。
示例
#area.csv文件内容为:
6|load|601|loadbranch|6
7|load|701|loadbranch|7
$ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS(RUN_LEVEL=SPLIT,DEGREE_OF_PARALLELISM=2) INFILE '/home/yasdb/area.csv' FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '\"' APPEND INTO TABLE area(area_no,area_name,dhq) directory '/home/yasdb/file''"
# LOG
指定生成日志文件,记录执行数据加载任务的过程中过程信息,包括数据导入失败原因,导入成功条数等信息,与input_file_clause语句指定的导入文件相关。无论是否指定本参数,均会生成日志文件,省略则默认在首个导入文件目录下生成与该文件同名,后缀为log的日志文件。
parameter_value支持相对路径及绝对路径,仅支持指定到文件名。
Note:
YashanDB数据导入生成日志文件的相关参数有SILENT、STATS和LOG,三种参数的关系如下:
- SILENT为TRUE时,STATS和LOG参数失效,此时不会生成导入日志、错误数据文件和过滤数据文件。
- SILENT为FALSE时:
- STATS为TRUE,日志文件内包含统计信息。
- STATS为FALSE,日志文件内不包含统计信息,仅包含过程信息。
示例
#自行创建area_log.csv文件,文件内容为:
1|load|101|loadbranch|1|2
2|load|201|loadbranch|2|2
$ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS(DEGREE_OF_PARALLELISM=2,LOG='/home/yasdb/area_log.log') INFILE '/home/yasdb/area_log.csv' fields terminated by '|' INTO TABLE area(area_no,area_name,dhq)'"
--日志文件内容
YashanDB Loader Release 22.2.7.200 x86_64 c877471
Production on 2023-09-15 02:48:27.353
Table AREA:
column_name infile_column
AREA_NO 1
AREA_NAME 2
DHQ 3
Table AREA:
2 logical rows read.
2 rows successfully loaded.
0 rows not loaded due to data errors.
0 rows not loaded because all fields were null.
Elapsed time was: 00:00:00.05
# SILENT
指定导入过程中是否生成记录文件,包括日志文件、错误数据文件及过滤数据文件。当其值为TRUE,表示不生成记录文件;值为FALSE,表示生成记录文件。
parameter_value须为TRUE或FALSE,默认值为FALSE。
# STATS
指定是否打印导入过程中的统计信息。值为TRUE时,会将导入过程中的统计信息打印输出到日志中;值为FALSE时,不会打印统计信息。打印输出信息的日志会保存至导入数据文件所在的路径中,且与该数据文件同名,文件格式为log格式。
parameter_value须为TRUE或FALSE,默认值为FALSE。
具体打印的统计信息如下:
- 导入对象
- READER、BINDER线程的数量、时间和内存
- 收发数据所需时间及内存
- 总时间及内存
示例
#自行创建area_stats.csv文件,文件内容为:
1|load|101|loadbranch|1
2|load|201|loadbranch|2
$ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS(DEGREE_OF_PARALLELISM=2,STATS=TRUE) INFILE '/home/yasdb/area_stats.csv' fields terminated by '|' INTO TABLE area(area_no,area_name,dhq)'"
#日志内容节选
YashanDB Loader Release 22.2.7.200 x86_64 c877471
Production on 2023-09-15 02:49:30.092
Table AREA:
column_name infile_column
AREA_NO 1
AREA_NAME 2
DHQ 3
Table AREA:
2 logical rows read.
2 rows successfully loaded.
0 rows not loaded due to data errors.
0 rows not loaded because all fields were null.
Elapsed time was: 00:00:00.04
--- YashanDB Loader execution statistics ---
The degree of parallelism : 2
The connection pool size : 5
The number of reader : 1
The number of binder : 1
其他选项同开发手册LOAD DATA中对应选项描述。
# input_file_clause
# OPTIONALLY ENCLOSED BY enclosed_by_char
指定导入数据的包围符,只可以指定为双引号,且指定时需要使用\
符号进行转义,不指定时系统默认为按双引号包围。
其他语句同开发手册LOAD DATA中input_file_clause语句定义及描述。
# bad_file_clause
该语句用于指定导入文件的存放错误数据的地址,与input_file_clause语句指定的导入文件相关,其中写入错误数据条数受ERRORS参数限制,无论是否指定该语句,只要导入错误数据就会生成错误数据文件,省略则默认在导入文件目录下生成与导入文件同名,后缀为bad的数据文件,存在同名文件时会覆盖该文件。
支持相对路径及绝对路径,支持指定到目录及文件名,若指定到目录,则在指定目录下生成与导入文件同名,后缀为bad的数据文件,存在同名文件时会覆盖该文件。
错误数据不会被导入至数据库中,下述数据会被写入错误数据文件中:
- 类型转换失败的数据。
- 违反约束的数据。
- 不符合CSV格式的数据。
- 未命中分区的数据。
示例
#自行创建badfile.csv文件,文件位于/home/yasdb/loadexample目录中,文件内容为:
"1","2"
"nihao"
"hello"
#创建表bad_load
CREATE TABLE bad_load(c1 INT,c2 INT);
#执行导入命令
$ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS(DEGREE_OF_PARALLELISM=3) INFILE '/home/yasdb/loadexample/badfile.csv' FIELDS TERMINATED BY ',' BADFILE '/home/yasdb/loadexample/badfile.bad' INSERT INTO TABLE bad_load(c1,c2)'"
#由于"nihao"和"hello"无法转换成int类型数据,如上两种数据会被记录在错误数据文件中,于终端中执行如下命令查看badfile.bad数据文件内容
$ cat badfile.bad
"nihao"
"hello"
# discard_file_clause
该语句用于指定导入文件时过滤数据相关的属性。
# DISCARDFILE discard_file_path
该语句用于指定导入文件的存放过滤数据的地址,与input_file_clause语句指定的导入文件相关,可省略,省略则默认不创建过滤数据文件。如已指定了本语句,但导入数据不满足对应条件,仍不生成过滤数据文件。
支持相对路径及绝对路径,支持指定到目录及文件名,若指定到目录,则在指定目录下生成与导入文件同名,后缀为dsc的数据文件。
过滤数据不会被导入至数据库中,下述数据会被写入过滤数据文件中:
- 整行映射均为NULL的数据。
# DISCARDS|DISCARDMAX discard_number
用于指定数据导入的过滤上限,当数据被过滤的数量达到上限时,终止数据导入,可省略,省略则默认为UINT64_MAX。
如未指定discard_file_path语句但指定了DISCARDS|DISCARDMAX关键字,将在导入文件目录下生成与导入文件同名,后缀为dsc的数据文件,存在同名文件时会覆盖该文件。
示例
#自行创建discardfile.csv,文件位于/home/yasdb/loadexample目录中,文件内容为:
"3","4"
"",""
""
#创建表discard_load
CREATE TABLE discard_load(c1 INT,c2 INT);
#执行导入命令
$ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS(DEGREE_OF_PARALLELISM=3) INFILE '/home/yasdb/loadexample/discardfile.csv' FIELDS TERMINATED BY ',' DISCARDFILE '/home/yasdb/loadexample/discardfile.dsc' INSERT INTO TABLE discard_load(c1,c2)'"
#由于导入文件中的第二行数据均映射为NULL,该行数据会被记录在过滤数据文件中,于终端中执行如下命令查看discardfile.dsc数据文件内容
$ cat discardfile.dsc
"",""
# table_clause
该语句用于指定导入目标表的相关信息。
# when_clause
yasldr工具不支持执行本语句。
其他语句同开发手册LOAD DATA中table_clause语句定义及描述。
# column_clause
该语句用于指定目标表的列字段和导入模式,指定多个列字段以,
分隔。
对于目标表中存在但未在数据加载中指定的列字段,系统自动补NULL值,因此对非空的列字段必须指定,否则数据加载无法成功。
Note:
该语句与LOAD DATA章节中的column_clause语句的语法和功能不同,仅适用于yasldr工具导入。
normal_column_clause
该语句将导入模式指定为普通模式,将导入文件对应列的全部内容用于导入。
鉴于CSV格式文件存在数据大小限制,如需导入较大的数据文件,建议使用LLS模式进行部分导入或者LOBFILE模式进行全导入 。
其中:
- table_column_clause为目标表已存在的列字段名称。
- csv_column_order和nullif_clause语句同开发手册LOAD DATA中定义及描述。
示例
yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS (degree_of_parallelism=3) INFILE '?/csv/load_lls.csv' INTO TABLE sqlldr_lob(c1)'"
filler_column_clause
该语句用于构造伪列,该伪列用于映射csv文件中的LOB文件地址数据,可被lob_column_clause语句引用。
其中:
- filler_column_name为伪列的名称,建议与目标表中已存在列字段名称不同,否则可能导致导入错误。
- csv_column_order语句同开发手册LOAD DATA中定义及描述。
lob_column_clause
该语句将导入模式指定为LOBFILE模式,该模式下通过引用FILLER伪列指向的LOB数据文件,将整个LOB文件导入至目标表指定的LOB列中。
其中:
- table_column_clause为目标表已存在的LOB列字段名称。
- filler_column_name为伪列名称。
- csv_column_order和nullif_clause语句同开发手册LOAD DATA中定义及描述。
- terminated_by_eof语句仅用于语法兼容,无实际含义。
Note:
filler_colomn_clause和lob_column_clause语句需配套使用,否则返回错误。
示例
yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS (degree_of_parallelism=3) INFILE '?/csv/load_lls.csv' INTO TABLE sqlldr_lob(c1,file1 filler,c2 lobfile(file1) terminated by eof)'"
lls_column_clause
该语句将导入模式指定为LLS(Lob Location Specifier)模式,通过指定LLS关键词选择该导入模式。该模式选取数据文件的部分内容或全部内容进行导入,且可指定从任意位置和任意长度开始导入。
其中:
- table_column_clause为目标表已存在的列字段名称。
- csv_column_order和nullif_clause语句同开发手册LOAD DATA中定义及描述。
指定了LLS关键字的目标表列字段映射的导入文件数据列格式需为filename.ext.nnn.mmm/
:
- filename.ext 为包含LOB数据的文件名称。
- nnn 是文件中LOB数据的字节的偏移,仅允许为整数,且偏移量不允许超过LOB数据文件大小且不允许为负数。
- 当输入偏移量的值为正数时,实际偏移量 = 输入值 - 1。
- 值为0时,实际偏移量 = 0。
- 值为负数时返回错误。
- mmm 是字节中的LOB的长度,仅允许为整数。值为-1时表示null,为0时表示导入一个空LOB,不允许将其指定为小于-1的值。
- 正斜杠(/)为终止字符,格式中必须包含该字符,否则报错。
示例
#自行于数据库中创建表sqlldr_lob(c1 int,c2 clob)
#load_lls.csv文件内容为:
LOB_FILE.dat.1.2/
LOB_FILE.dat.2.3/
#导入文件列数据为 LOB_FILE.dat.1.2/,意为从LOB_FILE.dat文件的偏移为0的位置为起始,截取长度为2的数据内容进行导入,正斜杠表示终止。
#导入文件列数据为 LOB_FILE.dat.2.3/,意为从LOB_FILE.dat文件的偏移为1的位置为起始,截取长度为3的数据内容进行导入,正斜杠表示终止。
#导入命令为:
yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS (degree_of_parallelism=3) INFILE '?/csv/load_lls.csv' INTO TABLE sqlldr_lob(c2 LLS)'"
# directory_clause
本语句用于指定对于run_level为split的时候拆分后的文件存放的目录,不指定的时候默认以infile的第一个文件所在的目录作为输出目录。
示例
#于/home/yasdb目录下创建file文件夹
#指定directory_clause
$ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS(RUN_LEVEL=SPLIT,DEGREE_OF_PARALLELISM=2) INFILE '/home/yasdb/area.csv' FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '\"' APPEND INTO TABLE area(area_no,area_name,dhq) directory '/home/yasdb/file''"
#result:拆分后的文件会存放在/home/yasdb/file目录中
#不指定directory_clause
$ yasldr sales/sales@127.0.0.1:1688 batch_size=4032 control_text="'LOAD DATA OPTIONS(RUN_LEVEL=SPLIT,DEGREE_OF_PARALLELISM=2) INFILE '/home/yasdb/area.csv' FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '\"' APPEND INTO TABLE area(area_no,area_name,dhq) '"
#result:拆分后的文件会存放在/home/yasdb目录中
其他语句同开发手册LOAD DATA中table_clause语句定义及描述。