美文网首页
2.8sqoop类型转换

2.8sqoop类型转换

作者: NEO_X | 来源:发表于2019-05-31 14:17 被阅读0次

    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列参数来重设类型,并导入文本数据。

    相关文章

      网友评论

          本文标题:2.8sqoop类型转换

          本文链接:https://www.haomeiwen.com/subject/qawwtctx.html