更新时间:2024-06-03 GMT+08:00

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使用用例”。