分享

Sqoop export字符集转换问题

tonydu 发表于 2017-3-24 10:01:39 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 11331
背景:
用sqoop把hive分区表的数据同步到oracle中

遇到的问题:
hive表中的中文数据在oracle中显示为????


原因:
hive中的字符集为Uniocode(UTF-8)格式(一个汉字占三个字节)
oracle中为GBK格式(一个汉字占2个字节)

限制:
hive和oracle都是生产环境,我不可能随意去改动其中任何一个!!!!

所以请问下各位,有什么办法可以分享下?

已有(4)人评论

跳转到指定楼层
einhep 发表于 2017-3-24 10:16:38
楼主尝试通过sqoop改变编码试试

[mw_shl_code=bash,true] ./sqoop import  --connect jdbc:oracle:thin:@192.168.1.10:1521:crmdb  --username aaa -P  --query "select  convert(Columns,'UTF8','AMERICAN_AMERICA.ZHS16GBK') from testtable where \$CONDITIONS"  -m 1   --append --target-dir apps/as/hive/testtable[/mw_shl_code]
如果在不行,只能修改sqoop源码了
回复

使用道具 举报

tonydu 发表于 2017-3-24 10:19:29
einhep 发表于 2017-3-24 10:16
楼主尝试通过sqoop改变编码试试

[mw_shl_code=bash,true] ./sqoop import  --connect jdbc:oracle:thin: ...

sqoop export 中没有参数 --query
回复

使用道具 举报

qcbb001 发表于 2017-3-24 14:09:37
tonydu 发表于 2017-3-24 10:19
sqoop export 中没有参数 --query

楼主参考这个
sqoop 常用命令整理
http://www.aboutyun.com/forum.php?mod=viewthread&tid=9983


回复

使用道具 举报

tonydu 发表于 2017-3-27 14:56:30
这个问题最后解决了。
创建oracle的表的时候把原来定义为varchar2的字段定义为nvarchar2.
见一下解释:
1、 varchar:
可变长度的非 Unicode 数据,最长为 8,000 个字符。
2、nvarchar:
可变长度 Unicode 数据,其最大长度为 4,000 字符。
3、char:
固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。
4、nchar
固定长度的 Unicode 数据,最大长度为 4,000 个字符。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条