2.10sqoop对null值编码

Apache Sqoop Cookbook 英文版-翻译学习!!
更多信息https://blue-shadow.top/

2.10对null值编码

问题

sqoop对数据的Null值使用Null字符串进行代替,你下游的处理(hive查询,定制化的mapreduce,pig脚本),使用一个不同的值来编码缺失值,你想重写这个默认值。

解决方案

可以使用 --null-string--null-nonstring 参数进行对Null值替换成任意的值,举例来说,使用以
下命令来进行重写 \N 。

sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--null-string '\\N' \
--null-non-string '\\N'

讨论

几乎所有的关系型数据库都允许你将列定义为任意类型,且设置为允许列值为空。这个缺失的值通常被归类为Null。
举例来说一个bool类型列通常包含两个区分值:TRUE个FALSE。此外,这个值可以允许为Null值,当你在你创建表时,明确的允许这个列值可为空,
数据库经常存储Null值作为一个额外的字节附加在列的普通类型里。
由于sqoop支持的导入数据为特定的格式时不原生的支持Null,所以需要对缺失值进行编码为数据,通常,sqoop使用Null常量字符串来代替缺失值。
这个默认的常量字符串可能并不适合你的需求,在你的数据中包含了同样的字符串作为一个普通数值或者在你的下游数据中期望是以不同的值来取代空值。
考虑到更容易的集成hadoop生态系统中的其他组件,sqoop在处理缺失值时区别不同的情况。

  • 对于基于字符串的列类型如使用varchar,char,text或一些其他的,可以通过--Null-string参数来重写默认替换字符串。
  • 对于其他类型,使用参数--null-nonstring参数来重写默认替换字符串。
  • 对于一的连接器针对不同的类型可能不支持使用不同的替换字符串,这样将会导致需要你在两个命令参数中指定相同的值。

转载于:https://www.jianshu.com/p/066e56b36047

猜你喜欢

转载自blog.csdn.net/weixin_34174322/article/details/91186128