免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11086 | 回复: 2
打印 上一主题 下一主题

copy命令导入含换行符的文本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-10 14:09 |只看该作者 |倒序浏览
今天做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 看看转换前后的隐含字符.

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2010-12-10 14:53 |只看该作者
还是对回车换行的处理方式可能不一样。

论坛徽章:
0
3 [报告]
发表于 2010-12-10 16:11 |只看该作者
实际上刚才还是测试了,还是有很多错误,用sed做转义还是情况非常复杂

有时把多行合并为一行了.不知道为毛.

大爷的,只好用函数转换了,在mysql导数据前,就用 replace函数对所有text字段的换行符做转义

select replace(User_MemoText,'\r\n','\\n')  into outfile 之类
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP