Apache Sqoop Cookbook 英文版-翻译学习!!
更多信息https://blue-shadow.top/
问题
Sqoop在关系数据库和 Hadoop 之间提供的默认类型映射通常工作得很好。但有时还是需要类型装换。
解决方案
通过参数 --map-column-java , Sqoop可以进行类型转换 。 举例: 将 id类的类型转换为 java类型 long
sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--table cities \
--map-column-java id=long
讨论
这个参数接受以逗号分割的键值对队列,对于键值对以等号来表示,明确的列名作为键,对于JAVA类型作为值。举例来说,如果你需要改变三列c1,c2和c3的数据类型分别改为float,string和string,于是在sqoop命令行中将会包含一下片段:
sqoop import --map-column-java c1=Float,c2=String,c3=String ...
当在MySQL表中有一个以unsigned int类型定义的主键且这列的值大于2147483647时使用这个参数能够容易处理这种情况。
在这种特殊的情况下,MySQL会显示这个列的类型为integer,即使这列的实际类型是unsigned int类型,这种类型最大的值为4294967295由于显示的
类型是int,sqoop将会使用java的int类型,但是这种类型无法保存大于2147483647的值,你需要手动的提供更合适的类型转换。
使用这个参数不限于对MySQL的unsigned类型问题,这个也适用于在sqoop的默认类型不适合你的环境时的情况,sqoop从数据库数据结构中
获取所有的元数据时不需要和存储的数据发生联系,所以对于数据的额外信息需要和数据分开存储,特别是在你想充分使用数据时
如你想使用blob或binary类型来存储文本数据以避免编码问题,可以使用 --column-map-JAVA列参数来重设类型,并导入文本数据。
网友评论