分享

字符集转换问题

credit 发表于 2015-12-3 11:01:40 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 9 9806
各位大神想请教一个问题,就是现在oracle的字符集是US7ASCII,hive的元数据编码为utf,现在将数据使用sqoop导入到hive后中文乱码,我想请教一下,导入后数据的字符集就改变成了utf,还是说只是因为hive和oracle的里面的字符集设置的不同导致显示乱码(就是说导入到hive里面的数据字符集还是US7ASCII格式的),请大家帮忙

已有(9)人评论

跳转到指定楼层
arsenduan 发表于 2015-12-3 11:40:46
导入的时候,先改成GBK,然后在按照sqoop的方式导入,也就是说试试进行两次编码转换
回复

使用道具 举报

credit 发表于 2015-12-3 12:18:27
arsenduan 发表于 2015-12-3 11:40
导入的时候,先改成GBK,然后在按照sqoop的方式导入,也就是说试试进行两次编码转换

您的意思是先在oracle里面做一下转码,然后在sqoop?,第一步在什么时候操作,您有例子,或者说的详细点,谢谢了
回复

使用道具 举报

arsenduan 发表于 2015-12-3 12:21:08
credit 发表于 2015-12-3 12:18
您的意思是先在oracle里面做一下转码,然后在sqoop?,第一步在什么时候操作,您有例子,或者说的详细点 ...

下面改成GBK,然后在按照你的sqoop方式来操作
convert(nsrdzdah,'GBK','US7ASCII')
如果还不明白
你把你GBK的sqoop语句贴出来。
回复

使用道具 举报

credit 发表于 2015-12-3 13:25:42
arsenduan 发表于 2015-12-3 12:21
下面改成GBK,然后在按照你的sqoop方式来操作
convert(nsrdzdah,'GBK','US7ASCII')
如果还不明白

您说的是不是这样:sqoop import --connect jdbc:oracle:thin:@ip:1521:dname --username x --password x --query "select convert(rd_yj,'ZHS16GBK','US7ASCII') from dj_fzcgl where \$CONDITIONS"  -m 1 --target-dir /user/hive/warehouse/sichuan.db/dj_fzcgl_test --hive-table dj_fzcgl_test --hive-import --as-parquetfile
已经试过了,还是乱码啊,
回复

使用道具 举报

arsenduan 发表于 2015-12-3 14:51:41
credit 发表于 2015-12-3 13:25
您说的是不是这样:sqoop import --connect jdbc:oracle:thin:@ip:1521:dname --username x --password x ...

sqoop import --connect jdbc:oracle:thin:@ip:1521:dname --username x --password x --query "select convert(rd_yj,'ZHS16GBK','US7ASCII') from dj_fzcgl where \$CONDITIONS"  -m 1 --target-dir /user/hive/warehouse/sichuan.db/dj_fzcgl_test --hive-table dj_fzcgl_test --hive-import --as-parquetfile
你的GBK是什么形式:
下面形式?不需要转换,也不会出现乱码
sqoop import --connect jdbc:oracle:thin:@ip:1521:dname --username x --password x --query "select rd_yj from dj_fzcgl where \$CONDITIONS"  -m 1 --target-dir /user/hive/warehouse/sichuan.db/dj_fzcgl_test --hive-table dj_fzcgl_test --hive-import --as-parquetfile


回复

使用道具 举报

credit 发表于 2015-12-3 15:35:52
arsenduan 发表于 2015-12-3 14:51
sqoop import --connect jdbc:oracle:thin:@ip:1521:dname --username x --password x --query "select c ...

还是不太懂您说的第一次转换,能不能加一下您的qq
回复

使用道具 举报

arsenduan 发表于 2015-12-3 16:11:50
credit 发表于 2015-12-3 15:35
还是不太懂您说的第一次转换,能不能加一下您的qq

convert(rd_yj,'ZHS16GBK','US7ASCII')我是想你在这个基础上已经转换成GBK了,然后在转换一次,变成UTF-8
回复

使用道具 举报

credit 发表于 2015-12-3 16:13:54
额,懂了做一个convert的嵌套使用,我试试,感谢
回复

使用道具 举报

credit 发表于 2015-12-3 16:20:39
arsenduan 发表于 2015-12-3 16:11
convert(rd_yj,'ZHS16GBK','US7ASCII')我是想你在这个基础上已经转换成GBK了,然后在转换一次,变成UTF-8 ...

sqoop import --connect jdbc:oracle:thin:@ --username  --password --query "select convert(convert(rd_yj,'ZHS16GBK','US7ASCII'),'utf8','ZHS16GBK') from dj_fzcgl where \$CONDITIONS"  -m 1 --target-dir /user/hive/warehouse/sichuan.db/dj_fzcgl_test --hive-database sichuan --hive-table dj_fzcgl_test --hive-import --as-parquetfile  
还是不行啊

QQ图片20151203161826.png
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条