M7 发帖数: 219 | 1 我有很多rows(比如说10万条)要写进SQL server. 现在用的是DataTable.
WriteToServer(). 相当于bulk insert, 效率很高。
但是在一个比较少见的情况下,这10万条rows里面会有很多重复,也有可能全都是重
复的。DataTable.WriteToServer 报错primary key violation, 一次只说一条重复。
所以依照error message, 删除重复,再writeToServer的方法效率极低。
DataTable有没有类似bulk merge的操作?
如果没有bulk merge, 至少可以bulk insert到一个temp table, 然后再merge这个
template table to the real destination table. 但是这样分两步的操作,在绝大多
数的情况下(即没有重复的情况下),应该是降低了insert的效率。
有高人指点一下吗?多谢多谢! |
c****e 发帖数: 1453 | 2 groupby一下再写?
如果想提高效率,可以先sample一下让后决定一步还是两步。 |
s***o 发帖数: 2191 | 3 What parameters do you pass into this WriteToServer() method? Is it possible
to do a filtering when you construct the parameters, for example, by using
a HashSet to hold all the primary keys |
c*********e 发帖数: 16335 | 4 很多rows(比如说10万条)是在text file里还是在一个table里?
【在 M7 的大作中提到】 : 我有很多rows(比如说10万条)要写进SQL server. 现在用的是DataTable. : WriteToServer(). 相当于bulk insert, 效率很高。 : 但是在一个比较少见的情况下,这10万条rows里面会有很多重复,也有可能全都是重 : 复的。DataTable.WriteToServer 报错primary key violation, 一次只说一条重复。 : 所以依照error message, 删除重复,再writeToServer的方法效率极低。 : DataTable有没有类似bulk merge的操作? : 如果没有bulk merge, 至少可以bulk insert到一个temp table, 然后再merge这个 : template table to the real destination table. 但是这样分两步的操作,在绝大多 : 数的情况下(即没有重复的情况下),应该是降低了insert的效率。 : 有高人指点一下吗?多谢多谢!
|
g*******n 发帖数: 86 | 5 前一阵遇到了跟你一样的问题,我的方法是在sql server建立一个staging table,有
目标table一样的structure;bulk insert到这里,然后用sql query 给重复的row编上
号,然后只把这些id =1 的row insert到正式table里。这个query用sql里的merge |
c*********e 发帖数: 16335 | 6 用staging table,会不会让用户感觉速度慢了?
【在 g*******n 的大作中提到】 : 前一阵遇到了跟你一样的问题,我的方法是在sql server建立一个staging table,有 : 目标table一样的structure;bulk insert到这里,然后用sql query 给重复的row编上 : 号,然后只把这些id =1 的row insert到正式table里。这个query用sql里的merge
|
M7 发帖数: 219 | 7 我有很多rows(比如说10万条)要写进SQL server. 现在用的是DataTable.
WriteToServer(). 相当于bulk insert, 效率很高。
但是在一个比较少见的情况下,这10万条rows里面会有很多重复,也有可能全都是重
复的。DataTable.WriteToServer 报错primary key violation, 一次只说一条重复。
所以依照error message, 删除重复,再writeToServer的方法效率极低。
DataTable有没有类似bulk merge的操作?
如果没有bulk merge, 至少可以bulk insert到一个temp table, 然后再merge这个
template table to the real destination table. 但是这样分两步的操作,在绝大多
数的情况下(即没有重复的情况下),应该是降低了insert的效率。
有高人指点一下吗?多谢多谢! |
c****e 发帖数: 1453 | 8 groupby一下再写?
如果想提高效率,可以先sample一下让后决定一步还是两步。 |
s***o 发帖数: 2191 | 9 What parameters do you pass into this WriteToServer() method? Is it possible
to do a filtering when you construct the parameters, for example, by using
a HashSet to hold all the primary keys |
c*********e 发帖数: 16335 | 10 很多rows(比如说10万条)是在text file里还是在一个table里?
【在 M7 的大作中提到】 : 我有很多rows(比如说10万条)要写进SQL server. 现在用的是DataTable. : WriteToServer(). 相当于bulk insert, 效率很高。 : 但是在一个比较少见的情况下,这10万条rows里面会有很多重复,也有可能全都是重 : 复的。DataTable.WriteToServer 报错primary key violation, 一次只说一条重复。 : 所以依照error message, 删除重复,再writeToServer的方法效率极低。 : DataTable有没有类似bulk merge的操作? : 如果没有bulk merge, 至少可以bulk insert到一个temp table, 然后再merge这个 : template table to the real destination table. 但是这样分两步的操作,在绝大多 : 数的情况下(即没有重复的情况下),应该是降低了insert的效率。 : 有高人指点一下吗?多谢多谢!
|
g*******n 发帖数: 86 | 11 前一阵遇到了跟你一样的问题,我的方法是在sql server建立一个staging table,有
目标table一样的structure;bulk insert到这里,然后用sql query 给重复的row编上
号,然后只把这些id =1 的row insert到正式table里。这个query用sql里的merge |
c*********e 发帖数: 16335 | 12 用staging table,会不会让用户感觉速度慢了?
【在 g*******n 的大作中提到】 : 前一阵遇到了跟你一样的问题,我的方法是在sql server建立一个staging table,有 : 目标table一样的structure;bulk insert到这里,然后用sql query 给重复的row编上 : 号,然后只把这些id =1 的row insert到正式table里。这个query用sql里的merge
|
g*******n 发帖数: 86 | 13 是慢,但是我这个job是nightly run,对performance要求不是那么高, 最影响速度的
其实是scan一个没有pk的可以允许重复的table的过程 |