Sqoop-从mysql导数据到hive中数据类型问题
一、mysql表中数据类型与hive表中数据类型不匹配
1、数字型可以转换数字型或字符型,低精度可转高精度,但不能转为低精度,返回NULL 2、字符型不可转换为数值型,返回NULL
二、mysql表中字段个数与hive表中字段个数不匹配
1、hive表中字段个数少于mysql表,直接丢弃多余的列。 2、hive表中字段个数多于mysql表,多余的列,返回NULL
三、mysql表中有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 . . .