设为首页 收藏本站
查看: 256|回复: 0

[经验分享] infobright的load加载

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-5 09:02:15 | 显示全部楼层 |阅读模式

Infobright有个高性能的数据装载机,和标准的mysql装载机不同,infobright装载机更注重的是速度,但是支持的load语法要比mysql的要少,只支持变长文本。IEE还支持mysql装载机和insert。

默认装载机(Default Loader):

ICE版本只支持infobright装载机(txt_variable)

IEE版本默认是使用mysql装载机,拥有更强大的错误处理能力。但是不会像infobright装载机那么快。通过在mysql中修改环境变量@bh_dataformat来切换不同的装载机,例如:

使用变长文本数据的infobright装载机:

mysql> set@bh_dataformat = 'txt_variable';

使用二进制数据的infobright装载机:

mysql> set@bh_dataformat = 'binary';

mysql装载机:

mysql> set@bh_dataformat = 'mysql';

infobright装载机语法(Infobright Loader Syntax):

infobright只支持下面简单语法。

LOAD DATA INFILE'/full_path/file_name'

INTO TABLEtbl_name

[FIELDS

[TERMINATED BY'char']

[ENCLOSED BY'char']

[ESCAPED BY'char']

];

数据装载完默认是自动提交的。如果想导入完检查数据后再提交,可以通过Set AUTOCOMMIT=0命令将自动提交关掉。这样的话在完成导入完需要手动支持commit提交或执行rollback命令回滚。

参数(FIELDS Clause

FIELDS选项是可选的,如果不指定的话默认值如下:

CLAUSE DEFAULTVALUE

FIELDSTERMINATED BY ';' (semicolon)

FIELDS ENCLOSEDBY '"' (double quote)

FIELDS ESCAPEDBY '' (none)

而mysql loader不指定默认的参数为:

CLAUSE DEFAULTVALUE

FIELDSTERMINATED BY '\t'       (tab)

FIELDS ENCLOSEDBY ''    (none)

FIELDS ESCAPEDBY '\\'   (\)

因为默认值不同,所以不加FIELDS的情况下,直接把mysql表导出,再导入到infobright中是不成功的。还有就是FIELDS分隔符必须是一个单一的字符。Mysql loader可以为多个字符。

FIELDSTERMINATED BY

列分隔符可以用逗号,分号,竖线,制表符等等,但必须都是一个字符。重要的是列分隔符不会出现在真实数据中(除非设置了escaped或者enclosed)

FIELDS ENCLOSEDBY

是用于将字符类型的字段用指定字符包围起来。默认是双引号。如果不想使用可以设置为NULL值。如果设置了ENCLOSED需要保证该字符没有在实际数据中出现(除非设置了escaped)

FIELDS ESCAPEDBY

如果TERMINATED指定的列分隔符出现在真实数据里,那么它必须被ESCAPED指定的字符转义,或者被ENCLOSED设置的字符将整个字段包围起来。

举个例子:

文本里有一行数据 1,one,two or three,1234

1是一个字段,one,two or three是第二个字段,1234是第三个字段

要想把这行数据导入到数据表,要么出现在字符串里的分隔符转义,要么把包含分隔符的整个列包围起来。因为如果设置逗号为分隔符,infobright不知道one与two之间的逗号到底是分隔符还是真实的字符

文本和load命令:

   1,one\, two or three,1234

   LOAD DATA INFILE '/usr/tmp/file1.txt' INTO TABLE test_table1 FIELDS

TERMINATED BY',' ENCLOSED BY 'NULL' ESCAPED BY '\\';

   这样的文本就可以满足要求,分隔符是逗号,而且字符串也没有设置包围的字符,one与two之间的逗号也被加了转义,可以成功导入。

另一种方法:

   1,"one, two or three",1234

   LOAD DATA INFILE '/usr/tmp/file2.txt' INTO TABLE test_table1 FIELDS

TERMINATED BY',' ENCLOSED BY '"';

   这样文本也满足要求,分隔符为逗号,字符串中虽然出现了分隔符,但是字符串被双引号包围了,所以不用进行转义也可以识别,因为ESCAPED默认值是空,所以可以省略。也可以成功导入。

mysql> select* from test_table1;

+------+-------------------+-----------+

| id | textfield| numerical |

+------+-------------------+-----------+

| 1 | one, twoor three | 1234 |

| 1 | one, twoor three | 1234 |

+------+-------------------+-----------

FIELDS ESCAPEDBY

刚才介绍了如果列分隔符出现实际数据中应该怎么处理,那么ENCLOSED的符号出现在真实数据中呢。下面举个例子one“and” two是文本字段

1,"one\"and\" two",1234

LOAD DATA INFILE'/usr/tmp/file3.txt' INTO TABLE test_table1 FIELDS

TERMINATED BY',' ENCLOSED BY '"' ESCAPED BY '\\';

   分隔符是逗号,字符串包围符号是双引号,包围符出现在了真实数据中,所以必须有转义符才能被infobright识别,通过设置ESCAPED。

mysql> select* from test_table1;

+------+-------------------+-----------+

| id | textfield| numerical |

+------+-------------------+-----------+

| 1 | one, twoor three | 1234 |

| 1 | one, twoor three | 1234 |

| 1 | one"and" two | 1234 |

+------+-------------------+-----------+

上面的两个例子说明了,我们在数据清洗时候需要对特殊字符进行转义,在导入时才会被infobright识别。

ESCAPE CHARACTERS

有的文本包含转义字符,这些设置ESCAPED,否则会作为字符串载入

例如:

2,other\t\t\ttext,4567

看看加与不加的区别

LOAD DATA INFILE'/usr/tmp/file4.txt' INTO TABLE test_table1 FIELDS

TERMINATED BY',' ENCLOSED BY 'NULL' ESCAPED BY '\\';

LOAD DATA INFILE'/usr/tmp/file4.txt' INTO TABLE test_table1 FIELDS

TERMINATED BY',' ENCLOSED BY 'NULL';

mysql> select* from test_table1;

+------+--------------------------------+-----------+

| id | textfield| numerical |

+------+--------------------------------+-----------+

| 2 | other text| 4567 |

| 2 | other\t\t\ttext | 4567 |

+------+--------------------------------+-----------+

2 rows in set(0.00 sec)

最后需要注意的是,infobright装载机问题,在相同参数的情况导入再导出,数据会发生变化。下面举个例子说明infobright装载机和mysql的处理的区别。

CREATE TABLE`test1` (
  `n` char(10) COLLATE latin1_bin DEFAULT NULL,
  `m` char(10) COLLATE latin1_bin DEFAULT NULL
) ENGINE=BRIGHTHOUSE DEFAULT CHARSET=latin1 COLLATE=latin1_bin

CREATE TABLE`test2` (
  `n` char(10) COLLATE latin1_bin DEFAULT NULL,
  `m` char(10) COLLATE latin1_bin DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin

mysql> select* from test1;
+———+———+
| n   | m   |
+———+———+
| a”\b | c”\d |
+———+———+
1 row in set (0.01 sec)

mysql> select* from test2;
+———+———+
| n   | m   |
+———+———+
| a”\b | c”\d |
+———+———+
1 row in set (0.00 sec)

mysql> select* from test1 into outfile ‘/tmp/test1.txt’ FIELDS TERMINATED BY ‘;’ ENCLOSED BY‘“’ ESCAPED BY ‘\\’;   
Query OK, 1 row affected (0.01 sec)

mysql> select* from test2 into outfile ‘/tmp/test2.txt’ FIELDS TERMINATED BY ‘;’ ENCLOSED BY‘“’ ESCAPED BY ‘\\’;
Query OK, 1 row affected (0.00 sec)

[iyunv@wanglocal]# cat /tmp/test1.txt
“a\”\b”;“c\”\d”
[iyunv@wang local]# cat /tmp/test2.txt
“a\”\\b”;“c\”\\d”

mysql> loaddata infile ‘/tmp/test1.txt’ into table test1 FIELDS TERMINATED BY ‘;’ ENCLOSEDBY ‘“’ ESCAPED BY ‘\\’;
Query OK, 1 row affected (0.10 sec)

mysql> loaddata infile ‘/tmp/test2.txt’ into table test2 FIELDS TERMINATED BY ‘;’ ENCLOSEDBY ‘“’ ESCAPED BY ‘\\’;  
Query OK, 1 row affected (0.00 sec)

mysql> select* from test1;
+———+———+
| n   | m   |
+———+———+
| a”\b | c”\d |
| a | c"d |
+———+———+
2 rows in set (0.00 sec)

mysql> select* from test2;
+———+———+
| n   | m   |
+———+———+
| a”\b | c”\d |
| a”\b | c”\d |
+———+———+
2 rows in set (0.00 sec)

这个例子对BRIGHTHOUSE和myisam表分别进行导出再导入操作,TERMINATED是分号,ESCAPED符号是双引号,转义符是反斜杠。

而表内数据的内容包含了双引号和反斜杠。

Mysql loader的处理比较智能。数据中包含了ENCLOSED,所以在双引号前加了转义符反斜杠。数据中本来就有的反斜杠,因为和ESCAPED的反斜杠,也进行了一次转义。

Infobrightloader只处理了和ENCLOSED一样的字符。

这个例子说明Infobright loader在使用上受到的限制还是比较多的。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135211-1-1.html 上篇帖子: infobright源码安装 下篇帖子: Linux系统上线后系统初始化脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表