copy命令导入含换行符的文本
时间:2010-12-10
来源:互联网
今天做ETL时从 mysql导数据到 greenplum ,有个text字段中包含换行符.导致导入过程诸多错误
mysql不会将换行符转义为\n\r . 而PG中导入文本时 , 固定的以\n\r为行记录分割符,不能自定义文本记录换行符.
当PG直接使用Mysql导出的包含\n\r换行符的文本数据导入时,Mysql中的单条记录会被PG误解为的多条记录.
看看Mysql和PG的导入和导出换行符的区别吧:
一 Mysql导出换行符的格式
1 mysql的原始数据:
select newline_text from user_data;
a
-------
usage
me
to
2 mysql中导的导出方式如下:
select newline_text into outfile 'user.dat' from user_data;
3 查看文本格式
# cat 'user.dat
usage
me
to
# cat 'user.dat|wc -l
3
二 PG导入和导出换行符的方式.
1 PG原始数据
mydb=# select * from text_newline;
a
-------
usage
me
to
(1 row)
2 导出数据
mydb=# copy text_newline to '/var/tmp/newline.txt';
3 查看数据格式
more /var/tmp/newline.txt
usage\n me\nto
4 导入数据
mydb=# create external table ext_newline(a text)
LOCATION ('gpfdist://visit-history1:8081/newline.txt ')
FORMAT 'TEXT';
5 查看数据,格式正确
mydb=# select * from ext_newline;
a
-------
usage
me
to
(1 row)
从上面两者换行符的导入导出格式可以看出来, Mysql中的换行符不做转义,直接包含写在文本数据中
PG导出的换行符做了转义,转义为\n字符串.
解决办法:从这个区别可以看出来,只需要把Mysql中导出换行符做转义,替换成显示的\r或\n就可以用来做PG的导入源了
用sed命令做转义: cat /var/tmp/newline.txt |sed 's/\r\\$//g;$!N;s/\n/\\r/'
可以先用 sed -n -e "l" newline.txt 看看转换前后的隐含字符.
mysql不会将换行符转义为\n\r . 而PG中导入文本时 , 固定的以\n\r为行记录分割符,不能自定义文本记录换行符.
当PG直接使用Mysql导出的包含\n\r换行符的文本数据导入时,Mysql中的单条记录会被PG误解为的多条记录.
看看Mysql和PG的导入和导出换行符的区别吧:
一 Mysql导出换行符的格式
1 mysql的原始数据:
select newline_text from user_data;
a
-------
usage
me
to
2 mysql中导的导出方式如下:
select newline_text into outfile 'user.dat' from user_data;
3 查看文本格式
# cat 'user.dat
usage
me
to
# cat 'user.dat|wc -l
3
二 PG导入和导出换行符的方式.
1 PG原始数据
mydb=# select * from text_newline;
a
-------
usage
me
to
(1 row)
2 导出数据
mydb=# copy text_newline to '/var/tmp/newline.txt';
3 查看数据格式
more /var/tmp/newline.txt
usage\n me\nto
4 导入数据
mydb=# create external table ext_newline(a text)
LOCATION ('gpfdist://visit-history1:8081/newline.txt ')
FORMAT 'TEXT';
5 查看数据,格式正确
mydb=# select * from ext_newline;
a
-------
usage
me
to
(1 row)
从上面两者换行符的导入导出格式可以看出来, Mysql中的换行符不做转义,直接包含写在文本数据中
PG导出的换行符做了转义,转义为\n字符串.
解决办法:从这个区别可以看出来,只需要把Mysql中导出换行符做转义,替换成显示的\r或\n就可以用来做PG的导入源了
用sed命令做转义: cat /var/tmp/newline.txt |sed 's/\r\\$//g;$!N;s/\n/\\r/'
可以先用 sed -n -e "l" newline.txt 看看转换前后的隐含字符.
作者: la19850302 发布时间: 2010-12-10
还是对回车换行的处理方式可能不一样。
作者: renxiao2003 发布时间: 2010-12-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28