Tôi có một luồng dữ liệu để di chuyển dữ liệu từ cơ sở dữ liệu cũ sang cơ sở dữ liệu mới. Thiết kế cũ có tất cả dữ liệu và thông tin lịch sử (thay đổi) được lưu trữ trong một bảng duy nhất có "phiên bản" (số nguyên tăng) so với hàng.
Thiết kế mới có hai bảng, một bảng cho trạng thái "hiện tại" của dữ liệu và bảng kiểm toán (hoặc lịch sử) ghi lại các thay đổi bằng cách sử dụng kích hoạt. Do đó, chỉ có một hàng tồn tại cho dữ liệu "hiện tại" và có nhiều hàng lịch sử.
Trong gói SSIS của tôi, tôi đang sử dụng các thành phần sau để sao chép dữ liệu hiện tại vào một bảng nhưng sau đó gửi tất cả dữ liệu vào bảng kiểm toán.
Multicast được sử dụng để phân chia luồng dữ liệu và Phân chia có điều kiện xác định hàng "hiện tại" và gửi nó đến bảng Đơn hàng (bảng không thực sự được gọi là Thứ tự , trước khi bất kỳ ai nhận xét về việc sử dụng một từ dành riêng cho tên bảng).
Tôi đã tạo luồng này vì tôi không thể thấy cách sử dụng Phân chia có điều kiện để gửi tất cả dữ liệu đến đích Kiểm toán và chỉ hàng hiện tại cho hàng khác.
Tôi giả định rằng việc tạo tất cả dữ liệu trùng lặp và sau đó loại bỏ nó thành Trash Destination không hiệu quả lắm và vì tôi có khoảng 52 triệu hàng để di chuyển, tôi lo lắng việc chuyển đổi sẽ mất nhiều ngày.
Có cách nào tốt hơn (hiệu quả hơn) để đạt được sự phân chia dữ liệu không?
Lưu ý về dữ liệu: Tôi đã áp dụng a row_number()
cho dữ liệu cho phép tôi xác định hàng "hiện tại" là số 1, tất cả các hàng bao gồm "hiện tại" cần phải đi đến đích của bảng Kiểm toán.
EDIT: Tôi đã tìm thấy một giải pháp thay thế cho Multicast và Chia tách có điều kiện được đề xuất bởi bài đăng trên blog này từ SSIS Junkie: Nhiều kết quả đầu ra từ một chuyển đổi tập lệnh đồng bộ
Nó sử dụng một Thành phần Script để gửi dữ liệu đến một hoặc nhiều đầu ra. Tôi đang thử phương pháp đó để xem liệu nó có nhanh hơn không nhưng sau khi thấy câu trả lời và đề xuất của Kenneth về việc xóa Điểm đến Thùng rác, tôi không chắc nó sẽ như thế nào.