SQOOP如何不将空字段填为NULL?

allenpony 2013-05-15 04:29:30
ORACLE的一些字段是空,导入到HDFS后会发现SQOOP把他填成了null字符,请问这个该怎么解决啊?我想保持该字段为空
...全文
1231 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
慧慧_阿姨 2014-10-10
  • 打赏
  • 举报
回复
如果有连续2个字段都是空,会出现第二为空的字段没有被替换为“\N”,大家遇到过没有
allenpony 2013-06-09
  • 打赏
  • 举报
回复
引用 4 楼 0flying0 的回复:
Sqoop will by default import NULL values as string null. Hive is however using string \N to denote NULL values and therefore predicates dealing with NULL (like IS NULL) will not work correctly. You should append parameters --null-string and --null-non-string in case of import job or --input-null-string and --input-null-non-string in case of an export job if you wish to properly preserve NULL values. Because sqoop is using those parameters in generated code, you need to properly escape value \N to \\N: $ sqoop import ... --null-string '\\N' --null-non-string '\\N'
正解,原来我只用了一个\,难怪不好使,谢谢,同时谢谢斑竹的热心帮忙
u010891873 2013-05-30
  • 打赏
  • 举报
回复
如果为null设置一个初始值,比如0!
u010891873 2013-05-30
  • 打赏
  • 举报
回复
其实3次的问题是有区别的。最开始我是直接导数据,发现日期为空的字段HIVE查询时会报格式错误,于是当时想是否有ORACLE的TO_CHAR或者NVL类似的函数,结果没有,最终在导入的时候填了个默认值。再后来发现中文乱码问题,捣鼓了半天没弄好,不过这个比较简单,可以在前台展示的时候用JAVA进行转码。这次是因为我需要使用NVL函数,于是自己写了个UDF,测试发现很奇怪,nvl(null,'aaa')可以正常使用,如果nvl(column,'aaa'),column的取值为空的话显示的是null而不是aaa,组后查了下数据文件,发现存储的就是null字符串。查了下相关文档,说sqoop就是会将null值变成'null'串,除非用sequencefile格式的存储。但是我试了下,存为这种格式的文件,HIVE无法加载。。。
u010891930 2013-05-30
  • 打赏
  • 举报
回复
如果为null设置一个初始值,比如0!
u010892554 2013-05-30
  • 打赏
  • 举报
回复
撸大湿 2013-05-29
  • 打赏
  • 举报
回复
引用 4 楼 0flying0 的回复:
Sqoop will by default import NULL values as string null. Hive is however using string \N to denote NULL values and therefore predicates dealing with NULL (like IS NULL) will not work correctly. You should append parameters --null-string and --null-non-string in case of import job or --input-null-string and --input-null-non-string in case of an export job if you wish to properly preserve NULL values. Because sqoop is using those parameters in generated code, you need to properly escape value \N to \\N: $ sqoop import ... --null-string '\\N' --null-non-string '\\N'
赞,很有参考价值!谢4楼分享
r6 2013-05-29
  • 打赏
  • 举报
回复
Sqoop will by default import NULL values as string null. Hive is however using string \N to denote NULL values and therefore predicates dealing with NULL (like IS NULL) will not work correctly. You should append parameters --null-string and --null-non-string in case of import job or --input-null-string and --input-null-non-string in case of an export job if you wish to properly preserve NULL values. Because sqoop is using those parameters in generated code, you need to properly escape value \N to \\N: $ sqoop import ... --null-string '\\N' --null-non-string '\\N'
啊彪123 2013-05-22
  • 打赏
  • 举报
回复
如果为null设置一个初始值,比如0!
allenpony 2013-05-15
  • 打赏
  • 举报
回复
引用 1 楼 tntzbzc 的回复:
LZ已经第三次问类似的问题了 先帮顶,等空下来,我花时间研究一下
其实3次的问题是有区别的。最开始我是直接导数据,发现日期为空的字段HIVE查询时会报格式错误,于是当时想是否有ORACLE的TO_CHAR或者NVL类似的函数,结果没有,最终在导入的时候填了个默认值。再后来发现中文乱码问题,捣鼓了半天没弄好,不过这个比较简单,可以在前台展示的时候用JAVA进行转码。这次是因为我需要使用NVL函数,于是自己写了个UDF,测试发现很奇怪,nvl(null,'aaa')可以正常使用,如果nvl(column,'aaa'),column的取值为空的话显示的是null而不是aaa,组后查了下数据文件,发现存储的就是null字符串。查了下相关文档,说sqoop就是会将null值变成'null'串,除非用sequencefile格式的存储。但是我试了下,存为这种格式的文件,HIVE无法加载。。。
撸大湿 2013-05-15
  • 打赏
  • 举报
回复
LZ已经第三次问类似的问题了 先帮顶,等空下来,我花时间研究一下

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧