如何在複製活動中設定適用於 SQL Server 的 Amazon RDS
本文概述如何使用數據管線中的複製活動,從 Amazon RDS for SQL Server 複製數據。
支援的設定
如需複製活動下每個索引標籤的設定,請分別移至下列各節。
一般
請參閱一般設定指引,以設定 [一般設定] 索引卷標。
來源
在複製活動的 [來源] 索引標籤下,Amazon RDS for SQL Server 支援下列屬性。
需要下列屬性:
數據存放區類型:選取 [外部]。
連線:從聯機清單中選取 Amazon RDS for SQL Server 連線。 如果連線不存在,請選取 [新增] 來建立新的 Amazon RDS for SQL Server 連線。
連線 類型:選取 [Amazon RDS for SQL Server]。
使用查詢:指定讀取資料的方式。 您可以選擇 [資料表]、 [查詢] 或 [預存程式]。 下列清單描述每個設定的組態:
數據表:從指定的數據表讀取數據。 從下拉式清單中選取您的源數據表,或選取 [ 編輯 ] 以手動輸入。
查詢:指定要讀取數據的自定義 SQL 查詢。 例如
select * from MyTable
。 或選取鉛筆圖示以在程式碼編輯器中編輯。預存程式:使用從源數據表讀取數據的預存程式。 最後一個 SQL 陳述式必須是預存程序中的 SELECT 陳述式。
預存程式名稱:選取預存程式,或在選取 [編輯 ] 以從源數據表讀取數據時手動指定預存程序名稱。
預存程序參數:指定預存程序參數的值。 允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。 您可以選取 [匯入參數 ] 以取得預存程序參數。
在 [進階] 底下,您可以指定下列欄位:
查詢逾時(分鐘):指定查詢命令執行的逾時,預設值為 120 分鐘。 如果為此屬性設定參數,允許的值會是時間範圍,例如 “02:00:00” (120 分鐘)。
隔離等級:指定 SQL 來源的交易鎖定行為。 允許的值包括:讀取認可、讀取未認可、可重複讀取、可串行化、快照集。 如果未指定,則會使用資料庫的預設隔離等級。 如需詳細資訊, 請參閱 IsolationLevel 列舉 。
數據分割選項:指定用來從 Amazon RDS for SQL Server 載入資料的數據分割選項。 允許的值為: [無 ] (預設值)、 數據表的實體分割區,以及 [動態範圍]。 啟用數據分割選項時(也就是非 無),從 Amazon RDS for SQL Server 同時載入數據的平行處理原則程度是由 複製活動設定索引標籤中的 [複製平行處理原則 程度] 控制。
無:選擇此設定不要使用分割區。
數據表的實體分割區:使用實體分割區時,數據分割數據行和機制會根據您的實體數據表定義自動決定。
動態範圍:使用已啟用平行的查詢時,需要範圍分割參數(
?DfDynamicRangePartitionCondition
)。 範例查詢:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
。數據分割數據行名稱:指定範圍數據分割用於平行複製之整數或日期/日期時間類型的源數據行名稱(
int
、smallint
、smalldatetime
date
bigint
datetime
datetime2
或 )。datetimeoffset
如果未指定,則會自動偵測資料表的索引或主索引鍵作為分割資料行。如果您使用查詢來取出來源資料,請在 WHERE 子句中加上
?DfDynamicRangePartitionCondition
。 如需範例,請參閱從 SQL 資料庫平行複製一節。數據分割上限:指定分割區範圍分割的數據分割數據行最大值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。 如需範例,請參閱從 SQL 資料庫平行複製一節。
分割區下限:指定分割區範圍分割的數據分割數據行最小值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。 如需範例,請參閱從 SQL 資料庫平行複製一節。
其他數據行:新增其他數據行以儲存來源檔案的相對路徑或靜態值。 後者支持表達式。
請注意下列幾點:
- 如果 為來源指定 Query ,複製活動會針對 Amazon RDS for SQL Server 來源執行此查詢,以取得數據。 如果預存程式採用參數,您也可以指定預存程式名稱和預存程序參數來指定預存程式。
- 在來源中使用預存程序來擷取資料時,請注意,如果您的預存程序設計為在傳入不同的參數值時傳回不同的結構描述,在從 UI 匯入結構描述,或使用自動資料表建立將資料複製到 SQL 資料庫時,您可能遇到失敗,或看到非預期的結果。
對應
針對 [對應] 索引標籤標組態,移至 [對應] 索引卷標底下的 [設定對應]。
設定
如需 設定 索引標籤組態,請移至 [設定] 索引標籤底下的 [設定其他設定]。
從 SQL 資料庫平行複製
複製活動中 Amazon RDS for SQL Server 連接器提供內建的資料分割,以平行方式複製資料。 您可以在複製活動的 [來源] 索引標籤上找到資料分割選項。
當您啟用分割複本時,複製活動會平行查詢 Amazon RDS for SQL Server 來源,以依分割區來載入資料。 平行度是由複製活動設定索引標籤中的 [複製平行處理原則程度] 控制。例如,如果您將複製平行處理原則的程度設定為四,服務會根據指定的分割區選項和設定,同時產生和執行四個查詢,而每個查詢都會從 Amazon RDS for SQL Server 擷取部分數據。
建議您啟用平行複製與資料分割,特別是從 Amazon RDS for SQL Server 載入大量資料時。 以下針對各種情節的建議設定。 將資料複製到以檔案為基礎的資料存放區時,建議分成多個檔案來寫入資料夾 (僅指定資料夾名稱),這樣效能會比寫入單一檔案更好。
案例 | 建議的設定 |
---|---|
使用實體分割區從大型資料表完整載入。 | 分割選項:資料表的實體分割區。 在執行期間,服務會自動偵測實體分割區,並依分割區複製資料。 若要檢查您的資料表是否有實體分割區,您可以參考此查詢。 |
從大型資料表完整載入,不含實體分割區,同時在資料分割時包含整數或日期時間資料行。 | 分割選項:動態範圍分割。 分割資料行 (選用):指定用來分割資料的資料行。 如果未指定,則會使用主索引鍵資料行。 分割區上限和分割區下限 (選用):指定是否要決定分割區跨距。 這不適用於篩選資料表中的資料列,資料表中的所有資料列都會分割並複製。 如果未指定,複製活動會自動偵測值,而且可能需要很長的時間,視 MIN 和 MAX 值而定。 建議提供上限和下限。 例如,如果您的分割區資料行「識別碼」具有範圍 1 到 100 之間的值,而您將下限設定為 20、上限設定為 80,且平行複製為 4,則服務會分別依 4 個分割區擷取資料 - 範圍中的識別碼分別為 <=20、[21, 50]、[51, 80] 和 >=81。 |
使用自訂查詢載入大量資料,不使用實體分割區,同時包含整數或日期/日期時間資料行用於資料分割。 | 分割選項:動態範圍分割。 查詢: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> 。分割資料行:指定用來分割資料的資料行。 分割區上限和分割區下限 (選用):指定是否要決定分割區跨距。 這不適用於篩選資料表中的資料列,查詢結果中的所有資料列都會分割並複製。 如果未指定,複製活動會自動偵測該值。 例如,如果您的分割區資料行「識別碼」具有範圍 1 到 100 之間的值,而您將下限設定為 20、上限設定為 80,且平行複製為 4,則服務會分別依 4 個分割區擷取資料 - 範圍中的識別碼分別為 <=20、[21, 50]、[51, 80] 和 >=81。 以下是不同案例的更多範例查詢: • 查詢整個資料表: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition • 從具有數據行選取範圍和其他 where 子句篩選的數據表查詢: SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • 使用子查詢查詢: SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • 在子查詢中使用分割區進行查詢: SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T |
使用分割區選項載入資料的最佳做法:
- 選擇獨特的資料行作為分割資料行 (例如主索引鍵或唯一索引鍵) 以避免資料扭曲。
- 如果數據表具有內建分割區,請使用數據表的實體分割區選項來取得更佳的效能。
用來檢查實體分割區的範例查詢
SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id
WHERE s.name='[your schema]' AND t.name = '[your table name]'
如果資料表具有實體分割區,您會看到 “HasPartition” 顯示為 “yes”,如下所示。
數據表摘要
如需適用於 SQL Server 複製活動的 Amazon RDS 摘要和詳細資訊,請參閱下表。
來源資訊
名稱 | 描述: | 值 | 必要 | JSON 腳本屬性 |
---|---|---|---|---|
數據存放區類型 | 您的資料存放區類型。 | 外部 | Yes | / |
[連接] | 您與源資料存放區的連線。 | < 您的連線 > | Yes | connection |
連線類型 | 您的連線類型。 選取 [Amazon RDS for SQL Server]。 | Amazon RDS for SQL Server | Yes | / |
使用查詢 | 要讀取數據的自定義 SQL 查詢。 | •表 •查詢 • 預存程式 |
Yes | / |
Table | 您的源數據表。 | < 目的地數據表的名稱> | No | 模式 table |
查詢 | 要讀取數據的自定義 SQL 查詢。 | < 您的查詢 > | No | sqlReaderQuery |
預存程式名稱 | 此屬性是從來源資料表讀取資料的預存程序名稱。 最後一個 SQL 陳述式必須是預存程序中的 SELECT 陳述式。 | < 預存程式名稱 > | No | sqlReaderStoredProcedureName |
預存程序參數 | 這些是預存程序的參數。 允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。 | < 名稱或值組 > | No | storedProcedureParameters |
查詢逾時 | 查詢命令執行的逾時。 | 時間範圍 (預設值為 120 分鐘) |
No | queryTimeout |
隔離等級 | 指定 SQL 來源的異動鎖定行為。 | • 已認可讀取 • 讀取未認可 • 可重複讀取 •序列 化 •快照 |
No | isolationLevel: • ReadCommitted • ReadUncommitted • RepeatableRead •序列 化 •快照 |
數據分割選項 | 用來從 Amazon RDS for SQL Server 載入資料的數據分割選項。 | • 無 (預設值) • 資料表的實體分割區 • 動態範圍 |
No | partitionOption: • 無 (預設值) • PhysicalPartitionsOfTable • DynamicRange |
數據分割數據行名稱 | 整數或日期/日期時間類型的源數據行名稱(int 、bigint date smallint 、smalldatetime 、、datetime 、 datetime2 或 datetimeoffset ),用於平行複製的範圍數據分割。 如果未指定,則會自動偵測資料表的索引或主索引鍵作為分割資料行。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?DfDynamicRangePartitionCondition 。 |
< 分割區數據行名稱 > | No | partitionColumnName |
分割區上限 | 分割區範圍分割的分割區資料行最大值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。 | < 分割區上限 > | No | partitionUpperBound |
分割區下限 | 分割區範圍分割的分割區資料行最小值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。 | < 分割區下限 > | No | partitionLowerBound |
其他數據行 | 新增其他數據行以儲存來源檔案的相對路徑或靜態值。 後者支持表達式。 | •名字 •價值 |
No | additionalColumns: •名字 •價值 |
相關內容
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應