Sqoop-mysql与hive数据迁移问题

Sqoop-从mysql导数据到hive中数据类型问题

一、mysql表中数据类型与hive表中数据类型不匹配

  • 1、数字型可以转换数字型或字符型,低精度可转高精度,但不能转为低精度,返回NULL
  • 2、字符型不可转换为数值型,返回NULL

二、mysql表中字段个数与hive表中字段个数不匹配

  • 1、hive表中字段个数少于mysql表,直接丢弃多余的列。
  • 2、hive表中字段个数多于mysql表,多余的列,返回NULL

三、mysql表中有NULL值

  • 1、hive表中返回NULL值

四、hive建表未指定分隔符’\001’

  • 1、默认为’\001’,返回正常
  • 2、分隔符不匹配,返回NULL

五、从hive表导数据到mysql中

  • 1、从hive表中,重复导入mysql,导致任务失败的原因是因为mysql中有主键,主键相同的字段是唯一的,不能出现重复,解决方案是在hive表中创建一个自增列row_number() over() as flag_key。需要注意的问题的是字段类型与字段长度,hive的数据类型与mysql的数据不完全相同。
alter table tmp_table_name drop if exists partition (dt = ‘${dt}‘);
alter table tmp_table_name add if not exists partition (dt = ‘${dt}‘);

insert overwrite table tmp_table_name partition(dt = ‘${dt}‘)
select
    row_number()over() as row_number    -- 自增序号
    , id
    ...
from ...

你可能感兴趣的:(sqoop)