Streamsets2.6.0 导数据常见问题总结
1)、执行任务时有表空间的问题
A)、问题描述
Retries exhausted, giving up after as per stage configuration. First error: java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
B)、问题解答方法
这个是由于在导数据时遇到了大表对数据进行了排序,导致oracle服务器端不能对表进行排序,大的表建议更换为单表消费,直接写SQL的形式。
2)、单表消费oracle数据库表中有Binary_FLOAT字段
A)、问题描述
B)、问题解答方法
出现这种情况使用streamsets2.6.0的JDBC单表消费在SQL Query写SQL,使用oracle的to_number来解决
3)、读取oracle数据到hive出现null值
A)、问题描述
Orace数据库中表中有ID字段,并且该字段有数据,把数据导入到Hive中出现NULL值
B)、问题解决方法
解决方式使用JDBC单表消费,写SQL的形式,使用oracle上的to_char函数来进行转换
4)、读取oracle速度慢的问题
A)、问题描述
从oracle数据库中把T_PRESSUREDATA表中的数据导入到Hive中时,目前这个表有46705131行数据,有主键,没有联合主键,使用全量的方式导数据,出现速度在39/S
B)、问题解决方法
查看表中的字段中有一个F_YSKYLZ字段是CLOB类型,其中该字段的长度如下所示:
00--500长度的有:13812236
500--1000长度的有:6747902
8000--20000长度的有:763710
1000-3000长度的有:16247792
3000-8000长度的有:8668237
导数据刚开始的速度块是由于数据表该字段没有数据,大概在117000行数据时开始有数据,并且该字段的长度是随机的
select v.tab_count,count(v.tab_count) from (select (case when tan <='500' then '50' when tan >='500' and tan <='1000' then '1000' when tan >='1000' and tan <='3000' then '3000' when tan >='3000' and tan <='8000' then '8000' when tan >='8000' and tan <='20000' then '20000' when tan >='20000' and tan <='40000' then '20000' else '60000' end) as tab_count from (select length(F_YSKYLZ) as tan from T_PRESSUREDATA where F_YSKYLZ is not null)a)v group by v.tab_count;
如果把该字段去掉速度会提升很多
5)、导数据出现字段长度不够的情况
A)、问题描述
HIVE_METADATA_07-Invalld value 0 for precision in filed ID,mininum 1,maxinum 38
B)、问题解决方法
出现这种情况使用JDBC单表消费在SQL Query写SQL,使用oracle的to_number函数来解决 或者使用Field Tyle Converter组件对该字段进行转换为STRING
6)、oracle以date类型的字段不能进行实时抓取
A)、问题描述
oracle以date类型的字段作为主键不能进行实时抓取,如果时number字段就可以,原因是date的数据类型精确到日,在这天内可能有多个数据,可能丢数据,不过可以考虑联合主键的方式来搞,不过这种方式也有丢数据的可能性
B)、问题解决方法
这种方法也有可能丢数据,详细请查看官网说明