LOAD DATA (for gs_loader)
功能描述
用于gs_loader工具的控制文件语法,关于gs_loader使用方法的更多信息请参考《工具参考》中“客户端工具 > gs_loader”章节。
语法格式
LOAD [ DATA ] [CHARACTERSET char_set_name] [INFILE [directory_path] [filename ] ] [BADFILE [directory_path] [filename ] ] [OPTIONS(name=value)] [{ INSERT | APPEND | REPLACE | TRUNCATE }] INTO TABLE table_name [{ INSERT | APPEND | REPLACE | TRUNCATE }] [FIELDS CSV] [TERMINATED [BY] { 'string' }] [OPTIONALLY ENCLOSED BY { 'string' }] [TRAILING NULLCOLS] [ WHEN { (start:end) | column_name } {= | !=} ‘string’ ] [( col_name [ [ POSITION ({ start:end }) ] ["sql_string"] ] | [ FILLER [column_type [external] ] ] | [ CONSTANT "string" ] | [ SEQUENCE ( { COUNT | MAX | integer } [, incr] ) ]|[NULLIF (COL=BLANKS)] [, ...] )]
参数说明
- CHARACTERSET
字符集。
取值范围:字符串,目前可指定为'AL32UTF8'、'zhs16gbk'或'zhs32gb18030'。
注意:控制文件中CHARACTERSET指定的字符集,应该和文件的编码格式保持一致,否则会报错或者导入数据乱码。
- INFILE
当前关键字无效,并在控制文件中需要单独占一行,运行时候会忽略该关键字。需要用户在gs_loader命令行参数中指定对应的数据文件。
- BADFILE
当前关键字无效,运行时候会忽略该关键字,如果gs_laoder 命令行参数没有指定badfile,则会根据对应控制文件名称生成对应的badfile文件。
- OPTIONS
其中只有skip和rows功能生效,skip=n为导入时跳过前n条数据,rows=n为导入多少行数据后进行一次提交。命令行和控制文件同时指定时,命令行优先级更高。
- INSERT | APPEND | REPLACE | TRUNCATE
导入模式。
INSERT:如果表中有数据,则报错。
APPEND:直接插入数据。
REPLACE:如果表中有数据,则全部删除,然后再插入。
TRUNCATE:如果表中有数据,则全部删除,然后再插入。
在写控制文件(.ctl)文件时,在INTO TABLE table_name语句前后都可以指定(导入模式,INSERT | APPEND | REPLACE | TRUNCATE),使用优先级为:在INTO TABLE table_name语句后面指定导入模式优先级高于在INTO TABLE table_name语句前面指定导入模式,在INTO TABLE table_name语句后面指定导入模式会覆盖在前面指定的导入模式。
- FIELDS CSV
标识使用copy的CSV模式。在CSV模式下分隔符缺省值为逗号,引号字符的缺省值为双引号。
当前CSV模式下,被引号包裹的换行符被视为字段数据的一部分。
- table_name
表的名称(可以有模式修饰)。
取值范围:已存在的表名。
- TERMINATED [BY] { 'string' }
在文件中分隔各个字段的字符串,分隔符最大长度不超过10个字节。
取值范围:不允许包含\.abcdefghijklmnopqrstuvwxyz0123456789中的任何一个字符。不支持将nul字符设置为分隔符。
缺省值:在文本模式下,缺省是水平制表符,在CSV模式下是一个逗号。
开启nul字符兼容,即compatible_nul=true,如果指定分隔符为' '空格字符(0x20)时需要注意,所判断的分隔符为数据文件中已存在的空格字符,并非nul字符转换而来的空格字符。
- OPTIONALLY ENCLOSED BY { 'string' }
CSV格式文件下的引号字符。
仅在使用FIELDS CSV参数明确说明的CSV模式下缺省值:双引号。
其余模式下无缺省值。
- 设置OPTIONALLY ENCLOSED BY { 'string' }时,数据左边不带引号字符,如果有引号字符,数据左右都必须为奇数个,但不必相等。
- 当前仅CSV模式支持OPTIONALLY ENCLOSED BY { 'string' }。当指定OPTIONALLY ENCLOSED BY { 'string' }时,默认进入CSV模式。
- TRAILING NULLCOLS
当数据加载时,若数据源文件中一行的多个字段缺失的处理方式。
当一行数据的最后存在一个或多个字段为空时,按照空值处理将其导入到表中。不设置则会报错字段为空,将这行数据当作错误数据处理。
- WHEN { (start:end) | column_name } {= | !=}
对行中的start到end之间的字符串,或者根据列名进行行过滤。
取值范围:字符串。
- 当guc参数enable_copy_when_filler=on(默认)时,支持根据FILLER类型列进行过滤。当GUC参数enable_copy_when_filler=off时,则不支持。
- WHEN条件后的常量字符串中不支持'\0'、'\r'等特殊字符。
- POSITION ({ start:end })
对列进行处理,根据start到end范围获取对应字符串。
- "sql_string"
对列进行处理,列表达式,根据表达式计算列的取值。详见《工具参考》中“客户端工具 > gs_loader”章节中“列表达式”。
取值范围:字符串。
- FILLER
对列进行处理,如果出现FILLER,则这个字段跳过。
- column_type [external]
在导入数据时,根据不同的数据类型对数据进行处理。详见详见《工具参考》中“客户端工具 > gs_loader”章节中“数据类型”。
- CONSTANT
对列进行处理,将插入的对应字段设置为常量。
取值范围:字符串。
- SEQUENCE ( { COUNT | MAX | integer } [, incr] )
对列进行处理,生成对应的序列值。
- COUNT:表示根据表中数据的行数开始计算。
- MAX:表示根据表中这一列的最大值开始计算。
- integer:表示从用户指定的值开始计算。
- incr:表示每次递增多少。
- NULLIF
对列进行处理,在多行导入场景中,若列名后未指定sysdate、constant、position、列表达式等运算时,执行导入操作,表现为未指定NULLIF关键字的列字段设置为空。
当前只支持COL POSITION() CHAR NULLIF (COL=BLANKS)语法。具体使用详见详见《工具参考》中“客户端工具 > gs_loader”章节中“NULLIF使用用例”。