Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Tải trọng gia tăng trong SSIS

Mọi người luôn vội vàng hơn. Họ muốn dữ liệu của họ gần như ngay bây giờ. Và hơn nữa, dữ liệu ngày càng lớn hơn. Vì vậy, bạn không thể sử dụng các kỹ thuật cũ tốt vì chúng đã “đủ tốt”. Nó phải được nhanh chóng. Và các bước ETL không phải là một sự miễn trừ. Đây là lúc tải gia tăng phát huy tác dụng. Và nếu bạn đang ở trên trang này, có thể bạn đang tìm kiếm tải tăng dần trong SSIS.

Và đó là trọng tâm của chúng tôi trong bài viết này. Chúng tôi sẽ thực hiện so sánh và ví dụ để giải thích từng bước tải dữ liệu gia tăng trong SSIS. Và hãy yên tâm rằng nó sẽ không làm bạn khó hiểu khi tìm ra điều này.

Đây là những gì có sẵn trong cửa hàng dành cho bạn:

  • Tải trọng đầy đủ và tải gia tăng trong ETL là gì?
  • Tải dữ liệu gia tăng trong SSIS là gì?
  • Sự khác biệt giữa tải đầy đủ và tải tăng dần trong SSIS
  • Tải trọng gia tăng trong SSIS bằng CDC hoặc Thay đổi tính năng thu thập dữ liệu
  • Tải trọng gia tăng trong SSIS bằng cách sử dụng cột DateTime
  • Cách thực hiện tải gia tăng trong SSIS bằng Tra cứu
  • Công cụ tốt nhất để tải dữ liệu SSIS

Mỗi phần sẽ có các tiểu mục. Bạn có thể chuyển đến chủ đề mình cần bằng cách nhấp vào các liên kết.

Trước khi chúng ta bắt đầu với các ví dụ, hãy so sánh tải gia tăng với tải trọng đầy đủ ngược lại.

Tải trọng đầy đủ và tải trọng cộng dồn trong ETL là gì

Bất kể bạn sử dụng công cụ ETL nào, Tải đầy đủ và Tăng dần đều có cùng ý nghĩa. Hãy mô tả chúng bên dưới.

Toàn tải trong ETL

Như tên cho thấy, Full Load trong ETL đang tải TẤT CẢ dữ liệu từ nguồn đến đích. Một bảng đích được cắt bớt trước khi tải mọi thứ từ nguồn. Đó là lý do tại sao kỹ thuật này còn được gọi là Tải trọng phá hủy . Kỹ thuật này cũng dễ thực hiện hơn. Và điều này cũng đảm bảo tính toàn vẹn của dữ liệu cao nhất. Nhưng kích thước dữ liệu của bạn ngày hôm nay lớn hơn ngày hôm qua. Vì vậy, nếu bạn sử dụng điều này trên dữ liệu ngày càng tăng, quá trình này sẽ chậm hơn theo thời gian.

Các trường hợp sử dụng ETL đầy tải

  • Kích thước của dữ liệu nguồn nhỏ và sẽ không tăng lên đáng kể trong nhiều năm tới. Các ví dụ bao gồm danh sách màu sắc, một số danh mục / phân loại, danh sách các quốc gia và thành phố, v.v.
  • Thật khó để nói nguồn nào mới hay nguồn đã thay đổi.
  • Dữ liệu cần phải hoàn toàn giống nhau từ nguồn đến đích
  • Lịch sử của dữ liệu không liên quan và bị ghi đè thường xuyên hơn

Tải trọng gia tăng trong ETL

Trong khi đó, Tải trọng tăng dần cũng giống như các đề xuất tên. Chỉ dữ liệu đã thay đổi sẽ được tải từ nguồn đến đích. Điều này được thực hiện tăng dần theo thời gian. Những cái không thay đổi sẽ vẫn nguyên như vậy. Điều này hơi khó thực hiện. Bạn cần đảm bảo rằng tất cả các thay đổi đã được tập hợp và tải đến đích. Nhưng điều này sẽ chạy nhanh hơn Tải đầy đủ trên dữ liệu rất lớn.

Các trường hợp sử dụng tải gia tăng ETL

  • Kích thước dữ liệu rất lớn và truy vấn sẽ rất chậm đối với các tập kết quả lớn
  • Các thay đổi rất dễ truy vấn
  • Dữ liệu đã xóa cần được giữ lại ở điểm đến, chẳng hạn như hệ thống kiểm tra

Tải trọng gia tăng trong SSIS là gì

Các thành phần cơ bản của tải gia tăng trong SSIS được thể hiện trong Hình 1.

Tải tăng dần trong SSIS có xu hướng phức tạp hơn tùy thuộc vào yêu cầu của bạn. Nhưng “thẻ công thức” đơn giản trong Hình 1 bao gồm những gì bạn cần để “nấu” dữ liệu theo từng bước. Nắm bắt các thay đổi trong dữ liệu là một phần khó khăn. Bạn có thể làm hỏng điểm đến nếu không cẩn thận.

Trong các phần tiếp theo, bạn sẽ thấy cách thực hiện tải gia tăng trong SSIS với các ví dụ. Chúng bao gồm sử dụng ChangeData Capture (CDC), cột DateTime và tra cứu. Bạn cũng sẽ thấy điều này được thực hiện như thế nào bằng cách sử dụng các thành phần Devart SSIS.

Hãy so sánh tải gia tăng với SSIS toàn tải trong phần tiếp theo.

Sự khác biệt giữa Tải đầy đủ và Tải tăng dần trong SSIS

Bạn đã thấy tải gia tăng trông như thế nào trong SSIS (Hình 1). Trong khi đó, đây là cách hoạt động với Toàn tải SSIS trong Hình 2 bên dưới.

Sự khác biệt giữa tải đầy đủ và tải gia tăng trong SSIS là ở thiết kế gói. Một thiết kế tải đầy đủ các thành phần cần thiết được kéo vào gói SSIS. Nó rất đơn giản chỉ có ít suy nghĩ liên quan. Đó là lý do tại sao vì cảm giác sai lầm về năng suất, các nhà phát triển thường sử dụng kỹ thuật này.

Nhưng việc chạy gói thiết kế đầy tải mỗi đêm là không nên cho dữ liệu lớn, chẳng hạn như 15TB. Bạn có nghĩ rằng nó sẽ hoàn thành đúng giờ trước khi người dùng đến vào buổi sáng? Điều đó sẽ không xảy ra vì bạn đang cố gắng chèn lại các bản ghi không thay đổi chút nào. Nếu đó là khoảng 70% dữ liệu, bạn cần thêm thời gian chết tùy thuộc vào tài nguyên máy chủ.

Điều đó không thể chấp nhận được.

Vì vậy, bạn càng cần phải sử dụng khối lượng tăng dần trên các tình huống này. Trong các phần sau, bạn sẽ học cách tải dữ liệu nhanh hơn bằng cách sử dụng tải tăng dần.

Tải trọng gia tăng trongSSIS Sử dụng CDC

Đầu tiên, hãy xem xét sử dụng Thay đổi dữ liệu Capture (CDC). Lưu ý rằng từ đây đến 3 ví dụ tiếp theo, chúng tôi sẽ sử dụng các ví dụ đơn giản. Vì vậy, thiết kế gói sẽ không làm mờ mục tiêu.

Trước khi chúng ta bắt đầu với ví dụ, phần phân tích sẽ bao gồm những điều sau:

  • Đầu tiên, cách bật CDC trong cơ sở dữ liệu và bảng
  • Sau đó, tạo gói SSIS cho tải gia tăng SSIS bằng CDC
  • Cuối cùng, chạy và kiểm tra kết quả

Hình 3 cho thấy các thành phần của ví dụ này.

Thay đổi bản ghi Data Capture (CDC) chèn, xóa và cập nhật trong bảng. Trước khi có thể làm cho ví dụ này hoạt động, bạn cần có một cơ sở dữ liệu và một bảng được định cấu hình cho CDC.

Cách bật CDC trong aDatabase và Table

Cơ sở dữ liệu và cài đặt bảng mặc định không có CDC. Để kích hoạt cơ sở dữ liệu CDC, đây là cú pháp T-SQL:

-- point to the database you need to CDC-enable
USE SportsCarSales
GO

-- this will enable CDC to the current database.
EXEC sys.sp_cdc_enable_db
GO

Sau đó, để kiểm tra xem CDC có thực sự được bật hay không, hãy chạy điều này:

select name from sys.databases
where is_cdc_enabled=1

Nếu tên của cơ sở dữ liệu bạn đã bật choCDC xuất hiện, thì bạn đã sẵn sàng. Cơ sở dữ liệu của bạn hiện đã được kích hoạt CDC.

Nhưng nó không kết thúc ở đây. Bạn cần nêu rõ bảng nào bạn muốn theo dõi để biết bất kỳ thay đổi nào. sp_cdc_enable_table sẽ thực hiện thủ thuật. Dưới đây là một ví dụ về điều đó.

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name   = N'sportsCarSales',
@role_name     = NULL,
@supports_net_changes = 1
GO

Chạy đoạn mã trên sẽ dẫn đến các thông báo tương tự bên dưới:

Job 'cdc.SportsCarSales_capture' started successfully.
Job 'cdc.SportsCarSales_cleanup' started successfully.

Các thông báo đó là 2 công việc SQL Server Agent mới được tạo sau khi bật bảng cho CDC. Đó là lý do tại sao bạn cần SQL Server Agent để CDC hoạt động. Xem ảnh chụp màn hình trong Hình 4.

Thực hiện chèn, xóa và cập nhật trên sportsCarSales bảng sẽ tự động ghi lại các thay đổi đối với một bảng khác có tên là cdc.dbo_sportsCarSales_CT . Bảng này có các cột giống như bảng gốc. Xem ảnh chụp màn hình trong Hình 5.

Hoạt động _ $ cột bên trái được quan tâm đặc biệt. Các giá trị có thể có cho cột này là 1 (Xóa), 2 (Chèn), 3 và 4 (Cập nhật). Cập nhật sử dụng 2 giá trị:một cho giá trị cột trước bản cập nhật (đó là 3). Và cái còn lại dành cho giá trị cột sau bản cập nhật (đó là 4). Bạn có thể kiểm tra cột này khi kiểm tra các giá trị trước khi chạy gói SSIS của mình. Nguồn CDCS CDC Splitter các thành phần sử dụng bảng này khi xác định các thay đổi. Thông tin thêm về những điều này trong phần tiếp theo.

Tạo gói SSIS cho tải gia tăng SSIS bằng CDC

Dưới đây là các bước tạo SSISpackage với tải tăng dần bằng CDC. Điều này giả sử bạn đã có gói trống trong Visual Studio 2019. Mục tiêu của chúng tôi ở đây là tải các hàng từ sportsCarSales tableinto FactSportsCarSales bảng dữ kiện trong kho dữ liệu.

Sau đây là tóm tắt các bước:

BƯỚC 1. Tạo 2 trình quản lý kết nối cơ sở dữ liệu
BƯỚC 2. Kéo 2 Tác vụ điều khiển CDC vào Luồng điều khiển
BƯỚC 3. Kéo Tác vụ luồng dữ liệu và kết nối với Tác vụ điều khiển CDC

BƯỚC # 1. Tạo 2 trình quản lý kết nối cơ sở dữ liệu

Chúng tôi cần 2 kết nối cơ sở dữ liệu ở đây. Một là kết nối ADO.Net sẽ trỏ đến cơ sở dữ liệu hỗ trợ CDC. Và sau đó, tạo Kết nối OLE DB tới một kho dữ liệu làm đích. Cả hai cơ sở dữ liệu areSQL Server 2019. Xem Hình 6 và Hình 7 tương ứng. Trong ví dụ này, cả hai cơ sở dữ liệu đều nằm trên cùng một máy. Và chúng tôi đang sử dụng xác thực Windows để kết nối.

Vì vậy, trong Trình quản lý kết nối cửa sổ, nhấp chuột phải và chọn Kết nối ADO.Net mới . Sau đó, điền vào các cài đặt máy chủ, xác thực và cơ sở dữ liệu như trong Hình 6 bên dưới.

Sau đó, tạo kết nối OLE DB với kho dữ liệu. Trong cửa sổ Trình quản lý kết nối, nhấp chuột phải và chọn Kết nối OLE DB mới . Sau đó, điền tên máy chủ, xác thực và cơ sở dữ liệu. Chỉ định kho dữ liệu tại đây.

BƯỚC # 2. Kéo 2 Tác vụ điều khiển CDC vào Luồng điều khiển

Có 2 điều chúng ta cần làm sau khi kéo Tác vụ điều khiển CDC trong Luồng điều khiển.

Đánh dấu CDC Start

Đầu tiên, chúng ta cần cấu hình Tác vụ Điều khiển CDC để Đánh dấu Bắt đầu CDC. Và sau đó, tạo một bảng Trạng thái CDC. Điều này có thể được thực hiện trong một cửa sổ cấu hình. Xem Hình 8 bên dưới.

Theo các bước được đánh số trong Hình 9, sau đây là các chi tiết.

  1. Chọn kết nối ADO.Net mà chúng ta đã tạo trong Hình 6.
  2. Sau đó, chọn Đánh dấu bắt đầu CDC .
  3. Nhấp vào Mới để tạo một biến trạng thái CDC. Sau đó, một cửa sổ sẽ xuất hiện. Nhấp vào OK để tạo tên biến mặc định Người dùng ::CDC_State .
  4. Chọn kết nối ADO.Net để chúng tôi có thể lưu trữ trạng thái CDC trong cơ sở dữ liệu đó.
  5. Nhấp vào Mới để tạo một bảng để lưu trữ trạng thái. Tập lệnh đã được tạo cho bạn. Vì vậy, chỉ cần nhấp vào Chạy trên cửa sổ tiếp theo.
  6. Sau đó, chọn CDC_State như tên tiểu bang.
  7. Cuối cùng, nhấp vào OK .

Sau khi định cấu hình Tác vụ Điều khiển CDC này, hãy chạy gói. Bạn sẽ chưa thấy các bản ghi được sao chép sang cơ sở dữ liệu khác. Bảng trạng thái ( dbo.cdc_state ) sẽ được điền các giá trị ban đầu.

Từ đây, bạn có thể chọn tắt Tác vụ điều khiển CDC này hoặc ghi đè lại nó bằng các giá trị mới trong tác vụ tiếp theo.

Nhận phạm vi xử lý

Bạn có thể kéo Tác vụ điều khiển CDC mới vào Luồng điều khiển hoặc ghi đè lên tác vụ trước đó. Cấu hình giống như trong Hình 9, ngoại trừ Thao tác điều khiển CDC (# 2). Lần này, chọn Nhận phạm vi xử lý . Sau đó, nhấp vào OK . Kết nối điều này với Nhiệm vụ luồng dữ liệu trong BƯỚC # 3 sau.

Đánh dấu phạm vi đã xử lý

Định cấu hình Tác vụ điều khiển CDC khác giống như tác vụ đầu tiên, ngoại trừ lần này, chọn Đánh dấu phạm vi đã xử lý cho Hoạt động Kiểm soát CDC. Kết nối Nhiệm vụ luồng dữ liệu trong BƯỚC # 3 với việc này.

Bước # 3. Kéo Nhiệm vụ Luồng Dữ liệu và Kết nối với Nhiệm vụ Kiểm soát CDCC

Tác vụ Luồng dữ liệu này sẽ thực hiện việc trích xuất và tải như trong Hình 3 trước đó. Trước khi chúng ta đi sâu vào chi tiết của từng bước, đây là bản tóm tắt:

A. Thêm nguồn CDC
B. Thêm Bộ chia CDC và kết nối nó với Nguồn CDC
C. Thêm một lệnh OLE DB để xóa các bản ghi
D. Thêm một Đích OLE DB để chèn các bản ghi
E. Thêm một Lệnh OLE DB khác để cập nhật bản ghi

Bây giờ, chúng ta hãy đi sâu vào.

A. Thêm nguồn CDC

Kéo Nguồn CDC thành phần với các cài đặt được hiển thị trong Hình 9 bên dưới.

Theo các bước được đánh số trong Hình 9, sau đây là các chi tiết:

  1. Đầu tiên, chọn kết nối ADO.Net mà chúng ta đã tạo trong Hình 6.
  2. Sau đó, chọn bảng hỗ trợ CDC sportsCarSales .
  3. Chọn phiên bản chụp dbo_SportsCarSales .
  4. Sau đó, chọn Net cho chế độ xử lý CDC. Điều này sẽ chỉ trả về các thay đổi thuần. Để biết mô tả chi tiết về từng chế độ xử lý, hãy xem liên kết này. Bạn cũng có thể nhấp vào Xem trước để xem những hàng nào sẽ được đưa vào.
  5. Chọn biến Trạng thái CDC mà chúng tôi đã tạo trước đó (Hình 9).
  6. Cuối cùng, nhấp vào OK .
B. Thêm Bộ chia CDC và kết nối nó với Nguồn CDC

Yêu cầu duy nhất của CDC Splitter Nguồn CDC trước nó. Vì vậy, hãy kết nối Nguồn CDC sớm hơn cho thành phần này. Điều này sẽ tách các thay đổi đối với chèn, cập nhật và xóa.

C. Thêm lệnh OLE DB để xóa bản ghi

Đầu tiên, bạn cần gắn nhãn thành phần này là Delete Records (Xem Hình 3). Sau đó, kết nối nó với CDC Splitter. Khi lời nhắc xuất hiện, hãy chọn DeleteOutput cho đầu ra và nhấp vào OK .

Sau đó, định cấu hình Lệnh OLE DB Trình quản lý kết nối chuyển hướng. Xem Hình 10.

Tiếp theo, trong Thuộc tính thành phần , chỉ định lệnh DELETE cho Lệnh SQLC bất động sản. Lệnh sẽ như thế này:

DELETE FROM FactSportsCarSales
WHERE SalesID = ?

Xem ảnh chụp màn hình trong Hình 11 bên dưới.

Dấu chấm hỏi sẽ tạo một tham số cho SalesID . Mỗi ID bán hàng giá trị đến từ CDCSplitter sẽ được sử dụng để xóa các hàng trong FactSportsCarSales bảng.

Sau đó, trong Ánh xạ cột , lập bản đồ ID bán hàng cột của bảng thành tham số ( Param_0 ) Xem Hình 12.

Cuối cùng, nhấp vào OK.

Đ. Thêm Đích đến trong OLE DB để Chèn Bản ghi

Trước tiên, hãy kéo một Đích đến của OLE DB . Sau đó, gắn nhãn nó là Chèn bản ghi . Kết nối cái này với CDC Splitter . Sau đó, chọn InsertOutput khi một cửa sổ nhắc nhở xuất hiện. Xem Hình 14 để biết các cài đặt cơ bản.

Theo các bước được đánh số trong Hình 13, dưới đây là chi tiết:

  1. Đầu tiên, chọn Kết nối OLE DB mà chúng tôi đã tạo trong Hình 7.
    Sau đó, chọn FactSportsCarSales bảng dữ kiện.
  2. Cuối cùng, nhấp vào OK .
E. Thêm Lệnh OLE DB vào Cập nhật Bản ghi

Kéo một Lệnh OLE DB khác và gắn nhãn nó là Bản ghi cập nhật. Sau đó, kết nối nó với CDC Splitter . Nó sẽ tự động chọn UpdateOutput đầu ra. Người quản lý kết nối cài đặt tab phải giống như trong Hình 11.

Nhưng Thuộc tính thành phầnSQLCommand phải có một giá trị như thế này:

UPDATE [dbo].[FactSportsCarSales]
   SET [ClientID] = ?
      ,[SportsCarID] = ?
      ,[PurchaseDate] = ?
      ,[Quantity] = ?
      ,[UnitPrice] = ?
 WHERE [SalesID]= ?

Số lượng dấu hỏi trong codeabove sẽ cho bạn biết có bao nhiêu tham số cần sử dụng bắt đầu từ Param_0 Vị trí của các tham số từ Param_0 tới Param_5 được sắp xếp dựa trên vị trí của chúng trong mã. Vì vậy, Param_0 isfor ClientID , Param_1 dành cho SportsCarID , và như vậy.

Kiểm tra Ánh xạ cột trong Hình 15.

Sau khi cấu hình CDC trong cơ sở dữ liệu và cấp bảng, cách để kiểm tra xem CDC có hoạt động hay không là thêm và thay đổi các hàng. Vì vậy, hãy thêm một số bản ghi vào bảng.


USE SportsCarSales
GO

INSERT INTO SportsCarSales (ClientID, SportsCarID, PurchaseDate, Quantity, UnitPrice)
	VALUES (1, 1920, '02/03/2022', 1, 845000.0000),
	(5, 1920, '01/22/2022', 1, 845000.0000),
		(54, 1920, '01/15/2022', 1, 845000.0000),
		(62, 1920, '02/04/2022', 1, 845000.0000);
GO

Để xem liệu điều này có được ghi lại trong CDC hay không bằng cách truy vấn cdc.dbo_sportsCarSales_CT bảng.

SELECT * FROM cdc.dbo_sportsCarSales_CT;

Kiểm tra kết quả thu thập dữ liệu thay đổi sau lệnh INSERT trong Hình 15.

Vì vậy, nó đã ghi lại các lần chèn. Điều đó tốt.

Bây giờ, hãy thử chạy gói SSIS trước đó. Kết quả sẽ giống như Hình 16 bên dưới.

Hình 16 . Kết quả thời gian chạy gói SSIS cho tải tăng dần bằng CDC.

Và cuối cùng, truy vấn kết quả trong FactSportsCarSales bảng hiển thị cùng một bộ 4 bản ghi.

Tải trọng gia tăng trong SSIS sử dụng các cột ngày tháng

Tải tăng dần trong SSIS sử dụng Cột thời gian là một cách khác để thu thập dữ liệu theo từng bước. Nếu bạn tình cờ thực hiện ETL trong bảng mà không có CDC, đây là lựa chọn tiếp theo của bạn.

Bảng nguồn có thể có một Đã sửa đổi hoặc LastUpdate như cột trong Hình 17.

Để truy vấn các thay đổi là biết chúng tối đa Đã sửa đổi giá trị cột từ đích. Sau đó, truy vấn tất cả các bản ghi từ nguồn có giá trị lớn hơn Đã sửa đổi giá trị cột từ đích.

Các thành phần điển hình của kỹ thuật này được thể hiện trong Hình 18.

Vui lòng làm theo hướng dẫn về cách nấu loại tải gia tăng này. Sau đây là các chủ đề phụ cho phần này:

  • Tạo gói để thực hiện tải gia tăng SSIS với các cột DateTime
  • Kết quả thời gian chạy gói

Tạo gói để thực hiện tải gia tăng SSIS với các cột ngày giờ

Mục tiêu của chúng tôi là tải SportsCars bảng thành dimSportsCars bảng kích thước trong cơ sở dữ liệu khác. Sau đây là tóm tắt các bước:

BƯỚC 1. Tạo 2 trình quản lý kết nối OLE DB
BƯỚC 2. Tạo 2 biến gói
BƯỚC 3. Thêm Thực thi tác vụ SQL trong Luồng kiểm soát
BƯỚC 4. Thêm Nhiệm vụ luồng dữ liệu

Hãy bắt đầu.

BƯỚC # 1. Tạo 2 trình quản lý kết nối OLE DB

Kết nối OLE DB đầu tiên là từ cơ sở dữ liệu giao dịch. Và cài đặt rất đơn giản như trong Hình 19.

Sau đó, tạo một kết nối OLE DB khác tới kho dữ liệu. Điều này sẽ giống như trong Hình 7.

BƯỚC # 2. Tạo 2 biến gói

Biến đầu tiên sẽ giữ ngày sửa đổi cuối cùng từ dimSportsCars bảng kích thước. Sau đó, thứ hai sẽ giữ truy vấn SQL tùy chỉnh.

A. Tạo biến User ::sportsCars_lastUpdate
  1. Trong Các biến cửa sổ, nhấp vào Thêm biến .
  2. Đặt tên cho nó là sportsCars_lastupdate .
  3. Đặt kiểu dữ liệu thành DateTime .
B. Tạo biến User ::sqlCommand
  1. Trong Các biến cửa sổ, nhấp vào Thêm biến .
  2. Đặt tên cho nó là sqlCommand .
  3. Đặt loại thành Chuỗi .
  4. Nhấp vào nút dấu chấm lửng để tạo Biểu thức . Xem Hình 21 về Trình tạo biểu thức cửa sổ và biểu thức chuỗi thực tế.
  5. Nhấp vào OK .

Chuỗi SQL phải như thế này:

"SELECT  SportsCarID, StyleID, ManufacturerID, Model, UnitPrice, created, modified 
FROM sportsCars
WHERE modified > '" + (DT_WSTR, 50) @[User::sportsCars_lastupdate]  + "' 
ORDER BY SportsCarID;"

Lưu ý rằng chúng tôi đặt mệnh đề WHERE thành Đã sửa đổi greatthan Người dùng ::sportsCars_lastupdate .

Sẽ có thêm thông tin chi tiết về cách đặt 2 biến trong các bước tiếp theo.

BƯỚC # 3. Thêm một tác vụ SQL thực thi trong dòng điều khiển

Tác vụ này sẽ truy vấn bảng đích để lấy Đã sửa đổi cuối cùng giá trị ngày tháng. Kéo Thực thi tác vụ SQL vào Luồng kiểm soát. Sau đó, gắn nhãn là Lấy ngày sửa đổi cuối cùng từ DW . Sau đó, xem các cài đặt trong Hình 21.

Các thuộc tính quan trọng cần đặt ở đây là Kết nối , SQLStatement Tập kết quả thuộc tính.

Đặt Kết nối thuộc tính cho kết nối OLE DB thứ hai được đặt trong BƯỚC # 1. Sau đó, đặt SQLStatement thuộc tính mã bên dưới.

select max(modified) as LastUpdate from dimSportsCars

Sau đó, đặt Bộ kết quả thuộc tính thành Hàng đơn .

Cuối cùng, bạn cần lập bản đồ LastUpdate bí danh cột (xem mã ở trên) cho Người dùng ::sportsCars_lastupdate Biến đổi. Xem ảnh chụp màn hình trong Hình 22.

Cuối cùng, nhấp vào OK để lưu cài đặt mới.

BƯỚC # 4. Thêm tác vụ luồng dữ liệu

Kéo Tác vụ luồng dữ liệu với Luồng điều khiển và kết nối Thực thi tác vụ SQL với nó. Sau đó, gắn nhãn Nhiệm vụ luồng dữ liệu Cập nhật thứ nguyên dimSportsCars . Sau đó, hãy làm theo các bước để thêm các thành phần vào Nhiệm vụ luồng dữ liệu .

Nhiệm vụ về luồng dữ liệu có một số bước bên trong nó:

A. Thêm nguồn OLE DB
B. Thêm Chuyển đổi tra cứu để so sánh nguồn với đích
C. Thêm một lệnh OLE DB để cập nhật bản ghi
D. Thêm Đích OLE DB để chèn các bản ghi

Bây giờ, hãy bắt đầu.

A. Thêm nguồn OLE DB

Nguồn OLE DB này sẽ truy vấn bảng nguồn cho các bản ghi đã thay đổi. Xem các cài đặt trong Hình 23.

Theo các con số trong Hình 23, đây là chi tiết:

  1. Đầu tiên, hãy chỉ định kết nối OLE DB mà chúng tôi đã tạo. Xem Hình 20.
  2. Sau đó, đặt Chế độ truy cập dữ liệu thành Lệnh SQL từ biến .
  3. Sau đó, chọn biến User ::sqlCommand mà chúng ta đã tạo trước đó. Xem Hình 21.
  4. Cuối cùng, nhấp vào OK .
B. Thêm một chuyển đổi tra cứu để so sánh Nguồn với Đích

Bây giờ, chúng ta cần có một cách để so sánh bảng nguồn và bảng đích. Chúng tôi có thể sử dụng Tra cứu Thành phần chuyển đổi để làm điều đó. Thao tác này sẽ thực hiện phép nối giữa 2 bảng.

Vì vậy, hãy kéo một Tra cứu Chuyển đổi trong Luồng dữ liệu và đặt tên là Phân loại thay đổi . Sau đó, kết nối nó với Nguồn OLE DB sớm hơn. Bấm đúp vào nó. Xem Hình 24 để thiết lập Chung trang.

Đặt trình đơn thả xuống thành Chuyển hướng các hàng thành không có đầu ra phù hợp như được thấy trong Hình 24. Điều này có nghĩa là chúng ta sẽ sử dụng các hàng không có kết quả phù hợp. Và trong trường hợp này, điều này là để phát hiện các hàng có trong nguồn nhưng không có trong đích.

Tiếp theo, nhấp vào Kết nối trong ngăn bên trái của Trình chỉnh sửa chuyển đổi tra cứu . Sau đó, xem Hình 25 về những gì cần thiết lập.

Trong Hình 26, bạn cần chỉ định Kết nối OLE DB cho bảng đích. (Xem Hình 7). Và sau đó, đặt truy vấn SQL thành mã bên dưới.

SELECT SportsCarID from dimSportsCars

Chúng tôi chỉ cần SportsCarID cột để so sánh, vì vậy chúng tôi đã sử dụng một truy vấn thay vì toàn bộ bảng.

Tiếp theo, nhấp vào Cột trang để thiết lập ánh xạ của cột khóa truy vấn nguồn đến đích. Xem Hình 26 để lập bản đồ.

Như đã thấy trong Hình 26, phải có một đường từ nguồn đến đích sử dụng SportsCarID cột chính. Cả hai cột chính sẽ được sử dụng để so sánh.

Cuối cùng, nhấp vào OK .

C. Thêm Lệnh OLE DB vào Cập nhật Bản ghi

Phần này sẽ cập nhật các bản ghi có đối sánh SportsCarID các giá trị quan trọng từ Tra cứu Chuyển đổi.

Vì vậy, hãy kéo một Lệnh OLE DB trong Luồng dữ liệu và đặt tên cho nó là Cập nhật dimSportsCars . Sau đó, kết nối nó với Tra cứu Chuyển đổi sớm hơn. Khi lời nhắc xuất hiện, hãy thiết lập Đầu ra thành Đầu ra đối sánh tra cứu . Sau đó, nhấp vào OK .

Nhấp đúp vào Lệnh OLE DB và đặt các thuộc tính trong Trình quản lý kết nối chuyển hướng. Xem Hình 27.

Hình 27 cho thấy rằng bạn cần đặt Trình quản lý kết nối đến cơ sở dữ liệu đích (Xem Hình 8). Sau đó, nhấp vào Thuộc tính thành phần chuyển hướng. Xem Hình 28 để biết cài đặt thuộc tính.

Thuộc tính SQLCommand được đặt thành:

UPDATE dimSportsCars
SET StyleID = ?, ManufacturerID = ? , MODEL = ? , UnitPrice = ? , modified = ?
WHERE SportsCarID = ?

Chúng tôi đã làm một cái gì đó tương tự trước đó. Các dấu hỏi là trình giữ chỗ tham số. Và nếu chúng ta ánh xạ đúng cột nguồn, cột mục tiêu tương ứng sẽ được thiết lập. Xem các ánh xạ trong Hình 29.

Cuối cùng, nhấp vào OK .

Đ. Thêm Đích đến trong OLE DB để Chèn Bản ghi

Phần này sẽ chèn các bản ghi mới được tìm thấy trong SportsCars bảng vào dimSportsCars không thể đo được.

Vì vậy, hãy kéo một Đích đến của OLE DB và đặt tên cho thành phần đó là Chèn Bản ghi Mới trong dimSportsCars. Bấm đúp vào nó và đặt kết nối và bảng mục tiêu. Xem Hình 30.

Như trong Hình 30, thiết lập kết nối với kho dữ liệu (Hình 8) và chọn dimSportsCars bảng kích thước.

Tiếp theo, nhấp vào Ánh xạ để xem các cột có được ánh xạ tương ứng hay không. Vì các tên cột giống nhau về nguồn và đích nên chúng sẽ được ánh xạ tự động.

Cuối cùng, nhấp vào OK .

Kết quả thời gian chạy gói

Bây giờ gói đã hoàn tất, đây là ảnh chụp màn hình của kết quả trong Hình 31.

Quá trình này đã cập nhật 8 hàng và chèn 1 hàng mới vào dimSportsCars bảng kích thước.

Tải trọng gia tăng trong SSIS Sử dụng Tra cứu

Một phương pháp khác để thực hiện tải gia tăng là so sánh nguồn từ đích để xem những gì cần được chèn, cập nhật và xóa. Và đây là tùy chọn của bạn nếu không có cột DateTime và không có CDCon cả hai bảng. Một cách để thực hiện việc này là sử dụng Tra cứu Chuyển đổi.

Các thành phần điển hình của phương pháp này được thể hiện trong Hình 32.

Lưu ý rằng cách tiếp cận đơn giản trong Hình 32 có thể áp dụng cho các bảng không cho phép xóa cứng. Nếu cần xử lý việc xóa, thì có thể áp dụng Kết hợp hợp nhất sử dụng kết hợp đầy đủ.

Có 2 chủ đề phụ cho phần này:

Tạo gói SSIS cho tải gia tăng SSIS bằng cách sử dụng Tra cứu
Kết quả thời gian chạy gói

Hãy đi sâu vào.

Tạo Gói SSIS cho Tải gia tăng SSIS Sử dụng Tra cứu

Mục tiêu của chúng tôi ở đây là tải hàng sof Nhà sản xuất bảng vào dimMan Producer không thể đo được.

Điều này giả định rằng bạn đã sẵn sàng một gói SSIS trống.

Sau đây là tóm tắt các bước:

BƯỚC 1. Tạo 2 kết nối OLE DB
BƯỚC 2. Thêm Nhiệm vụ Luồng Dữ liệu

Hãy bắt đầu với ví dụ.

BƯỚC # 1. Tạo 2 kết nối OLE DB

Bạn có thể tham khảo Hình 19 cho nguồn và Hình 7 cho mục tiêu. Chúng tôi đang sử dụng cùng một Trình quản lý kết nối ở đây.

BƯỚC # 2. Thêm tác vụ luồng dữ liệu

Kéo Tác vụ luồng dữ liệu trong Luồng kiểm soát và đặt tên là Cập nhật bảng thứ nguyên của nhà sản xuất. Nhấp đúp vào nó và làm theo các bước tiếp theo. Được tóm tắt bên dưới là các bước bên trong Nhiệm vụ luồng dữ liệu .

A. Thêm Nguồn OLE DB
B. Thêm Tra cứu Chuyển đổi để quét các bản ghi mới
C. Thêm Đích đến của OLE DB để chèn các bản ghi.
D. Thêm một Tra cứu khác Chuyển đổi để quét các thay đổi
E. Thêm Lệnh OLE DB để cập nhật bảng mục tiêu

A. Thêm nguồn OLE DB

Kéo một Nguồn OLE DB và dán nhãn là Nhà sản xuất . Đặt Trình quản lý kết nối như trong Hình 33.

B. Thêm một chuyển đổi tra cứu để quét các bản ghi mới

Tra cứu này Chuyển đổi sẽ quét các bản ghi không tồn tại trong mục tiêu dựa trên ManufacturerID móc khóa. Và tất cả các hàng không khớp đều là ứng cử viên cho việc chèn bảng.

Kéo Tra cứu chuyển đổi và đặt tên nó là Lookup dimMan producer. Sau đó, nhấp đúp vào nó.

Cài đặt cho Chung trang phải giống như trong Hình 24. Trong khi đó, đặt kết nối với kho dữ liệu và sử dụng truy vấn cho Kết nối Cài đặt trang. Xem Hình 34.

C. Thêm Đích đến trong OLE DB để Chèn Bản ghi

Kéo một Đích đến của OLE DB và đặt tên là Chèn bản ghi mới. Kết nối nó với Tra cứu Chuyển đổi và chọn Tra cứu không có đầu ra phù hợp khi một lời nhắc xuất hiện. Nhấp đúp vào nó và đặt bảng kết nối và mục tiêu như trong Hình 35.

Bảng nguồn và bảng đích có cùng tên cột và chúng sẽ tự động ánh xạ. Xem Hình 36.

Cuối cùng, nhấp vào OK .

Đ. Thêm một chuyển đổi tra cứu khác để quét các thay đổi

Không giống như Tra cứu trước đây Chuyển đổi, quá trình này sẽ quét các thay đổi trong Nhà sản xuất cột. Và nếu có thay đổi, nó sẽ là một ứng cử viên cho việc cập nhật bảng.

Kéo một Tra cứu khác Chuyển đổi và đặt tên là Bản ghi tra cứu đã thay đổi. Kết nối nó với Tra cứu đầu tiên Sự biến đổi. Chung trang cho tra cứu này phải giống như trong Hình 24.

Trong khi đó, Kết nối trang sẽ giống như Hình 37 bên dưới.

Trong khi đó, lưu ý các ánh xạ trong Hình 38.

Hình 38 cho thấy các ánh xạ thông qua Nhà sản xuất Tên. Nếu nó không bằng nhau, có một sự thay đổi trong nguồn. Và nó cần được sao chép trong mục tiêu.

E. Thêm lệnh OLE DB để cập nhật bảng mục tiêu

Các cài đặt phải giống như trong Hình 29, ngoại trừ Lệnh SQLC . Lệnh UPDATE sẽ giống như sau:

UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?

Điều chỉnh ánh xạ cột thành các tham số cho phù hợp.

Kết quả thời gian chạy gói

Xong? Sau đó, chạy gói. Bạn sẽ thấy kết quả thời gian chạy giống như trong Hình 39.

Công cụ tốt nhất để tải dữ liệu SSIS

Tất cả các ví dụ mà chúng tôi đã có trước đó đều sử dụng các thành phần mới của hộp đến từ Microsoft. Mặc dù đó là những dự án đủ tốt cho một số dự án, nhưng điều gì sẽ xảy ra nếu bạn phải tích hợp cả nguồn cơ sở dữ liệu và đám mây bên cạnh SSIS?

Đây là lúc Devart SSIS Components phát huy tác dụng. Các thành phần SSIS này rất thuận tiện để sử dụng. Và chúng cung cấp khả năng tải dữ liệu hiệu suất cao bằng cách sử dụng tối ưu hóa nguồn dữ liệu cụ thể và bộ nhớ đệm nâng cao. Họ cũng có hơn 40 nguồn dữ liệu, bao gồm các nguồn yêu thích RDBMS như MySQL, PostgreSQL và Oracle. Ngoài ra còn có các dịch vụ đám mây như Salesforce, HubSpot, Google Analytics, v.v. Vì vậy, bạn nên thử tải hàng triệu bản ghi trong SSIS bằng cách sử dụng Thành phần SSIS của Devart.

Tại sao không phải là một ví dụ?

Sử dụng các thành phần SSIS của Devart để thực hiện tải gia tăng

Hãy thử tái tạo Nhà sản xuất dimManf vào MySQL và sử dụng Tra cứu của Devart và Điểm đến các thành phần cho MySQL. Công thức được thể hiện trong Hình 40.

Hãy bắt đầu bằng cách thêm gói SSIS mới cùng với dự án Dịch vụ Tích hợp Visual Studio của bạn. Sau đó, thêm Nhiệm vụ luồng dữ liệu và nhấp đúp vào nó. Sau đó, hãy làm theo các bước bên dưới.

Trước đó, đây là bản tóm tắt các bước:

BƯỚC 1. Thêm Nguồn OLE DB
BƯỚC 2. Thêm Trình quản lý kết nối MySQL Devart
BƯỚC 3. Thêm Tìm kiếm MySQL Devart để quét các bản ghi mới
BƯỚC 4. Thêm một Devart MySQL Lookup khác Chuyển đổi để quét các thay đổi
BƯỚC # 5. Thêm Devart MySQL Destination để chèn hồ sơ
BƯỚC # 6. Thêm một Devart MySQL Destination khác to update records

STEP #1. Add an OLE DB Source

This will connect to the SQL Server database we had earlier. Please refer to Figure 8. Then, set the table to dimManufacturers .

STEP #2. Add a Devart MySQL Connection Manager

We need this connection for the destination database and table. So, in the Connection Managers window, right-click and select New Connection . Then, select the DevartMySQL Connection Manager type. Then, configure the database access as shown in Figure 41. Notice the simpler interface to connect. Though you can go to the Advanced tab and see more properties there.

I’m running MySQL 8 in my local machine and there’s a copy of the same database in SQL Server, but the rows are older.

STEP #3. Add a Devart MySQL Lookup Transformation to Scanfor New Records

Drag a Devart MySQL Lookup and name it Compare Source to Target . Then, connect it to the Devart MySQL Connection Manager sớm hơn. Now, follow the configuration in Figure 42.

Following the numbers in Figure 42, the following are the details:

  1. First, select the Devart MySQL Connection Manager created in STEP #2.
  2. Then, select the dimmanufacturers bảng.
  3. In Lookup Columns , mark checked the ManufacturerID column.
  4. Then, in Input Columns , select ManufacturerID .
  5. Then, select ManufacturerID in Reference Columns .
  6. Finally, click OK .

LƯU Ý :If you encounter a duplicate name error, go to Advanced Editor. And then, click Input and Output Properties . Rename either the Input or Output Column to a different name.

STEP #4. Add another Devart MySQL Lookup Transformation toScan for Changes

This second MySQL Lookup will scan forrecords that changed.

Drag another Devart MySQL Lookup andlabel it Get Records that Changed. Connect it to thefirst Devart MySQL Lookup . Then, choose Lookup Match Output .

The setup is the same as in Figure 42. But choose the Manufacturer column instead of ManufacturerID . Do this for Lookup Columns , Input Columns , and Reference Columns .

STEP #5. Add a Devart MySQL Destination to Insert Records

This step will insert records from thesource that have no match in the target.

So, drag a Devart MySQL Destination and label it Insert New Records. Connect it to the first Devart MySQL Lookup . Double-click it and configure the Connection Manager . See Figure 43.

In Figure 43, you need to set the connection to the MySQL connection manager we did in STEP #2. Then, click Component Properties . See the configuration in Figure 44.

After setting the TableName to dimmanufacturers ,click Column Mappings . Since both the source and target tables havethe same column names, the columns are automatically mapped.

Finally, click OK .

STEP #6. Add Another Devart MySQL Destination to UpdateRecords

Unlike the other Devart MySQLDestination , this will update records that changed from the source.

So, drag another Devart MySQL Destination and label it Update Existing. Connect it to the second Devart MySQL Lookup Transformation. And select Lookup No Match Output when a prompt appears. The setup is the same as in STEP #5 except for the Component Properties . See Figure 45 on what to change.

Using the Devart MySQL Destination is dead easy than using an OLE DB Command. There’s no need to map parameters to columns. It also works for a Delete operation. This is unlike an OLE DB Destination that works for inserts only.

Package Runtime Results

See the runtime results in Figure 46.

Kết luận

That’s it.

You learned 3 ways to do incremental load in SSIS by using the following:

  • Change Data Capture
  • DateTime Columns
  • Lookup Transformation

You also learned how to do it using DevartSSIS Components.

Though our examples are simplified to makethe principle easier to understand as possible, there’s room for improvement.We didn’t use a staging table to store all changes, whether insert, update, ordelete. This is recommended for very large data, especially when the target isin another server. You can also add an executeprocess task in SSIS for special scenarios.

Anyway, if you like this post, please shareit on your favorite social media platforms.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhận tất cả các kết hợp có thể có của các hàng từ hai bảng trong SQL

  2. Cách xuất dữ liệu sang tệp phẳng với BCP Utility và nhập dữ liệu với chèn hàng loạt

  3. Cách tải và quản lý dữ liệu trong Microsoft Power BI

  4. Theo dõi số 1 về các tìm kiếm ký tự đại diện hàng đầu

  5. Làm thế nào để thả một bảng trong SQL