加载功能
在V8. 6.1. 1版本GBase 8a中,加载功能直接集成在GBase 8a内部,不需 要额外部署外部加载工具。
与V8. 5.1. 2版本单机加载工具相比,新版加载工具具备如下一些特性和优 点:
1) 提供面向用户的SQL接口,更符合用户的使用习惯;
2) 支持从通用数据服务器拉取数据,支持ftp/http/hdfs/sftp等多种协 议;
3) 支持普通文本、gzip压缩、snappy压缩、Izo压缩等多种格式数据文 件;
4) 支持普通文本与定长文本的加载(format 3和format 4),并与 V8.5.1.2版本格式兼容;
5) 支持错误数据溯源功能,可以准确定位错误数据在源文件中的位置;
语法格式
语法:
LOAD DATA INFILE ' file_list' INTO TABLE tbl_name [options]
tbl_name:
[database_name. ] table_name
options:
[DATA_FORMAT number [HAVING LINES SEPARATOR]]
[NULL_VALUE ' string ]
[FIELDS
[TERMINATED BY ' string ]
[ENCLOSED BY ' string ]
[PRESERVE BLANKS]
[AUTOFILL]
[{LENGTH|DEFINER} ' string ]
[TABLE_FIELDS ' string ]
]
[LINES
[TERMINATED BY ' string']
]
[MAX_BAD_RECORDS number]
[DATETIME FORMAT format]
[DATE FORMAT format]
[TIMESTAMP FORMAT format]
[TIME FORMAT format]
[TRACE number]
[TRACE_PATH ' string ]
[PARALLEL number]
[SKIP_BAD_FILE number]
[SET col_name = value[,...]]
参数说明:
FILE_LIST:待加载文件列表。支持以本地文件方式和URL方式指定数据 文件路径,以英文逗号(',')作为多个文件的分隔符。
scheme://[user:password@]host[:port]/path,
scheme://[user:password@]host[:port]/path
同时文件名、目录部分均支持使用通配符,具体如下表所示。默认对路径 及文件进行匹配。当关闭目录、文件通配功能时,对于SQL中出现的通配符按 7.2节的使用约束当做特殊字符处理。
通配符 含义 说明
* 匹配0或多个字符 a*b
a与b之间可以有任意长度的任意字符, 也可以一个也没有,如aabcb, axyzb, a012b, ab。
? 匹配任意一个字符 a?b
a与b之间必须也只能有一个字符,可 以是任意字符,如aab, abb, acb, a0b。
[list] 匹配list中的任意 单一字符 a[xyz]b
a与b之间必须也只能有一个字符,但 只能是X或y或z,如:axb, ayb, azb。
[!list] 匹配除list中的 任意单一字符 a[!0-9]b
a与b之间必须也只能有一个字符,但 不能是阿拉伯数字,如axb, aab, a-b。
[c1-c2] 匹配c1-c2中的任 意单一字符如: [0-9] [a-z] a[0-9]b
0与9之间必须也只能有一个字符如 a0b, a1b... a9b。
{string1,str ing2,...}(此 功能不支持, {}作为普通字 符处理) 匹配sring1或 string2 (或更多)其
一字符串,string也 可以是通配符 a{abc, xyz, 123} b
a与b之间只能是abc或xyz或123这 三个字符串之一。(匹配三次,得到三 次的结果,即最多可以有三个重复的结 果)
{1..3}.txt 这种情况就只可能是
1.txt 或 2. txt 或 3. txt a{1,2}b{3, 4}这样会依次匹配输出 结果是 a1b3 a1b4 a2b3 a2b4
例如:
http://10. 10.1.1/data/??????/*.tbl
OPTIONS:
DATA_FORMAT:用来指定使用哪种方式解析数据文件并加载。指定为3,表 示使用文本方式加载。指定为4表示使用定长方式加载。如果某列数据可能 包含了行分隔符,则需要在SQL中输入'HAVING LINES SEPARATOR,子句。指定 为5,表示使用文本文件宽松模式,即数据源文件为包围符中含有换行符和包 围符文本文件,或多列少列文本文件。
NULL_VALUE:用于指定空值字符,支持不超过15个任意字符的组合,参 数值以引号包围,指定方式与字段包围符一样。
FIELDS 子段:
TERMINATED BY:用于指定字段分隔符,支持不超过15个任意字符的组合, 支持任意字符,参数值以单引号包围,仅当使用文本方式加载时有效。可使用 字符本身(仅限可见字符,如:"丨”)、C风格转义字符仗口: "\a")、\xhh十六进 制仗口: "\xFF")或X''十六进制(如:"x' 09'")四种方式指定。例如:'|',表 示用|作为分隔字符。
ENCLOSED BY:用于指定字段包围符,支持任意单字符,参数值以单引号 包围,仅当使用文本方式加载时有效。可使用字符本身(仅限可见字符,如:"|")、 C风格转义字符(如:"\a")、\xhh十六进制(如:"\xFF")或x''十六进制(如: "x'09'")四种方式指定。
PRESERVE BLANKS :用于设定是否保留字段内容两端的空格,默认不保留 空格。
AUTOFILL:用于设定是否启用缺失列自动补齐功能,启用该参数后,对缺 失分割符的字段数据按照default值或者NULL值进行加载,默认不自动补齐。
LENGTH|DEFINER:在使用定长模式加载时,用于设定字段长度的参数。定 长格式数据导入时,设置每个字段的长度,有多个字段时,用逗号分隔。
TABLE_FIELDS:用于指定列加载,对于日期时间类型可以设置每一列的格 式。
SET:指定列值加载,加载系统将待加载文件和指定加载列值加载到集群 系统的表中。输入的类型应为常量,包括字符串、整数值、浮点值和NULL。
1、 支持指定所有列类型加载值;
2、 指定列值为常量值(包括NULL),包括字符串(单引号包围)、十进制 数值(1。)、浮点值(1。.9)、NULL、16进制表示的字符串(0xbac3)、 科学计数法(10e4);
3、 支持多列同时指定加载值。最多可SET表列数-1 ,如果设置的列数与 表定义中的列数一致将报错:Specified all fields .
4、 支持 format=3、format=4 以及 format=5;
使用限制说明:
1、 输入除常量值外的其他值,如列名、表达式等会报错,报错信息为 Column 'addr' should be const value;
2、 指定的列不能存在于TABLE_FIELDS中,否则报错;
3、 如果没有指定AUTOFILL,指定值的列数+数据中列数之和必须等于表 定义或者TABLE_FIELDS (若指定了 TABLE_FIELDS)中的列数,否则会 产生错误数据;如果指定了 AUTOFILL,则可以小于表定义的列数,缺 少的列会自动补全。如果TABLE_FIELDS列数+SET列数小于表定义的 列数,能够正常加载,没有涉及的列按照default值补齐;
4、 同一列在SQL中不能重复指定,否则报错。
LINES子段:
TERMINATED BY:行分隔符,支持任意单字符,参数值以引号包围。指定 方式与包围符一样。默认行分隔符为'\n'。
MAX_BAD_RECORDS :在每次加载的任务中,设定错误数据行数的上限。当 本次加载任务产生的错误数据行数大于max_bad_records设定的值时,加载任 务回滚,加载工具报错退出。此参数取值范围为:[。,4294967295] o此参数为 可选参数,默认不限制错误条数。。表示只要有错误数据就报错退出。
DATE FORMAT:用来指定date列类型的默认格式,默认为'%Y-%m-%d'。
DAT