分享

针对数据更新的场景,模拟做题

CCDK 2017-12-1 10:54:47 发表于 其它 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 9 6533
题目如下:
1.table1的字段:
    a   b   c
2.第一次将数据导入到表table1
select * from table1;
  table1
    1   aa  123
    2   bb  121
    3   cc  120

3.第二次导入到table1,但是这时候其中的一条数据b字段做了变更,
如果直接导入会导致该条数据出现重复(除了b字段重复以外其余字段都一样)

select * from table1;
  table1
    1   aa  123
    2   bb  121
    3   cc  120
    1   aa  123
    2   dd  121
    3   cc  120

如何做才能使第二次导入数据后,select * from 的结果是:
   table1
    1   aa  123
    2   dd  121
    3   cc  120

不用update更新(因为这只是个简单的例子,数据可能很大很大,需要更新的很多,但是手头只有最新传过来的所有数据源,有些和之前是一模一样,有些字段值却是做了些更新)
附加声明:
第二次插入的数据也可以是这样
    4   ee  200
    5   ff  201
    2   dd  121
或者这样:
    1   ab  131
    2   ba  122
    3   cd  120

重点在如何利用一条sql实现以上三种update。回帖有奖哦





已有(9)人评论

跳转到指定楼层
sstutu 发表于 2017-12-1 11:18:39
这个一条sql完不成,里面涉及到一些业务逻辑关系。你这个应该是首先需要遍历,数据库中是否有这条数据。也就是根据a,c字段。如果有的话,只更新b字段。如果没有就直接插入。
而且这跟你用的什么数据库也有关系。
不过无论是那种数据库,一条sql不可能完成。因为涉及到首先遍历。
sqoop倒是有这个功能。一个sqoop语句应该可以完成。


回复

使用道具 举报

CCDK 发表于 2017-12-1 12:38:42
sstutu 发表于 2017-12-1 11:18
这个一条sql完不成,里面涉及到一些业务逻辑关系。你这个应该是首先需要遍历,数据库中是否有这条数据。也 ...

http://blog.csdn.net/high2011/article/details/52142697你看下这篇文章的方法能实现吗?

回复

使用道具 举报

CCDK 发表于 2017-12-1 12:58:16
sstutu 发表于 2017-12-1 11:18
这个一条sql完不成,里面涉及到一些业务逻辑关系。你这个应该是首先需要遍历,数据库中是否有这条数据。也 ...

http://blog.csdn.net/high2011/article/details/52142697
你看下这样能不能实现
回复

使用道具 举报

CCDK 发表于 2017-12-1 13:00:17
sstutu 发表于 2017-12-1 11:18
这个一条sql完不成,里面涉及到一些业务逻辑关系。你这个应该是首先需要遍历,数据库中是否有这条数据。也 ...

还有就是遍历的话,可能不容易实现。题目上说这只是个例子,真实场景中,一张表的数据量可能是1e rows,遍历的话效率太低了。
sqoop暂时也不考虑的。
回复

使用道具 举报

chyeers 发表于 2017-12-1 15:16:14
不知道具体逻辑啊,难写语句,可以使用 [mw_shl_code=java,true]ON DUPLICATE KEY UPDATE[/mw_shl_code] 试试
回复

使用道具 举报

CCDK 发表于 2017-12-3 15:13:34
chyeers 发表于 2017-12-1 15:16
不知道具体逻辑啊,难写语句,可以使用  试 ...

按照这篇文章的逻辑来,可行http://blog.csdn.net/qq_20641565/article/details/52763663,我测试过了。我在想有没有高效的方法或者逻辑,这个方式的效率不是很理想。
回复

使用道具 举报

fly2015 发表于 2017-12-4 11:53:30

回帖奖励 +1 云币

mapreduce  试试
回复

使用道具 举报

Clint 发表于 2017-12-4 13:55:51
这种可以通过互联网常用的订单拉链的方式实现,row_number 排序  在某些情况下也能实现
回复

使用道具 举报

青峰大辉 发表于 2017-12-5 22:33:23
用hbase就能解决了,最近版本存的就是最后的值
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条