首批通过分布式安全可靠测评,为关键业务系统打造
定义控制文件
更新时间:2025-08-04 14:06:01
通过已定义的控制文件,OBLOADER 可以对被导入的数据进行预处理。
文件模板
控制文件的定义模版如下所示:
lang=java
(
${列名} ${字节偏移位置}(可选) "${预处理函数}"(可选) ${映射定义}(可选),
${列名} ${字节偏移位置}(可选) "${预处理函数}"(可选) ${映射定义}(可选),
${列名} ${字节偏移位置}(可选) "${预处理函数}"(可选) ${映射定义}(可选),
${列名} ${字节偏移位置}(可选) "${预处理函数}"(可选) ${映射定义}(可选)
);
现有 Ctrl 文件的设计如下:
lang=java
server=mysql|oracle (
c1 "nvl(c1, 'not null')" map(field_position),
c2 "none" map(field_position)
);
注意
field_position为导入的数据文件中预处理数据的列位置。- 控制文件的命名规范为 <表名>.ctrl。
- 对于
--cut,--csv,--sql格式数据,无需定义字节偏移位置。 - 预处理函数定义请参考 预处理函数。
注意事项
如表中定义的列名包含了数据库关键字,需在列名前后添加反引号(`)进行转义。示例如下:
lang=java ( `WHEN` "lower(`WHEN`)", c2 "nanvl(c2,'0')" );
OBLOADER 3.x 版本不再支持 map 文件,字段映射功能合并到 ctrl 文件中。示例如下:
lang=java( C1 "NONE" map(1), C2 "NONE" map(1), // 多列映射 C3 "CONSTANT('xxx')", // xxx 为指定的常量 C4 "SEQUENCE(100, 1)" // 100 为初值,1 为步长 );
说明
OBLOADER 3.0.0 之前版本仅支持单列映射,不支持生成列。OBLOADER 3.0.0 之后版本的控制文件中可以配置多列映射以及生成列。生成列------数据文件中不存在的列。
示例
导入
--pos格式的数据。示例如下:lang=java ( c1 position(1:5) "trim(c1)", -- 截取 c1 列的第 1 到第 5 个字节,并且对得到的结果两侧截断空格 c2 position(7:25) "replace(trim(c2),'',' ')" -- 截取 c2 列的第 7 到第 25 个字节,并且对得到的结果两侧截断空格,同时对于空字符用空格替代 );
导入
--cut、--csv和--sql格式的数据。示例如下:lang=java ( c1 "lower(c1)", -- c1 列的值中的字母转换为小写 c2 "ltrim(c2)", -- c2 列的值从左开始截断空格 c3 "rtrim(c3)", -- c3 列的值从右开始截断空格 c4 "substr(c4,0,5)", -- c4 列的值第 1 位置截取 5 个字符长度的字符串 c5 "trim(c5)", -- c5 列的值左右两侧截断空格 c6 "upper(c6)", -- c6 列的值中的字母转换为大写 c7 "nanvl(c7,'0')", -- c7 列的值进行数值验证,非数值则返回 0 c8 "replace(c8,'a','A')", -- c8 列的值中的 a 替换为 A c9 "nvl(c9,'nill')", -- c9 列的值进行判空,若为 null 返回 null 字符串 c10 "to_timestamp(c10,'yyyyMMddHHmmssSSS')", -- c10 列的值进行格式化,若格式失败则返回 null,否则返u回 yyyy-MM-dd HH:mm:ss.SSS c11 "length(c11)", -- c11 列的值进行长度计算 c12 "lpad(c12,5,'x')", -- c12 列的值左侧追加 5 个字节长度字符串 'x' c13 "rpad(c13,5,'x')", -- c13 列的值右侧追加 5 个字节长度字符串 'x' c14 "convert(c14,'utf-8','gbk')", -- c14 列的值从 gbk 转换为 utf-8 字符编码 c15 "concat(c15, '_suffix')", -- c15 列的值与常量进行拼接 c16 "none", -- c16 列的值不作任何处理,直接返回对应列的值 c17 "systimestamp", -- c17 列的值不作任何处理,直接返回当前集群的时间戳 c18 "constant('1')", -- c18 列的值不作任何处理,仅返回常量 1 c19 "tmsfmt(c19,'yyyyMMddHHmmssSSS','20210310000000000','yyyyMMddHHmmssSSS')", -- c19 列的值进行日期验证,验证失败返回默认值 c20 "lpadb(c20,5,'x')", -- c20 列的值左侧追加 5 个字节长度的(单)字符 'x' c21 "rpadb(c21,5,'x')", -- c21 列的值右侧追加 5 个字节长度的(单)字符 'x' c22 "case when length(trim(c22))<18 then 'Y' else 'N' end", -- c22 列的值进行条件真值匹配,若为真返回对应列的值 c23 "case length(trim(c23)) when '1' then 'one' when '2' then 'two' else 'unknown' end", -- c23 列的值进行条件等值匹配,若匹配成功返回对应列的值 C24 "SYSDATE", -- c24 列的值为当前日期 C25 "MASK(C25)", -- c25 列的值进行脱敏,只对列名有效,列中的大、小写字母和数字使用默认脱敏字符替代(默认脱敏字符:大写字母 X,小写字母 x,数字 n) C26 "MASK_FIRST_N(C26,'A','a','b',3)", -- c26 列的值指定大、小写字母以及数字的脱敏字符(默认 N 为 0,从第一个字符开始) C27 "MASK_LAST_N(C27,'A','a','b',3)", -- c27 列的值指定大、小写字母以及数字的脱敏字符(默认 N 为 0,从最后一个字符开始) C28 "MASK_SHOW_FIRST_N(C28,'A','a','b',3)", -- c28 列的值指定不脱敏字符数(默认 N 为 0,从第一个字符开始) C29 "MASK_SHOW_LAST_N(C29,'A','a','b',3)", -- c29 列的值指定不脱敏字符数(默认 N 为 0,从最后一个字符开始) C30 "REVERSE(C30)", -- c30 列的值将字符顺序颠倒 )注意
OBLOADER 3.0.0 之后版本不再支持
--null-replacer,--empty-replacer,--default-date,--date-format选项。