avatar
M7
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的效率。
有高人指点一下吗?多谢多谢!
avatar
c*e
2
groupby一下再写?
如果想提高效率,可以先sample一下让后决定一步还是两步。
avatar
s*o
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
avatar
c*e
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的效率。
: 有高人指点一下吗?多谢多谢!

avatar
g*n
5
前一阵遇到了跟你一样的问题,我的方法是在sql server建立一个staging table,有
目标table一样的structure;bulk insert到这里,然后用sql query 给重复的row编上
号,然后只把这些id =1 的row insert到正式table里。这个query用sql里的merge
avatar
c*e
6
用staging table,会不会让用户感觉速度慢了?

【在 g*******n 的大作中提到】
: 前一阵遇到了跟你一样的问题,我的方法是在sql server建立一个staging table,有
: 目标table一样的structure;bulk insert到这里,然后用sql query 给重复的row编上
: 号,然后只把这些id =1 的row insert到正式table里。这个query用sql里的merge

avatar
M7
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的效率。
有高人指点一下吗?多谢多谢!
avatar
c*e
8
groupby一下再写?
如果想提高效率,可以先sample一下让后决定一步还是两步。
avatar
s*o
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
avatar
c*e
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的效率。
: 有高人指点一下吗?多谢多谢!

avatar
g*n
11
前一阵遇到了跟你一样的问题,我的方法是在sql server建立一个staging table,有
目标table一样的structure;bulk insert到这里,然后用sql query 给重复的row编上
号,然后只把这些id =1 的row insert到正式table里。这个query用sql里的merge
avatar
c*e
12
用staging table,会不会让用户感觉速度慢了?

【在 g*******n 的大作中提到】
: 前一阵遇到了跟你一样的问题,我的方法是在sql server建立一个staging table,有
: 目标table一样的structure;bulk insert到这里,然后用sql query 给重复的row编上
: 号,然后只把这些id =1 的row insert到正式table里。这个query用sql里的merge

avatar
g*n
13
是慢,但是我这个job是nightly run,对performance要求不是那么高, 最影响速度的
其实是scan一个没有pk的可以允许重复的table的过程
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。