�"og:type" content="webpage">�" /> �"> hive数据导入mysql存在的问题_随笔_内存溢出

阅读 20

hive数据导入mysql存在的问题,第1张

   背景: hive中虽然有数据类型,但是int、double、string都可以在hive中存储为string类型,hive中String类型是没有长度限制的。hive中空值有三种情况,null(NULL值)、'\0'字符

(hive自定义的空字符)、''(空字符)。

  由于hive在存储上存在以上情况,当把数据导入mysql会导致一下问题:   1、字符长度太小的异常。由于mysql定义表结构的时候会定义字段

长度值,当hive中数据的int、double、String长度大于mysql表定义的长度会出现mysql字段定义的数据长度太多而出现异常。

  2、int、double空数据异常。hive中int、double的空字符是有以上三种情况,会导致空值存储到mysql时出现类型不匹配而出现异常。   

解决办法:

  1、根据业务场景设定mysql字段长度。

  2、在数据导从hive导入mysql之前把空字符替换成默认字符。

大部分利用hive做数据分析的步骤是先用hive将统计结果导出到本地文件或者Hive的其他表中,再将本地文件导入到mysql或者利用sqoop将Hive表导入到mysql中。

今天同事给推荐了一个利用udf函数直接将统计结果导入mysql的方法。

步骤为

hive>add jar /usr/lib/hive/lib/hive-contrib-0.9.0-cdh4.1.2.jar

Added /usr/lib/hive/lib/hive-contrib-0.9.0-cdh4.1.2.jar to class path

Added resource: /usr/lib/hive/lib/hive-contrib-0.9.0-cdh4.1.2.jar

hive>add jar /usr/share/java/mysql-connector-java-5.1.17.jar

Added /usr/share/java/mysql-connector-java-5.1.17.jar to class path

Added resource: /usr/share/java/mysql-connector-java-5.1.17.jar

hive>CREATE TEMPORARY FUNCTION dboutput AS 'org.apache.hadoop.hive.contrib.genericudf.example.GenericUDFDBOutput'

hive>select dboutput('jdbc:mysql://localhost/result','root','123456','INSERT INTO dc(code,size) VALUES (?,?)',code,size) from accesslog limit 10

注:result为mysql数据库名,dc为数据库result中的表名 dc(code,size)括号中的字段为mysql表dc字段,values(?,?)对应hive统计结果的值 后面的code,size为hive表中的字段,accesslog表示hive中的表名称。


通过以上步骤即可将hive统计结果直接导入到mysql数据库中。

欢迎分享,转载请注明来源:

内存溢出

原文地址:

https://outofmemory.cn/zaji/8596444.html
异常
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
共享wifi 共享wifi 一级用户组
mysql查询每个月最后一条数据
上一篇
2023-04-18
toad如何连接mysql
2023-04-18

发表评论
请登录后评论... 登录
提交

    评论列表(0条)
保存
{label} {label}