Share via


在複製活動中設定 Azure Synapse Analytics

本文概述如何使用數據管線中的複製活動,將數據從 Azure Synapse Analytics 複製和複製到 Azure Synapse Analytics。

支援的設定

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

一般

請參閱一般設定指引,以設定 [一般設定] 索引卷標。

來源

在複製活動的 [來源] 索引標籤下,Azure Synapse Analytics 支援下列屬性。

顯示來源索引標籤和屬性清單的螢幕快照。

需要下列屬性

  • 數據存放區類型:選取 [外部]。

  • 連線:從聯機清單中選取 Azure Synapse Analytics 連線。 如果連線不存在,請選取 [新增],以建立新的 Azure Synapse Analytics 連線。

  • 連線 類型:選取 [Azure Synapse Analytics]。

  • 使用查詢:您可以選擇 [數據表]、 [查詢] 或 [預存程式 ] 來讀取源數據。 下列清單描述每個設定的組態:

    • 數據表:如果您選取此按鈕,請從您在 Table 中指定的資料表讀取數據。 從下拉式清單中選取您的資料表,或選取 [ 編輯 ] 以手動輸入架構和數據表名稱。

      顯示數據表的螢幕快照。

    • 查詢:指定要讀取數據的自定義 SQL 查詢。 例如 select * from MyTable。 或選取鉛筆圖示以在程式碼編輯器中編輯。

      顯示選擇查詢的螢幕快照。

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

      顯示預存程式設定的螢幕快照。

      • 預存程式名稱:選取預存程式,或在選取 [編輯] 時手動指定預存程序名稱。
      • 預存程序參數:選取 [ 匯入參數 ] 以匯入指定預存程式中的參數,或選取 [+ 新增] 來新增預存程式的參數。 允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。

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

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

  • 隔離等級:指定 SQL 來源的交易鎖定行為。 允許的值為:None、Read committed、Read uncommittedRepeatable readSerializableSnapshot。 如果未指定, 則會使用 None 隔離等級。 如需詳細資訊, 請參閱 IsolationLevel 列舉

    顯示隔離等級設定的螢幕快照。

  • 數據分割選項:指定用來從 Azure Synapse Analytics 載入數據的數據分割選項。 允許的值為: [無 ] (預設值)、 數據表的實體分割區,以及 [動態範圍]。 啟用分割區選項時(也就是非 ),從 Azure Synapse Analytics 同時載入數據的平行處理原則程度是由 複製活動上的平行複製 設定所控制。

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

    • 數據表的實體分割區:如果您想要使用實體分割區,請選擇此設定。 數據分割數據行和機制會根據您的實體數據表定義自動決定。

    • 動態範圍:如果您想要使用動態範圍分割,請選擇此設定。 使用已啟用平行的查詢時,需要範圍分割參數(?DfDynamicRangePartitionCondition)。 範例查詢: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition

      顯示動態範圍設定的螢幕快照。

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

Destination

在複製活動的 [目的地] 索引標籤下,Azure Synapse Analytics 支援下列屬性。

顯示 [目的地] 索引標籤的螢幕快照。

需要下列屬性

  • 數據存放區類型:選取 [外部]。
  • 連線:從聯機清單中選取 Azure Synapse Analytics 連線。 如果連線不存在,請選取 [新增],以建立新的 Azure Synapse Analytics 連線。
  • 連線 類型:選取 [Azure Synapse Analytics]。
  • 數據表選項:您可以選擇 [使用現有的]、[自動建立數據表]。 下列清單描述每個設定的組態:
    • 使用現有的:從下拉式清單中選取資料庫中的數據表。 或勾選 [編輯 ] 以手動輸入您的架構和數據表名稱。
    • 自動建立資料表:它會自動在來源架構中建立數據表(如果不存在)。

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

  • 複製方法 選擇您想要用來複製資料的方法。 您可以選擇 [複製] 命令PolyBase大量插入Upsert。 下列清單描述每個設定的組態:

    • 複製命令:使用 COPY 語句將數據從 Azure 記憶體載入 Azure Synapse Analytics 或 SQL 集區。

      顯示複製命令設定的螢幕快照。

      • 允許複製命令:當您選擇 [複製] 命令時,必須選取它。
      • 默認值:指定 Azure Synapse Analytics 中每個目標數據行的預設值。 屬性中的預設值會覆寫資料倉儲中設定的預設條件約束,而且識別欄位不可有預設值。
      • 其他選項:將直接在 COPY 語句的 「With」 子句中傳遞至 Azure Synapse Analytics COPY 語句的其他選項。 視需要將值加上引號,以配合 COPY 陳述式需求。
    • PolyBase:PolyBase 是高輸送量的機制。 使用它將大量數據載入 Azure Synapse Analytics 或 SQL 集區。

      顯示 PolyBase 設定的螢幕快照。

      • 允許 PolyBase:當您選擇 PolyBase 時,必須選取它。
      • 拒絕類型:指定 rejectValue 選項是常值或百分比。 允許的值為 (預設值) 和百分比
      • 拒絕值:指定查詢失敗之前可以拒絕的數據列數目或百分比。 在 CREATE EXTERNAL TABLE (Transact-SQL)的<引數>一節中,深入瞭解 PolyBase 的拒絕選項。 允許的值為 0 (預設值)、1、2 等其他值。
      • 拒絕範例值:決定在 PolyBase 重新計算拒絕數據列百分比之前要擷取的數據列數目。 允許的值為 1、2 等。如果您選擇 [百分比 ] 作為拒絕類型,則需要此屬性。
      • 使用類型預設值:指定當 PolyBase 從文字檔擷取數據時,如何處理分隔文本檔中的遺漏值。 從 CREATE EXTERNAL FILE FORMAT (Transact-SQL) 的<引數>一節深入了解這個屬性。 允許的值會選取 (預設值) 或未選取。
    • 大量插入:使用大量插入將數據大量插入目的地。

      顯示大量插入設定的螢幕快照。

      • 大量插入數據表鎖定:在數據表上的大量插入作業期間,使用此鎖定可改善數據表上的複製效能,且沒有來自多個用戶端的索引。 請從 BULK INSERT (Transact-SQL) 深入瞭解。
    • Upsert:當您想要將數據向上插入目的地時,指定寫入行為的設定群組。

      顯示Upsert設定的螢幕快照。

      • 索引鍵數據行:選擇哪一個數據行可用來判斷來源的數據列是否符合目的地的數據列。

      • 大量插入數據表鎖定:在數據表上的大量插入作業期間,使用此鎖定可改善數據表上的複製效能,且沒有來自多個用戶端的索引。 請從 BULK INSERT (Transact-SQL) 深入瞭解。

  • 預先複製文本:指定要在每次執行中將數據寫入目的地數據表之前,要執行的複製活動腳本。 您可以使用此屬性來清除預先載入的資料。

  • 寫入批次逾時:指定批次插入作業在逾時之前完成的等候時間。允許的值是時間範圍。 默認值為 “00:30:00” (30 分鐘)。

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

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

  • 停用效能計量分析:此設定可用來收集計量,例如 DTU、DWU、RU 等,以複製效能優化和建議。 如果您擔心此行為,請選取此複選框。 預設為未選取。

使用 COPY 命令直接複製

Azure Synapse Analytics COPY 命令直接支援 Azure Blob 儲存體Azure Data Lake 儲存體 Gen2 作為源數據存放區。 如果您的源數據符合本節所述的準則,請使用 COPY 命令直接從源數據存放區複製到 Azure Synapse Analytics。

  1. 來源資料與格式包含下列型態與驗證方法:

    支援的源數據存放區類型 支援的格式 支援的來源驗證類型
    Azure Blob 儲存體 分隔符號文字
    Parquet
    匿名驗證
    帳戶金鑰驗證
    共用存取簽章驗證
    Azure Data Lake Storage Gen2 分隔符號文字
    Parquet
    帳戶金鑰驗證
    共用存取簽章驗證
  2. 您可以設定下列格式設定:

    1. 針對 Parquet壓縮類型 可以是 Nonesnappygzip
    2. 針對 DelimitedText
      1. 數據列分隔符:透過直接 COPY 命令將分隔文字複製到 Azure Synapse Analytics 時,請明確指定數據列分隔符 (\r; \n; 或 \r\n)。 只有當來源檔案的數據列分隔符是 \r\n 時,預設值 (\r、\n 或 \r\n) 才有效。 否則,請為您的案例啟用預備。
      2. Null 值 會保留為預設值,或設定為 空字串 (“”“)
      3. 編碼 會保留為預設值,或設定為 UTF-8UTF-16
      4. 略過行計數 會保留為預設值,或設定為0。
      5. 壓縮類型 可以是 Nonegzip
  3. 如果您的來源是資料夾,您必須選取 [遞歸] 複選框。

  4. 未指定 [依上次修改的篩選]、[前置詞]、[啟用數據分割探索] 和 [其他數據行] 中的 [開始時間] (UTC[結束時間] 。

若要瞭解如何使用 COPY 命令將數據內嵌至 Azure Synapse Analytics,請參閱這篇文章

如果您的源資料存放區和格式原本不受 COPY 命令支援,請改用 COPY 命令功能來使用分段複製。 它會自動將數據轉換成 COPY 命令相容格式,然後呼叫 COPY 命令將數據載入 Azure Synapse Analytics。

對應

針對 [ 對應 ] 索引卷標組態,如果您未將 Azure Synapse Analytics 自動建立數據表套用為目的地,請移至 [ 對應]。

如果您套用 Azure Synapse Analytics 搭配自動建立資料表作為目的地,但 [對應] 中的組態除外,您可以編輯目的地數據行的類型。 選取 [ 匯入架構] 之後,您可以在目的地中指定數據行類型。

例如,來源中的ID資料行類型為int,而且當對應至目的地數據行時,您可以將它變更為 float 類型。

對應目的地數據行類型的螢幕快照。

設定

如需 設定 索引標籤組態,請移至 [設定] 索引標籤底下的 [設定其他設定]。

從 Azure Synapse Analytics 平行複製

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

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

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

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

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

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

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

使用分割區選項載入資料的最佳做法:

  • 選擇獨特的資料行作為分割資料行 (例如主索引鍵或唯一索引鍵) 以避免資料扭曲。
  • 如果數據表具有內建分割區,請使用數據表的實體分割區選項來取得更佳的效能。
  • Azure Synapse Analytics 目前最多可以執行 32 個查詢,設定 複製平行處理原則 的程度太大可能會導致 Synapse 節流問題。

用來檢查實體分割區的範例查詢

SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, c.name AS ColumnName, CASE WHEN c.name IS NULL THEN 'no' ELSE 'yes' END 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.types AS y ON c.system_type_id = y.system_type_id
WHERE s.name='[your schema]' AND t.name = '[your table name]'

如果資料表具有實體分割區,您會看到 "HasPartition" 為 "yes"。

數據表摘要

下表包含 Azure Synapse Analytics 中複製活動的詳細資訊。

來源

名稱 描述: 必要 JSON 腳本屬性
數據存放區類型 您的資料存放區類型。 外部 Yes /
[連接] 您與源資料存放區的連線。 < 您的連線 > Yes connection
連線類型 您的來源連線類型。 Azure Synapse Analytics Yes /
使用查詢 讀取數據的方式。 •表
•查詢
• 預存程式
Yes • typeProperties (在 typeProperties ->source
  -模式
  -表
• sqlReaderQuery
• sqlReaderStoredProcedureName
  storedProcedureParameters
  -名字
  -價值
查詢逾時 查詢命令執行的逾時,預設值為120分鐘。 時間範圍 No queryTimeout
隔離等級 SQL 來源的交易鎖定行為。 • 沒有
• 已認可讀取
• 讀取未認可
• 可重複讀取
•序列 化
•快照
No isolationLevel:
 
• ReadCommitted
• ReadUncommitted
• RepeatableRead
•序列 化
•快照
數據分割選項 用來從 Azure SQL 資料庫 載入資料的數據分割選項。 • 沒有
• 資料表的實體分割區
• 動態範圍
  - 資料分割資料列名稱
 - 分割上限
 - 分割下限
No partitionOption:
 
• PhysicalPartitionsOfTable
• DynamicRange
  partition 設定:
  - partitionColumnName
  - partitionUpperBound
  - partitionLowerBound
其他數據行 新增其他數據行以儲存來源檔案的相對路徑或靜態值。 後者支持表達式。 •名字
•價值
No additionalColumns:
•名字
•價值

Destination

名稱 描述: 必要 JSON 腳本屬性
數據存放區類型 您的資料存放區類型。 外部 Yes /
[連接] 您與目的地資料存放區的連線。 < 您的連線 > Yes connection
連線類型 您的目的地連線類型。 Azure Synapse Analytics Yes /
數據表選項 您的目的地數據表選項。 • 使用現有的
• 自動建立數據表
Yes • typeProperties (在 typeProperties ->sink
  -模式
  -表
• tableOption:
  - autoCreate
  typeProperties (在 typeProperties ->sink
  -模式
  -表
Copy 方法 用來複製數據的方法。 • 複製命令
• PolyBase
• 大量插入
• Upsert
No /
選取 [ 複製] 命令時 使用 COPY 語句將數據從 Azure 記憶體載入 Azure Synapse Analytics 或 SQL 集區。 / 否。
使用 COPY 時適用。
allowCopyCommand: true
copyCommandSettings
預設值 指定 Azure Synapse Analytics 中每個目標數據行的預設值。 屬性中的預設值會覆寫資料倉儲中設定的預設條件約束,而且識別欄位不可有預設值。 < 預設值 > No defaultValues:
  - columnName
  - defaultValue
其他選項 COPY 陳述式的 "With" 子句中將直接傳遞至 Azure Synapse Analytics COPY 陳述式的其他選項。 視需要將值加上引號,以配合 COPY 陳述式需求。 < 其他選項 > No additionalOptions:
- <屬性名稱> : <value>
選取 PolyBase 時 PolyBase 是高輸送量機制。 使用它將大量數據載入 Azure Synapse Analytics 或 SQL 集區。 / 否。
使用 PolyBase 時套用。
allowPolyBase: true
polyBaseSettings
拒絕類型 拒絕值的型別。 •價值
•百分比
No rejectType:
-價值
-百分比
拒絕值 查詢失敗之前可以拒絕的數據列數目或百分比。 0 (預設值)、1、2 等。 No rejectValue
拒絕範例值 決定在 PolyBase 重新計算已拒絕的資料列百分比之前,所要擷取的資料列數目。 1、2 等 是,當您將百分比指定為拒絕類型時 rejectSampleValue
使用類型預設值 指定當 PolyBase 從文字檔擷取數據時,如何處理分隔文本檔中的遺漏值。 從 CREATE EXTERNAL FILE FORMAT 中的 Arguments 區段深入瞭解此屬性 (Transact-SQL) selected (default) 或 unselected。 No useTypeDefault:
true (預設值) 或 false
選取 [ 大量插入] 時 將數據大量插入目的地。 / No writeBehavior: Insert
大量插入數據表鎖定 使用此選項可改善資料表上沒有索引且沒有來自多個用戶端之索引的大量插入作業期間的複製效能。 請從 BULK INSERT (Transact-SQL) 深入瞭解。 已選取或未選取 (預設值) No sqlWriterUseTableLock:
true 或 false (預設值)
選取 Upsert 時 當您想要將資料向上插入目的地時,請指定寫入行為的設定群組。 / No writeBehavior: Upsert
索引鍵數據行 指出使用哪一個數據行來判斷來源的數據列是否符合目的地的數據列。 < 數據行名稱> No upsert 設定:
  - 索引鍵: < 數據行名稱 >
  - interimSchemaName
大量插入數據表鎖定 使用此選項可改善資料表上沒有索引且沒有來自多個用戶端之索引的大量插入作業期間的複製效能。 請從 BULK INSERT (Transact-SQL) 深入瞭解。 已選取或未選取 (預設值) No sqlWriterUseTableLock:
true 或 false (預設值)
預先複製腳本 在每次執行中將數據寫入目的地數據表之前,要執行的複製活動腳本。 您可以使用此屬性來清除預先載入的資料。 < 預先複製腳本 >
(字串)
No preCopyScript
寫入批次逾時 在逾時前等待批次插入作業完成的時間。允許的值為時間範圍。 默認值為 “00:30:00” (30 分鐘)。 時間範圍 No writeBatchTimeout
寫入批次大小 每個批次要插入 SQL 資料表的數據列數目。 根據預設,服務會依據資料列大小動態決定適當的批次大小。 < 數據列數目 >
(整數)
No writeBatchSize
並行連線上限 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。 < 並行連線的上限 >
(整數)
No maxConcurrentConnections
停用效能計量分析 此設定可用來收集計量,例如 DTU、DWU、RU 等,以複製效能優化和建議。 如果您擔心此行為,請選取此複選框。 選取或取消選取 (預設值) No disableMetricsCollection:
true 或 false (預設值)