2-23 、2-24都是ok的 2-25就挂了。
我也没更新json文件。
想也不用想肯定是上游数据源发生变化,字段名修改,字段数增加(如果你是*会有影响) ,字段列减少
看原因 取样的时候错了
执行的SQL为: SELECT * FROM ( SELECT PK_ID FROM ims5_receipt_v_06 SAMPLE (0.1) WHERE (PK_ID IS NOT NULL) ORDER BY DBMS_RANDOM.VALUE) WHERE ROWNUM <= 50 ORDER by PK_ID ASC 具体错误信息为:java.sql.SQLException: ORA-01445: 无法从不带保留关键字的表的联接视图中选择 ROWID 或采样
检查oraclereader读取的数据是一张视图,
和原始视图对比,发现多了字段? 这个应该不是重点,因为我column的字段都是一个个的不是*,上游数据元增加字段对我没有影响
然后思考怎么在sample处报错了?
检查view的语法,发现以前是 create view xxx_v as select * from table1
变成了 create view xxx_v as select * from table1 join table2
明白了 join的时候 如果你采用了splitPk ,源码里会走sample方法进行采样,所以会出现问题。
解决 直接干掉splitPK。。。
思考
1.怎么保证上游数据变化了,下游数据能及时感知?
做好各部门的沟通。。。告诉对方哪些表我们已经在同步了,如果修改提前告知。
2.有没有更好的解决办法。
当初采用splitPk就是为了加快速度。现在直接干掉有点因噎废食。
其实可以保持原先的view不变也就是拉取table1的数据,然后新建一个同步任务拉取table2
在hive里进行关联。各有利弊吧。