這是在ssis中實現不同操作的最佳選擇? 我有一個超過200列的表格,包含超過1000萬行。 我需要從這個表中獲得雙向行。是明智的使用執行sql任務(與選擇查詢重複刪除行)還是有任何其他方式來實現這一點在ssis如何在10億行表中執行重複數據刪除ssis
我明白, ssis排序組件重複刪除行...但這是一個阻塞組件,它不是一個好主意,請使用...請讓我知道你對此的看法
這是在ssis中實現不同操作的最佳選擇? 我有一個超過200列的表格,包含超過1000萬行。 我需要從這個表中獲得雙向行。是明智的使用執行sql任務(與選擇查詢重複刪除行)還是有任何其他方式來實現這一點在ssis如何在10億行表中執行重複數據刪除ssis
我明白, ssis排序組件重複刪除行...但這是一個阻塞組件,它不是一個好主意,請使用...請讓我知道你對此的看法
我不會打擾SSIS的一對夫婦的查詢會做;你也有大量的數據的,所以我建議你在運行查詢之前檢查執行計劃,並優化指標
http://www.brijrajsingh.com/2011/03/delete-duplicate-record-but-keep.html
檢查出來的小文章中,我就同一主題
由於寫據我所知,排序組件是唯一允許你區分重複的轉換。或者你可以使用類似SQL的命令。
如果排序操作有問題,那麼您應該在數據訪問模式規範中使用(假設您的源爲DB)「SQL命令」。選擇不同的數據,就是這樣..你也可以節省一點時間,因爲ETL不必經歷分類組件。
我曾在3個步驟,這樣做的話吧:
此方法允許我使用以下消息記錄每個副本:「行1000是行100的副本」。
我還沒找到比這更好的方法。早些時候,我在MillionUni上創建了一個獨特的索引,將百萬行直接轉儲到其中,但是我無法使用「快速加載」,這太慢了。
這裏是填充哈希列的一種方法:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
StringBuilder sb = new StringBuilder();
sb.Append(Row.Col1String_IsNull ? "" : Row.Col1String); sb.Append("|");
sb.Append(Row.Col2Num_IsNull ? "" : Row.Col2Num.ToString()); sb.Append("|");
sb.Append(Row.Col3Date_IsNull ? "" : Row.Col3Date.ToString("yyyy-MM-dd"));
var sha1Provider = HashAlgorithm.Create("SHA1");
Row.Hash = sha1Provider.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()));
}
如果200列證明是一個苦差事你的this article部位應激勵你。它將所有列對象的值循環爲單個字符串。
並比較散列,使用this method:
byte[] previousHash;
int previousRowNo;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (StructuralComparisons.StructuralEqualityComparer.Equals(Row.Hash, previousHash))
{
Row.DupRowNo = previousRowNo;
Row.DirectRowToDuplicate();
}
else
{
Row.DirectRowToUnique();
}
previousHash = Row.Hash;
previousRowNo = Row.RowNo;
}
正是爲什麼分類元件是不是有用?據我所知,這是唯一可以讓你區分重複的轉變。或者你可以使用類似SQL的命令。 – DNac
您是否嘗試檢索不同的行或從原始表中刪除重複項? –
排序組件排序之前,它執行重複數據刪除..所以我的問題是是否使用排序或使用sql。哪一個更好 – user1254579