立即注册 登录
About云-梭伦科技 返回首页

credit的个人空间 https://www.aboutyun.com/?31943 [收藏] [复制] [分享] [RSS]

日志

sqoop导入oracle数据到hive字符集不同导致中文乱码问题

热度 2已有 10478 次阅读2015-12-4 20:30 | oracle, sqoop, hive, 中文

最近在做sqoop导入oracle数据到hive字符集乱码问题,虽然没有解决,但是现在将一些尝试的过程发布,供大家参考,以后有遇到这种问题的供大家参考少走弯路。
oracle里面的字符集是us7ascii,导入到hive里面后中文乱码hive环境(元数据为mysql)字符集是utf,在命令里面使用convert(rd_yj,'UTF8','US7ASCII')和utl_raw.cast_to_varchar2(utl_raw.cast_to_raw(rd_yj))做转换都不行,

这个是命令:sqoop import --connect jdbc:oracle:thin:@ip:1521:dname --username x --password x --query "select convert(rd_yj,'UTF8','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 

ps:其他oracle的库使用字符集是gbk hive导入不乱码;
考虑过修改数据库字符集(alter database character set  utf),但是数据库字符集建立后一般不改,修改字符集相当于重建数据库,而且已经导入的表不会因为修改字符集而重新编码;
可以考虑用文件入库,oracle的spool可以轻松实现将数据库导出到txt,重建数据库或者新建一个数据库实例,设置对应的字符集,oracle提供了sqlldr的工具可以快速将文本导入oracle,但是现在有几十个表,数据量都很大(300G),数据库又在远程,所以不太好操作;
直接在指令后添加:zxptus7?useUnicode=true&characterEncoding=utf-8,运行报错,不认识这种指令(这个对于mysql导入hive是可以的)
可以考虑做一个Java工具类里面实现将读取数据进行转码,但是这是将sqoop已经导入hive的数据在处理一下,感觉不太合适,
sqoop没有提供导入过程中的转码指令参数,好像不能再导入过程中转码,
sqoop对接db也是走的jdbc,只是帮你做了任务切片和分布~   单点和datax一样的~,所以可以考虑将jdbc作为一个点,
csdn上有一个大神将jdbc的jar hack了(http://download.csdn.net/detail/jiangdongping/4360247#comment ),就是在导入oracle时候可以在URL后面添加转码:jdbc:oracle:thin:@ip:1521:zxptus7?useUnicode=true&characterEncoding=utf-8 

对于乱码产生的一些总结,不一定正确,仅供参考:
数据在oracle里面是以ascii字符集编码构成数据的表现形式,现在导入到另一个环境,编码格式为utf,数据的编码格式就会改变,数据就是变成utf编码构成的数据表现形式,就有可能出现乱码的情况

ascii是所有字符集的基础~   仅能表达英文和符号~    本身就不支持cjk或者其他的文字
编码是将虚拟的字符按照某个编码方式转化为数值表达即byte~
解码即逆过程~
最早的全文字支持是unicode编码表~
所有的utf都属于转码~   是基于unicode~   不存在编码表~
而之后每个国家认为原有的unicode不能体现自己国家文字规律会重新编排新的码表~  例如gbk



路过

雷人
1

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

发表评论 评论 (2 个评论)

回复 credit 2015-12-9 16:38
这个sqoop乱码解决了,将oracle的ascii的字符集修改为他的超集AMERICAN_AMERICA.ZHS16GBK,现在不乱码了,
回复 未央不见 2018-5-31 12:27
我将服务器的字符集改成 AMERICAN_AMERICA.ZHS16GBK,然后再sqoop的机器的环境变量 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;
然后查看hive表,数据集就正常了、、

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条