共用方式為


在複製活動中設定 Azure SQL 資料庫

本文概述如何在資料管線中使用複製活動,從 Azure SQL 資料庫複製資料及將資料複製到該處。

支援的設定

如需複製活動下每個索引標籤的組態,請分別移至下列各節。

一般

請參閱<[一般] 設定>指導,來設定 [一般] 設定索引標籤。

來源

在複製活動的 [來源] 索引標籤下,Azure SQL 資料庫支援下列屬性。

螢幕擷取畫面,其中顯示 [來源] 索引標籤和屬性清單。

以下是必要的屬性:

  • 資料存放區類型:選取 [外部]
  • 連線:從連接清單中選取 Azure SQL 資料庫連接。 如果連線不存在,請選取 [新增],以建立新的 Azure SQL 資料庫連接。
  • 連線類型:選取 [Azure SQL 資料庫]
  • 資料表:從下拉式清單選取資料庫中的資料表。 或勾選 [編輯] 以手動輸入資料表名稱。
  • 預覽資料:選取 [預覽資料] 以預覽資料表中的資料。

在 [進階] 下,可以指定下列欄位:

  • 使用查詢:可以選擇 [資料表]、[查詢] 或 [預存程序]。 下列清單描述每個設定的組態:

    • 資料表:如果選取此按鈕,則從 [資料表] 中指定的資料表讀取資料。

    • 查詢:指定自訂 SQL 查詢來讀取資料。 例如 select * from MyTable。 或選取鉛筆圖示以在程式碼編輯器中編輯。

      螢幕擷取畫面,其中顯示選擇查詢。

    • 預存程序:使用從來源資料表讀取資料的預存程序名稱。 最後一個 SQL 陳述式必須是預存程序中的 SELECT 陳述式。

      • 預存程序名稱:選取預存程序,或在核取 [編輯] 方塊以從來源資料表讀取資料時手動指定預存程序名稱。

      • 預存程序參數:指定預存程序參數的值。 允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。

        螢幕擷取畫面,其中顯示預存程序設定。

  • 查詢逾時 (分鐘):指定查詢命令執行的逾時,預設值為 120 分鐘。 如果為此屬性設定參數,允許的值為時間範圍,例如 "02:00:00" (120 分鐘)。

    螢幕擷取畫面,其中顯示了查詢逾時設定。

  • 隔離等級:指定 SQL 來源的異動鎖定行為。 允許的值為:[無]、[讀取認可]、[讀取未認可]、[可重複讀取]、[可序列化] 或 [快照]。 如果未指定,則會使用 [無] 隔離等級。 如需詳細資料,請參閱<IsolationLevel 列舉>。

    螢幕擷取畫面,其中顯示隔離等級設定。

  • 分割選項:指定用來從 Azure SQL 資料庫載入資料的資料分割選項。 允許的值為:[無] (預設值)、[資料表的實體分割] 及 [動態範圍]。 啟用分割選項後 (即不是 [無]),從 Azure SQL 資料庫同時載入資料的平行處理程度,會由複製活動設定中的 [平行複製] 控制。

    螢幕擷取畫面,其中顯示了 [資料分割] 選項設定。

    • :選擇此設定不要使用分割。

    • 資料表的實體分割:使用實體分割時,分割資料行和機制會根據實體資料表定義自動決定。

    • 動態範圍:使用已啟用平行的查詢時,需要定界分割參數 (?DfDynamicRangePartitionCondition)。 範例查詢:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition

      • 分割資料行名稱:以整數類型或日期/日期時間類型 (intsmallintbigintdatesmalldatetimedatetimedatetime2datetimeoffset) 指定來源資料行的名稱,供平行複製的定界分割使用。 如果未指定,則會自動偵測資料表的索引或主索引鍵作為分割資料行。
      • 分割上限:分割區範圍分割的分割資料行最大值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。
      • 分割下限:分割區範圍分割的分割資料行最小值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。
  • 其他資料行:新增更多資料行以儲存來源檔案的相對路徑或靜態值。 後者支援運算式。 如需詳細資訊,請參閱<在複製期間新增其他資料行>。

Destination

在複製活動的 [目的地] 索引標籤下,Azure SQL 資料庫支援下列屬性。

螢幕擷取畫面,其中顯示 [目的地] 索引標籤。

以下是必要的屬性:

  • 資料存放區類型:選取 [外部]
  • 連線:從連接清單中選取 Azure SQL 資料庫連接。 如果連線不存在,請選取 [新增],以建立新的 Azure SQL 資料庫連接。
  • 連線類型:選取 [Azure SQL 資料庫]
  • 資料表:從下拉式清單選取資料庫中的資料表。 或勾選 [編輯] 以手動輸入資料表名稱。
  • 預覽資料:選取 [預覽資料] 以預覽資料表中的資料。

在 [進階] 下,可以指定下列欄位:

  • 寫入行為:定義來源是來自檔案型資料存放區的檔案時的寫入行為。 可以選擇 [插入]、[Upsert] 或 [預存程序]

    螢幕擷取畫面,其中顯示了寫入行為索引標籤。

    • 插入:如果您的來源資料有插入,請選擇此選項。

    • Upsert:如果您的來源資料同時有插入和更新,請選擇此選項。

      • 使用 TempDB:指定是否使用全域暫存資料表或實體資料表作為 Upsert 的過渡資料表。 根據預設,服務會使用全域暫存資料表作為過度資料表,此核取方塊為已選取狀態。

        螢幕擷取畫面,其中顯示選取 [使用 TempDB]。

      • 選取使用者 DB 結構描述:如果未選取 [使用 TempDB] 核取方塊,則在使用實體資料表時指定用來建立過渡資料表的過渡結構描述。

        注意

        您必須具有建立和刪除資料表的權限。 根據預設,過渡資料表會與目的地資料表共用相同的結構描述。

        螢幕擷取畫面,其中顯示未選取 [使用 TempDB]。

      • 索引鍵資料行:指定唯一資料列識別的資料行名稱。 您可以使用單一索引鍵或一系列索引鍵。 如果未指定,則會使用主索引鍵。

    • 預存程序:定義如何將來源資料套用到目標資料表的預存程序名稱。 此預存程序將會依批次叫用

      • 預存程序名稱:選取預存程序,或在核取 [編輯] 方塊以從來源資料表讀取資料時手動指定預存程序名稱。

      • 預存程序參數:指定預存程序參數的值。 允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。

        螢幕擷取畫面,其中顯示預存程序設定。

  • 大量插入資料表鎖定:選擇 [是] 或 [否]。 在資料表上進行大量插入作業期間,使用此設定可改善資料表上的複製效能,且沒有來自多個用戶端的索引。 若要了解有關詳細資訊,請參閱<BULK INSERT (Transact-SQL)>。

  • 資料表選項:指定是否要根據來源結構描述,自動建立目的地資料表 (如果不存在)。 選擇 [無] 或 [自動建立資料表]。 當目的地指定預存程序時,不支援自動建立資料表。

  • 複製前指令碼:指定一個複製活動的指令碼,會在每次執行中將資料寫入到目的地資料表前執行此指令碼。 您可以使用此屬性來清除預先載入的資料。

  • 寫入批次逾時:在逾時前等待批次插入作業完成的時間。允許的值為時間範圍。 預設值為 "00:30:00" (30 分鐘)。

  • 寫入批次大小:指定每個批次要插入 SQL 資料表的資料列數目。 允許的值為整數 (資料列數目)。 根據預設,服務會依據資料列大小動態決定適當的批次大小。

  • 並行連線數上限:指定在活動執行期間,與資料存放區建立的並行連線數上限。 僅在想要限制並行連線時,才需要指定值。

  • 停用效能計量分析:此設定可用於收集如 DTU、DWU、RU 等計量,以進行複製效能最佳化並提出建議。 如果擔心此行為,請選取此複選框。

對應

對於 [對應] 索引標籤組態,如果未套用 Azure SQL 資料庫,並將自動建立資料表作為目的地,請參閱<對應>。

如果套用 Azure SQL Database,並將自動建立資料表作為目的地,但 [對應] 中的組態除外,則可以編輯目的地資料行的類型。 選取 [匯入結構描述] 之後,您可以在目的地中指定資料行類型。

例如,來源中 [識別碼] 資料行的類型為 int,而對應至目的地資料行時,可以將其變更為 float 類型。

螢幕擷取畫面,其中顯示對應目的地資料行類型。

設定

對於 [設定] 索引標籤組態,請參閱<在 [設定] 索引標籤下進行其他設定>。

從 Azure SQL 資料庫平行複製

複製活動中 Azure SQL Database 連接器提供內建的資料分割,以平行複製資料。 您可以在複製活動的 [來源] 索引標籤上找到資料分割選項。

當您啟用分割複本時,複製活動會平行查詢 Azure SQL Database 來源,以依分割區來載入資料。 平行程度由 [複製活動設定] 索引標籤中的 [複製平行處理程度] 所控制。例如,如果您將 [複製平行處理程度] 設定為四,服務會根據指定的分割選項和設定同時產生和執行四個查詢,而每個查詢都會從 Azure SQL 資料庫擷取部分資料。

建議您啟用平行複製與資料分割,特別是從 Azure SQL Database 資料庫載入大量資料時。 以下針對各種情節的建議設定。 將資料複製到以檔案為基礎的資料存放區時,建議分成多個檔案來寫入資料夾 (僅指定資料夾名稱),這樣效能會比寫入單一檔案更好。

案例 建議的設定
使用實體分割區從大型資料表完整載入。 分割選項:資料表的實體分割區。

在執行期間,服務會自動偵測實體分割區,並依分割區複製資料。

若要檢查您的資料表是否有實體分割區,您可以參考此查詢
從大型資料表完整載入,不含實體分割區,同時在資料分割時包含整數或日期時間資料行。 分割選項:動態範圍分割。
分割資料行 (選用):指定用來分割資料的資料行。 如果未指定,則會使用索引或主索引鍵資料行。
分割區上限分割區下限 (選用):指定是否要決定分割區跨距。 這不適用於篩選資料表中的資料列,資料表中的所有資料列都會分割並複製。 如果未指定,複製活動會自動偵測值。

例如,如果您的分割區資料行「識別碼」具有範圍 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 查詢結果。

資料表摘要

下列各表包含有關 Azure SQL 資料庫中複製活動的詳細資訊。

來源

名稱 描述: 必要 JSON 指令碼屬性
資料存放區類型 資料存放區類型。 外部 必要 /
[連接] 您與來源資料存放區的連線。 <您的連線> 必要 connection
連線類型 您的連線類型。 選取 [Azure SQL Database] Azure SQL Database 必要 /
Table 您的來源資料表。 <您的目的地資料表的名稱> 必要 結構描述
table
使用查詢 用於讀取資料的自訂 SQL 查詢。 • 無
• 查詢
• 預存程序
不必要

• sqlReaderQuery
• sqlReaderStoredProcedureName, storedProcedureParameters
查詢逾時 查詢命令執行的逾時,預設值為 120 分鐘。 時間範圍 不必要 queryTimeout
隔離等級 指定 SQL 來源的異動鎖定行為。 • 無
• ReadCommitted
• ReadUncommitted
• RepeatableRead
• 可序列化
• 快照
不必要 isolationLevel
分割選項 用來從 Azure SQL 資料庫載入資料的資料分割選項。 • 無
• 資料表的實體分割
• 動態範圍
不必要 partitionOption:
• PhysicalPartitionsOfTable
• DynamicRange
其他資料行 新增更多資料行以儲存來源檔案的相對路徑或靜態值。 後者支援運算式。 • 名稱
• 值
不必要 additionalColumns:
• 名稱
• 值

Destination

名稱 描述: 必要 JSON 指令碼屬性
資料存放區類型 資料存放區類型。 外部 必要 /
[連接] 與目的地資料存放區的連線。 <您的連線> 必要 connection
連線類型 您的連線類型。 選取 [Azure SQL Database] Azure SQL Database 必要 /
Table 您的目的地資料表。 <您的目的地資料表的名稱> 必要 結構描述
table
寫入行為 定義來源是來自檔案型資料存放區的檔案時的寫入行為。 • insert
• Upsert
• 預存程序
不必要 writeBehavior:
• insert
• upsert
• sqlWriterStoredProcedureName, sqlWriterTableType, storedProcedureParameters
大量插入資料表鎖定 在資料表上進行大量插入作業期間,使用此設定可改善資料表上的複製效能,且沒有來自多個用戶端的索引。 是或否 不必要 sqlWriterUseTableLock:
[True] 或 [False]
資料表選項 指定是否要根據來源結構描述,自動建立目的地資料表 (如果不存在)。 • 無
• 自動建立資料表
不必要 tableOption:
• autoCreate
複製前指令碼 一個複製活動的指令碼,會在每次執行中將資料寫入到目的地資料表前執行此指令碼。 您可以使用此屬性來清除預先載入的資料。 <複製前指令碼>
(字串)
不必要 preCopyScript
寫入批次逾時 在逾時前等待批次插入作業完成的時間。允許的值為時間範圍。 預設值為 "00:30:00" (30 分鐘)。 時間範圍 不必要 writeBatchTimeout
寫入批次大小 針對每個批次要插入 SQL 資料表中的資料列數。 根據預設,服務會依據資料列大小動態決定適當的批次大小。 <資料列數目>
(整數)
不必要 writeBatchSize
並行連線數上限 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。 <並行連線數上限>
(整數)
不必要 maxConcurrentConnections
停用效能計量分析 此設定可用於收集如 DTU、DWU、RU 等計量,以進行複製效能最佳化並提出建議。 如果擔心此行為,請選取此複選框。 選取或取消選取 不必要 disableMetricsCollection:
[True] 或 [False]