使用 Azure Data Factory 或 Synapse 管線在 Azure Synapse Analytics 中複製和轉換數據

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用

本文概述如何使用 Azure Data Factory 或 Synapse 管線中的複製活動,將數據從 Azure Synapse Analytics 複製至 Azure Synapse Analytics,並使用數據流來轉換 Azure Data Lake 儲存體 Gen2 中的數據。 若要了解 Azure Data Factory,請閱讀簡介文章

支援的功能

下列功能支援此 Azure Synapse Analytics 連接器:

支援的功能 IR 受控私人端點
複製活動 (來源/接收) (1) (2)
對應資料流 (來源/接收) (1)
查閱活動 (1) (2)
GetMetadata 活動 (1) (2)
指令碼活動 (1) (2)
預存程序活動 (1) (2)

① Azure 整合執行階段 ② 自我裝載整合執行階段

針對 複製活動,此 Azure Synapse Analytics 連接器支援下列函式:

  • 使用 SQL 驗證和 Microsoft Entra Application 令牌驗證來複製數據,以及 Azure 資源的服務主體或受控識別。
  • 做為來源,使用 SQL 查詢或預存程式擷取數據。 您也可以選擇從 Azure Synapse Analytics 來源平行複製,如需詳細資訊,請參閱 Azure Synapse Analytics 的平行複製一節。
  • 作為接收,請使用 COPY 語句或 PolyBase大量插入載入數據。 我們建議 COPY 語句或 PolyBase 以提升複製效能。 如果來源架構不存在,連接器也支援使用 DISTRIBUTION = ROUND_ROBIN 自動建立目的地數據表。

重要

如果您使用 Azure Integration Runtime 複製數據,請設定 伺服器層級防火牆規則 ,讓 Azure 服務可以存取 邏輯 SQL 伺服器。 如果您使用自我裝載整合執行階段來複製資料,請將防火牆設定為允許適當的 IP 範圍。 此範圍包含用來連線到 Azure Synapse Analytics 的電腦 IP。

開始使用

提示

若要達到最佳效能,請使用PolyBase或 COPY 語句將數據載入 Azure Synapse Analytics。 使用 PolyBase 將數據載入 Azure Synapse Analytics 和使用 COPY 語句將數據載入 Azure Synapse Analytics 區段有詳細數據。 如需使用案例的逐步解說,請參閱使用 Azure Data Factory 在 15 分鐘內將 1 TB 載入至 Azure Synapse Analytics

若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立 Azure Synapse Analytics 鏈接服務

使用下列步驟,在 Azure 入口網站 UI 中建立 Azure Synapse Analytics 鏈接服務。

  1. 前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 Synapse,然後選取 Azure Synapse Analytics 連接器。

    Azure Synapse Analytics 連接器的螢幕快照。

  3. 設定服務詳細資料,測試連線,然後建立新的連結服務。

    Azure Synapse Analytics 鏈接服務的設定螢幕快照。

連接器設定詳細資料

下列各節提供屬性的詳細數據,這些屬性會定義 Azure Synapse Analytics 連接器專屬的 Data Factory 和 Synapse 管線實體。

連結服務屬性

Azure Synapse Analytics 鏈接服務支援這些泛型屬性:

屬性 描述 必要
type type 屬性必須設定為 AzureSqlDW Yes
connectionString 指定連線到 connectionString 屬性之 Azure Synapse Analytics 實例所需的資訊。
將此欄位標記為 SecureString 以將其安全地儲存。 您也可以在 Azure 金鑰保存庫 中放置密碼/服務主體密鑰,如果 SQL 驗證會password從 連接字串 提取組態。 如需詳細資訊,請參閱下表下方的 JSON 範例和在 Azure 金鑰保存庫 中儲存認證一文。
Yes
azureCloudType 針對服務主體驗證,請指定註冊 Microsoft Entra 應用程式的 Azure 雲端環境類型。
允許的值為 AzurePublicAzureChinaAzureUsGovernmentAzureGermany。 預設會使用 Data Factory 或 Synapse 管線的雲端環境。
No
connectVia 用來連線到資料存放區的整合執行階段。 您可以使用 Azure Integration Runtime 或自我裝載整合運行時間(如果您的資料存放區位於專用網中)。 如果未指定,就會使用預設的 Azure Integration Runtime。 No

針對不同的驗證類型,請分別參閱下列各節特定的屬性、必要條件和 JSON 範例:

提示

從 azure Synapse 中為伺服器 SQL 集區建立連結服務時,Azure 入口網站:

  1. 針對 [ 帳戶選取方法],選擇 [ 手動輸入]。
  2. 貼上 無伺服器端點的完整功能變數名稱 。 您可以在 Synapse 工作區的 [Azure 入口網站 概觀] 頁面中,於無伺服器 SQL 端點的屬性中找到此專案。 例如: myserver-ondemand.sql-azuresynapse.net
  3. 針對 [ 資料庫名稱],請在無伺服器 SQL 集區中提供資料庫名稱。

提示

如果您遇到錯誤碼為 「UserErrorFailedTo 連線 ToSqlServer」 和訊息,例如「資料庫的會話限制為 XXX 且已到達。」,請新增Pooling=false至您的 連接字串,然後再試一次。

SQL 驗證

若要使用 SQL 驗證類型,請指定上一節所述的一般屬性。

使用 SQL 驗證的連結服務範例

{
    "name": "AzureSqlDWLinkedService",
    "properties": {
        "type": "AzureSqlDW",
        "typeProperties": {
            "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Azure Key Vault 中的密碼:

{
    "name": "AzureSqlDWLinkedService",
    "properties": {
        "type": "AzureSqlDW",
        "typeProperties": {
            "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": {
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                },
                "secretName": "<secretName>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

服務主體驗證

若要使用服務主體驗證,除了上一節所述的一般屬性外,請指定下列屬性:

屬性 描述 必要
servicePrincipalId 指定應用程式的用戶端識別碼。 Yes
servicePrincipalKey 指定應用程式的金鑰。 將此欄位標記為 SecureString 以便安全儲存,或參考 Azure Key Vault 中儲存的祕密 Yes
tenant 指定您的應用程式所在租用戶的資訊 (網域名稱或租用戶識別碼)。 將滑鼠游標暫留在 Azure 入口網站右上角,即可擷取它。 Yes

此外,請依照下列步驟操作:

  1. 從 Azure 入口網站建立 Microsoft Entra 應用程式。 請記下應用程式名稱,以及下列可定義連結服務的值:

    • Application ID
    • 應用程式金鑰
    • 租用戶識別碼
  2. 如果您尚未這麼做,請在 Azure 入口網站 中為伺服器布建 Microsoft Entra 系統管理員。 Microsoft Entra 系統管理員可以是 Microsoft Entra 使用者或 Microsoft Entra 群組。 如果您授與受控識別系統管理員角色,請略過步驟 3 和 4。 系統管理員將擁有資料庫的完整存取權。

  3. 為服務主體建立自主資料庫使用者。 連線 使用 SSMS 之類的工具來複製數據的數據倉儲,以及至少具有 ALTER ANY USER 許可權的 Microsoft Entra 身分識別。 執行下列 T-SQL:

    CREATE USER [your_application_name] FROM EXTERNAL PROVIDER;
    
  4. 如同您通常對 SQL 使用者或其他使用者所做的一樣,授與服務主體所需的許可權 。 執行下列程式代碼,或在這裡參考更多選項。 如果您想要使用 PolyBase 載入數據,請瞭解 所需的資料庫許可權

    EXEC sp_addrolemember db_owner, [your application name];
    
  5. 在 Azure Data Factory 或 Synapse 工作區中設定 Azure Synapse Analytics 鏈接服務

使用服務主體驗證的連結服務範例

{
    "name": "AzureSqlDWLinkedService",
    "properties": {
        "type": "AzureSqlDW",
        "typeProperties": {
            "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;Connection Timeout=30",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "<service principal key>"
            },
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Azure 資源驗證的系統指派受控識別

Data Factory 或 Synapse 工作區可以與 代表資源的 Azure 資源 系統指派受控識別相關聯。 您可以使用此受控識別進行 Azure Synapse Analytics 驗證。 指定的資源可以使用這個身分識別,從數據倉儲或將數據複製到您的數據倉儲。

若要使用系統指派的受控識別驗證,請指定上一節所述的一般屬性,並依照下列步驟操作。

  1. 在 Azure 入口網站上為您的伺服器佈建 Microsoft Entra 系統管理員 (如果您尚未這麼做)。 Microsoft Entra 系統管理員可以是 Microsoft Entra 使用者或 Microsoft Entra 群組。 如果您以系統指派的受控識別授與群組系統管理員角色,請略過步驟 3 和 4。 系統管理員將擁有資料庫的完整存取權。

  2. 為系統指派的受控識別建立自主資料庫使用者。 連線 使用 SSMS 之類的工具來複製數據的數據倉儲,以及至少具有 ALTER ANY USER 許可權的 Microsoft Entra 身分識別。 執行下列 T-SQL。

    CREATE USER [your_resource_name] FROM EXTERNAL PROVIDER;
    
  3. 授與系統指派的受控識別所需的許可權 ,就像您通常對SQL使用者和其他使用者所做的一樣。 執行下列程式代碼,或在這裡參考更多選項。 如果您想要使用 PolyBase 載入數據,請瞭解 所需的資料庫許可權

    EXEC sp_addrolemember db_owner, [your_resource_name];
    
  4. 設定 Azure Synapse Analytics 鏈接服務

範例:

{
    "name": "AzureSqlDWLinkedService",
    "properties": {
        "type": "AzureSqlDW",
        "typeProperties": {
            "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;Connection Timeout=30"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

使用者指派的受控身分識別驗證

數據處理站或 Synapse 工作區可以與 代表資源的使用者指派受控識別 相關聯。 您可以使用此受控識別進行 Azure Synapse Analytics 驗證。 指定的資源可以使用這個身分識別,從數據倉儲或將數據複製到您的數據倉儲。

若要使用使用者指派的受控識別驗證,除了上一節所述的一般屬性外,請指定下列屬性:

屬性 描述 必要
credentials 將使用者指派的受控身分識別指定為認證物件。 Yes

此外,請依照下列步驟操作:

  1. 在 Azure 入口網站上為您的伺服器佈建 Microsoft Entra 系統管理員 (如果您尚未這麼做)。 Microsoft Entra 系統管理員可以是 Microsoft Entra 使用者或 Microsoft Entra 群組。 如果您為具有使用者指派的受控身分識別的群組授與系統管理員角色,請略過步驟 3。 系統管理員將擁有資料庫的完整存取權。

  2. 為使用者指派的受控身分識別建立自主資料庫使用者。 連線 使用 SSMS 之類的工具來複製數據的數據倉儲,以及至少具有 ALTER ANY USER 許可權的 Microsoft Entra 身分識別。 執行下列 T-SQL。

    CREATE USER [your_resource_name] FROM EXTERNAL PROVIDER;
    
  3. 建立一或多個使用者指派的受控識別 ,並 授與使用者指派的受控識別所需的許可權 ,就像您通常對 SQL 使用者和其他使用者所做的一樣。 執行下列程式代碼,或在這裡參考更多選項。 如果您想要使用 PolyBase 載入數據,請瞭解 所需的資料庫許可權

    EXEC sp_addrolemember db_owner, [your_resource_name];
    
  4. 將一或多個使用者指派的受控身分識別指派給資料處理站,並為每個使用者指派的受控身分識別建立認證

  5. 設定 Azure Synapse Analytics 鏈接服務

範例:

{
    "name": "AzureSqlDWLinkedService",
    "properties": {
        "type": "AzureSqlDW",
        "typeProperties": {
            "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;Connection Timeout=30",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

資料集屬性

如需可用來定義資料集的區段和屬性完整清單,請參閱資料集一文。

Azure Synapse Analytics 數據集支援下列屬性:

屬性 描述 必要
type 數據集的類型屬性必須設定為 AzureSqlDWTable Yes
schema 結構描述的名稱。 否 (來源);是 (接收)
table 資料表/檢視的名稱。 否 (來源);是 (接收)
tableName 具有結構描述的資料表/檢視名稱。 支援此屬性是基於回溯相容性。 對於新的工作負載,請使用 schematable 否 (來源);是 (接收)

資料集屬性範例

{
    "name": "AzureSQLDWDataset",
    "properties":
    {
        "type": "AzureSqlDWTable",
        "linkedServiceName": {
            "referenceName": "<Azure Synapse Analytics linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "typeProperties": {
            "schema": "<schema_name>",
            "table": "<table_name>"
        }
    }
}

複製活動屬性

如需可用來定義活動的區段和屬性完整清單,請參閱管線一文。 本節提供 Azure Synapse Analytics 來源和接收所支持的屬性清單。

Azure Synapse Analytics 作為來源

提示

若要使用數據分割有效率地從 Azure Synapse Analytics 載入數據,請從 Azure Synapse Analytics 的平行複製深入瞭解。

若要從 Azure Synapse Analytics 複製數據,請將複製活動來源中的 type 屬性設定SqlDWSource。 複製活動的 [來源] 區段支援下列屬性:

屬性 描述 必要
type 複製活動來源的類型屬性必須設定為 SqlDWSource Yes
sqlReaderQuery 使用自訂 SQL 查詢來讀取資料。 範例:select * from MyTable No
sqlReaderStoredProcedureName 從來源資料表讀取資料的預存程序名稱。 最後一個 SQL 陳述式必須是預存程序中的 SELECT 陳述式。 No
storedProcedureParameters 預存程序的參數。
允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。
No
isolationLevel 指定 SQL 來源的異動鎖定行為。 允許的值為:ReadCommittedReadUncommittedRepeatableReadSerializableSnapshot。 如果未指定,則會使用資料庫的預設隔離等級。 如需詳細資訊,請參閱 system.data.isolationlevel No
partitionOptions 指定用來從 Azure Synapse Analytics 載入資料的數據分割選項。
允許的值為:None (預設值)、PhysicalPartitionsOfTableDynamicRange
啟用分割區選項時(也就是,不是 None),從 Azure Synapse Analytics 同時載入數據時,平行處理原則的程度是由複製活動的設定所 parallelCopies 控制。
No
partitionSettings 指定資料分割的設定群組。
當分割選項不是 None 時套用。
No
partitionSettings 下方:
partitionColumnName 整數類型或日期/日期時間類型 (intsmallintbigintdatesmalldatetimedatetimedatetime2datetimeoffset) 指定來源資料行的名稱,供平行複製的範圍分割使用。 如果未指定,系統會自動偵測數據表的索引或主鍵,並當做數據分割數據行使用。
當分割選項是 DynamicRange 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?DfDynamicRangePartitionCondition 。 如需範例,請參閱從 SQL 資料庫平行複製一節。
No
partitionUpperBound 分割區範圍分割的分割區資料行最大值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。
當分割選項是 DynamicRange 時套用。 如需範例,請參閱從 SQL 資料庫平行複製一節。
No
partitionLowerBound 分割區範圍分割的分割區資料行最小值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。
當分割選項是 DynamicRange 時套用。 如需範例,請參閱從 SQL 資料庫平行複製一節。
No

請注意下列幾點:

  • 在來源中使用預存程序來擷取資料時,請注意,如果您的預存程序設計為在傳入不同的參數值時傳回不同的結構描述,在從 UI 匯入結構描述,或使用自動資料表建立將資料複製到 SQL 資料庫時,您可能遇到失敗,或看到非預期的結果。

範例:使用 SQL 查詢

"activities":[
    {
        "name": "CopyFromAzureSQLDW",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Azure Synapse Analytics input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlDWSource",
                "sqlReaderQuery": "SELECT * FROM MyTable"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

範例:使用預存程式

"activities":[
    {
        "name": "CopyFromAzureSQLDW",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Azure Synapse Analytics input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlDWSource",
                "sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
                "storedProcedureParameters": {
                    "stringData": { "value": "str3" },
                    "identifier": { "value": "$$Text.Format('{0:yyyy}', <datetime parameter>)", "type": "Int"}
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

範例預存程式:

CREATE PROCEDURE CopyTestSrcStoredProcedureWithParameters
(
    @stringData varchar(20),
    @identifier int
)
AS
SET NOCOUNT ON;
BEGIN
    select *
    from dbo.UnitTestSrcTable
    where dbo.UnitTestSrcTable.stringData != stringData
    and dbo.UnitTestSrcTable.identifier != identifier
END
GO

Azure Synapse Analytics 作為接收

Azure Data Factory 和 Synapse 管線支援三種方式將數據載入 Azure Synapse Analytics。

載入資料的最快且最可調整的方式是透過 COPY 語句PolyBase

若要將數據複製到 Azure Synapse Analytics,請將複製活動中的接收類型設定為 SqlDWSink。 複製活動的 [接收] 區段支援下列屬性:

屬性 描述 必要
type 複製活動接收的類型屬性必須設定為 SqlDWSink Yes
allowPolyBase 指出是否要使用 PolyBase 將數據載入 Azure Synapse Analytics。 allowCopyCommandallowPolyBase 不可以是 true。

如需限制式和詳細資料,請參閱使用 PolyBase 將資料載入 Azure Synapse Analytics 一節。

允許的值為 TrueFalse (預設值)。
否。
使用 PolyBase 時套用。
polyBaseSettings 屬性設定為 trueallowPolybase可以指定的屬性群組。 否。
使用 PolyBase 時套用。
allowCopyCommand 指出是否要使用 COPY 語句 將數據載入 Azure Synapse Analytics。 allowCopyCommandallowPolyBase 不可以是 true。

如需條件約束和詳細數據,請參閱 使用 COPY 語句將數據載入 Azure Synapse Analytics 一節。

允許的值為 TrueFalse (預設值)。
否。
使用 COPY 時套用。
copyCommand 設定 屬性設定為TRUE時 allowCopyCommand 可以指定的屬性群組。 否。
使用 COPY 時套用。
writeBatchSize 每個批次要插入 SQL 資料表的數據列數目。

允許的值為整數 (資料列數目)。 根據預設,服務會依據資料列大小動態決定適當的批次大小。
否。
使用大量插入時套用。
writeBatchTimeout 插入、upsert 和預存程式作業在逾時之前完成的等候時間。
允許的值為時間範圍。 例如 “00:30:00” 為 30 分鐘。 如果未指定任何值,則逾時預設為 “00:30:00”。
否。
使用大量插入時套用。
preCopyScript 指定要在每次執行中將數據寫入 Azure Synapse Analytics 之前,要執行的複製活動的 SQL 查詢。 使用此屬性來清除預先載入的資料。 No
tableOption 指定是否根據 來源架構自動建立接收數據表,如果它不存在的話。 允許的值包為:none (預設) 或 autoCreate No
disableMetricsCollection 此服務會收集 Azure Synapse Analytics DWU 等計量,以取得複製效能優化和建議,這引進了額外的主要數據庫存取權。 如果您擔心此行為,請指定 true 將其關閉。 否 (預設值為 false)
 maxConcurrentConnections 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。  否
WriteBehavior 指定複製活動將資料載入 Azure SQL Database 的寫入行為。
允許的值為 InsertUpsert。 根據預設,服務會使用 Insert 載入資料。
No
upsertSettings 指定寫入行為的設定群組。
當 WriteBehavior 選項為 Upsert 時套用。
No
upsertSettings 之下:
金鑰 指定唯一資料列識別的資料行名稱。 您可以使用單一索引鍵或一系列索引鍵。 如果未指定,則會使用主索引鍵。 No
interimSchemaName 指定建立過渡數據表的過渡架構。 注意:使用者必須具有建立和刪除資料表的權限。 根據預設,過渡資料表會與接收資料表共用相同的結構描述。 No

範例 1:Azure Synapse Analytics 接收

"sink": {
    "type": "SqlDWSink",
    "allowPolyBase": true,
    "polyBaseSettings":
    {
        "rejectType": "percentage",
        "rejectValue": 10.0,
        "rejectSampleValue": 100,
        "useTypeDefault": true
    }
}

範例 2:Upsert 數據

"sink": {
    "type": "SqlDWSink",
    "writeBehavior": "Upsert",
    "upsertSettings": {
        "keys": [
             "<column name>"
        ],
        "interimSchemaName": "<interim schema name>"
    },
}

從 Azure Synapse Analytics 平行複製

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

數據分割選項的螢幕快照

當您啟用數據分割複製時,複製活動會針對 Azure Synapse Analytics 來源執行平行查詢,以依數據分割載入數據。 平行程度由複製活動的 parallelCopies 設定所控制。 例如,如果您設定 parallelCopies 為 4,服務會根據指定的分割區選項和設定同時產生並執行四個查詢,而每個查詢都會從 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。

以下是不同案例的更多範例查詢:
1.查詢整個資料表:
SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
2.來自具有資料行選取範圍和其他 where 子句篩選的資料表查詢:
SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
3.使用子查詢進行查詢:
SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
4.在子查詢中使用分割區進行查詢:
SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T

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

  1. 選擇獨特的資料行作為分割資料行 (例如主索引鍵或唯一索引鍵) 以避免資料扭曲。
  2. 如果資料表有內建分割區,請使用分割選項「資料表的實體分割區」,以獲得更佳的效能。
  3. 如果您使用 Azure Integration Runtime 來複製資料,您可以設定較大的「資料整合單位 (DIU)」(>4) 來利用更多運算資源。 檢查該處適用的案例。
  4. 複製平行處理原則的程度」會控制分割區數目,將此數目設定過大有時會損害效能,建議將此數目設定為 (DIU 或自我裝載 IR 節點數目) * (2 到 4)。
  5. 注意 Azure Synapse Analytics 目前最多可以執行 32 個查詢,設定「複製平行處理原則的程度」太大可能會導致 Synapse 節流問題。

範例:使用實體分割區從大型資料表完整載入

"source": {
    "type": "SqlDWSource",
    "partitionOption": "PhysicalPartitionsOfTable"
}

範例:使用動態範圍分割進行查詢

"source": {
    "type": "SqlDWSource",
    "query": "SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>",
    "partitionOption": "DynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<partition_column_name>",
        "partitionUpperBound": "<upper_value_of_partition_column (optional) to decide the partition stride, not as data filter>",
        "partitionLowerBound": "<lower_value_of_partition_column (optional) to decide the partition stride, not as data filter>"
    }
}

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

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」。。

使用 COPY 語句將數據載入 Azure Synapse Analytics

使用 COPY 語句 是將數據載入具有高輸送量的 Azure Synapse Analytics 簡單且彈性的方式。 若要深入瞭解詳細數據,請使用 COPY 語句檢查 大量載入數據

  • 如果您的源數據位於 Azure Blob 或 Azure Data Lake 儲存體 Gen2 中,而且格式與 COPY 語句相容,您可以使用複製活動直接叫用 COPY 語句,讓 Azure Synapse Analytics 從來源提取數據。 如需詳細資訊,請參閱 使用 COPY 語句直接複製。
  • 如果您的源數據存放區和格式原本不受 COPY 語句支援,請改用 COPY 語句功能來使用分段複製。 分段複製功能也能提供更好的輸送量。 它會自動將數據轉換成 COPY 語句相容格式、將數據儲存在 Azure Blob 記憶體中,然後呼叫 COPY 語句將數據載入 Azure Synapse Analytics。

提示

搭配 Azure Integration Runtime 使用 COPY 語句時,有效 資料整合 單位 (DIU) 一律為 2。 調整 DIU 不會影響效能,因為從記憶體載入資料是由 Azure Synapse 引擎所提供。

使用 COPY 語句直接複製

Azure Synapse Analytics COPY 語句直接支援 Azure Blob、Azure Data Lake 儲存體 Gen1 和 Azure Data Lake 儲存體 Gen2。 如果您的源數據符合本節所述的準則,請使用 COPY 語句直接從源數據存放區複製到 Azure Synapse Analytics。 否則,請使用 COPY 語句使用分段複製。 如果不符合準則,服務會檢查設定,並失敗複製活動執行。

  1. 來源連結服務和格式具有下列類型和驗證方法:

    支援的源數據存放區類型 支援的格式 支援的來源驗證類型
    Azure Blob 分隔符號文字 帳戶金鑰驗證、共用存取簽章驗證、服務主體驗證、系統指派的受控識別驗證
      Parquet 帳戶金鑰驗證、共用存取簽章驗證
      ORC 帳戶金鑰驗證、共用存取簽章驗證
    Azure Data Lake Storage Gen2 \(部分機器翻譯\) 分隔符號文字
    Parquet
    ORC
    帳戶金鑰驗證、服務主體驗證、系統指派的受控識別驗證

    重要

  2. 格式設定具有下列各項:

    1. 對於 Parquetcompression 不可以是 壓縮SnappyGZip
    2. 若為 ORCcompression 不可以是 壓縮zlibSnappy
    3. 針對 分隔文字
      1. rowDelimiter 明確設定為 單一字元 或 “\r\n”,不支持預設值。
      2. nullValue 保留為預設值,或設定為 空字串 (“” )。
      3. encodingName 保留為預設值,或設定為 utf-8 或 utf-16
      4. escapeChar 必須與 相同 quoteChar,且 不是空的。
      5. skipLineCount 保留為預設值或設定為 0。
      6. compression 不可以是 壓縮GZip
  3. 如果您的來源是資料夾, recursive 則複製活動中必須設定為 true,而且 wildcardFilename 必須是 **.*

  4. wildcardFolderPathwildcardFilename (非 **.*)、modifiedDateTimeStartmodifiedDateTimeEnd、、 prefixenablePartitionDiscoveryadditionalColumns 未指定。

複製活動中支援 allowCopyCommand 下列 COPY 語句設定:

屬性 描述 必要
defaultValues 指定 Azure Synapse Analytics 中每個目標數據行的預設值。 屬性中的預設值會覆寫數據倉儲中設定的 DEFAULT 條件約束,而識別數據行不能有預設值。 No
additionalOptions 將直接在 COPY 語句的 「With」 子句中傳遞至 Azure Synapse Analytics COPY 語句的其他選項。 請視需要引用值,以符合 COPY 語句需求。 No
"activities":[
    {
        "name": "CopyFromAzureBlobToSQLDataWarehouseViaCOPY",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "ParquetDataset",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "AzureSQLDWDataset",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "ParquetSource",
                "storeSettings":{
                    "type": "AzureBlobStorageReadSettings",
                    "recursive": true
                }
            },
            "sink": {
                "type": "SqlDWSink",
                "allowCopyCommand": true,
                "copyCommandSettings": {
                    "defaultValues": [
                        {
                            "columnName": "col_string",
                            "defaultValue": "DefaultStringValue"
                        }
                    ],
                    "additionalOptions": {
                        "MAXERRORS": "10000",
                        "DATEFORMAT": "'ymd'"
                    }
                }
            },
            "enableSkipIncompatibleRow": true
        }
    }
]

使用 COPY 語句分段複製

當您的源數據原生與 COPY 語句不相容時,請透過臨時暫存 Azure Blob 或 Azure Data Lake 儲存體 Gen2 啟用數據複製(不能是 Azure 進階儲存體)。 在此情況下,服務會自動轉換數據,以符合 COPY 語句的數據格式需求。 然後它會叫用 COPY 語句將數據載入 Azure Synapse Analytics。 最後,其會清除儲存體中的暫存資料。 如需透過暫存複製數據的詳細資訊,請參閱 分段複製

若要使用此功能,請使用帳戶密鑰或系統管理的身分識別驗證,建立 Azure Blob 儲存體 連結服務Azure Data Lake 儲存體 Gen2 鏈接服務,將 Azure 記憶體帳戶稱為過渡記憶體。

重要

  • 當您針對預備連結服務使用受控識別驗證時,請分別瞭解 Azure Blob 和 Azure Data Lake 儲存體 Gen2 所需的設定 您也需要將許可權授與預備 Azure Blob 儲存體 或 Azure Data Lake 儲存體 Gen2 帳戶中的 Azure Synapse Analytics 工作區受控識別。 若要瞭解如何授與此許可權,請參閱 將許可權授與工作區受控識別
  • 如果您的預備 Azure 儲存體 已設定 VNet 服務端點,您必須使用受控識別驗證搭配記憶體帳戶上啟用的「允許信任的 Microsoft 服務」,請參閱搭配 Azure 記憶體使用 VNet 服務端點的影響。

重要

如果您的預備 Azure 儲存體 已設定受控私人端點並啟用記憶體防火牆,您必須使用受控識別驗證,並將 儲存體 Blob 數據讀取器許可權授與 Synapse SQL Server,以確保它可以在 COPY 語句載入期間存取暫存的檔案。

"activities":[
    {
        "name": "CopyFromSQLServerToSQLDataWarehouseViaCOPYstatement",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "SQLServerDataset",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "AzureSQLDWDataset",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlSource",
            },
            "sink": {
                "type": "SqlDWSink",
                "allowCopyCommand": true
            },
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingStorage",
                    "type": "LinkedServiceReference"
                }
            }
        }
    }
]

使用 PolyBase 將資料載入至 Azure Synapse Analytics

使用 PolyBase 是將大量數據載入至具有高輸送量的 Azure Synapse Analytics 有效率的方式。 您將會看到使用 PolyBase 而不是預設 BULKINSERT 機制的輸送量大幅提升。

  • 如果您的源數據位於 Azure Blob、Azure Data Lake 儲存體 Gen1 或 Azure Data Lake 儲存體 Gen2 中,而且格式與 PolyBase 相容,您可以使用複製活動來直接叫用 PolyBase,讓 Azure Synapse Analytics 從來源提取數據。 如需詳細資訊,請參閱 使用PolyBase直接複製。
  • 如果 PolyBase 原本不支援源資料存放區和格式, 請改用使用 PolyBase 功能的分段複製。 分段複製功能也能提供更好的輸送量。 它會自動將數據轉換成 PolyBase 相容的格式、將數據儲存在 Azure Blob 記憶體中,然後呼叫 PolyBase 將數據載入 Azure Synapse Analytics。

提示

深入瞭解 使用PolyBase的最佳做法。 搭配 Azure Integration Runtime 使用 PolyBase 時,直接或分段記憶體的有效 資料整合 單位 (DIU) 一律為 2。 調整 DIU 不會影響效能,因為從記憶體載入資料是由 Synapse 引擎所提供。

複製活動中支援 polyBaseSettings 下列 PolyBase 設定:

屬性 描述 必要
rejectValue 指定在查詢失敗前可以拒絕的資料列數目或百分比。

在 CREATE EXTERNAL TABLE (Transact-SQL)[自變數] 區段中深入瞭解 PolyBase 的拒絕選項。

允許的值為 0(預設值)、1、2 等。
No
rejectType 指定 rejectValue 選項是常值或百分比。

允許的值為 Value (預設值) 和 [百分比]。
No
rejectSampleValue 決定 PolyBase 重新計算拒絕數據列百分比之前要擷取的數據列數目。

允許的值為 1、2 等。
是,如果 rejectType百分比
useTypeDefault 指定當 PolyBase 從文字檔擷取資料時,如何處理分隔符號文字檔中遺漏的值。

CREATE EXTERNAL FILE FORMAT (Transact-SQL) 的<引數>一節深入了解這個屬性。

允許的值為 TrueFalse (預設值)。

No

使用 PolyBase 直接複製

Azure Synapse Analytics PolyBase 直接支援 Azure Blob、Azure Data Lake 儲存體 Gen1 和 Azure Data Lake 儲存體 Gen2。 如果您的源數據符合本節所述的準則,請使用 PolyBase 直接從源數據存放區複製到 Azure Synapse Analytics。 否則,請使用 PolyBase的分段複製。

提示

若要有效率地將數據複製到 Azure Synapse Analytics,請從 Azure Data Factory 深入瞭解,讓您在搭配 Azure Synapse Analytics 使用 Data Lake Store 時,更輕鬆且方便地從數據中發掘見解。

如果不符合需求,服務會檢查設定,並自動回復至 BULKINSERT 機制以進行數據移動。

  1. 來源連結服務具有下列類型和驗證方法:

    支援的源數據存放區類型 支援的來源驗證類型
    Azure Blob 帳戶金鑰驗證、系統指派的受控識別驗證
    Azure Data Lake Storage Gen1 服務主體驗證
    Azure Data Lake Storage Gen2 \(部分機器翻譯\) 帳戶金鑰驗證、系統指派的受控識別驗證

    重要

  2. 數據格式ParquetORC分隔文字,具有下列設定:

    1. 資料夾路徑不包含通配符篩選。
    2. 檔名是空的,或指向單一檔案。 如果您在複製活動中指定通配符檔名,則只能是 **.*
    3. rowDelimiterdefault\n\r\n\r
    4. nullValue 會保留為預設值或設定為 空字串 (“),且 treatEmptyAsNull 保留為預設值或設定為 true。
    5. encodingName 會保留為預設值,或設定為 utf-8
    6. quoteChar未指定、 escapeCharskipLineCount 。 PolyBase 支援略過標頭資料列,可設定為 firstRowAsHeader
    7. compression 不可以是 壓縮GZipDeflate
  3. 如果您的來源是資料夾, recursive 則複製活動中必須設定為 true。

  4. wildcardFolderPath未指定 、wildcardFilenamemodifiedDateTimeStartmodifiedDateTimeEnd、、prefixenablePartitionDiscoveryadditionalColumns

注意

如果您的來源是資料夾,請注意 PolyBase 會從資料夾及其所有子資料夾擷取檔案,而且不會從檔名開頭為底線 (_) 或句號的檔案擷取數據,如這裡所述 - LOCATION 自變數

"activities":[
    {
        "name": "CopyFromAzureBlobToSQLDataWarehouseViaPolyBase",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "ParquetDataset",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "AzureSQLDWDataset",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "ParquetSource",
                "storeSettings":{
                    "type": "AzureBlobStorageReadSettings",
                    "recursive": true
                }
            },
            "sink": {
                "type": "SqlDWSink",
                "allowPolyBase": true
            }
        }
    }
]

使用 PolyBase 分段複製

當您的源數據原生與 PolyBase 不相容時,請啟用透過臨時暫存 Azure Blob 或 Azure Data Lake 儲存體 Gen2 複製數據(它不能是 Azure 進階儲存體)。 在此情況下,服務會自動轉換數據,以符合 PolyBase 的數據格式需求。 然後它會叫用 PolyBase 將數據載入 Azure Synapse Analytics。 最後,其會清除儲存體中的暫存資料。 如需透過暫存複製數據的詳細資訊,請參閱 分段複製

若要使用這項功能,請使用帳戶密鑰或受控識別驗證建立 Azure Blob 儲存體 鏈接服務Azure Data Lake 儲存體 Gen2 連結服務,將 Azure 記憶體帳戶稱為過渡記憶體。

重要

  • 當您針對預備連結服務使用受控識別驗證時,請分別瞭解 Azure Blob 和 Azure Data Lake 儲存體 Gen2 所需的設定 您也需要將許可權授與預備 Azure Blob 儲存體 或 Azure Data Lake 儲存體 Gen2 帳戶中的 Azure Synapse Analytics 工作區受控識別。 若要瞭解如何授與此許可權,請參閱 將許可權授與工作區受控識別
  • 如果您的預備 Azure 儲存體 已設定 VNet 服務端點,您必須使用受控識別驗證搭配記憶體帳戶上啟用的「允許信任的 Microsoft 服務」,請參閱搭配 Azure 記憶體使用 VNet 服務端點的影響。

重要

如果您的預備 Azure 儲存體 已設定受控私人端點並啟用記憶體防火牆,您必須使用受控識別驗證,並將 儲存體 Blob 數據讀取器許可權授與 Synapse SQL Server,以確保它可以在 PolyBase 載入期間存取暫存的檔案。

"activities":[
    {
        "name": "CopyFromSQLServerToSQLDataWarehouseViaPolyBase",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "SQLServerDataset",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "AzureSQLDWDataset",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlSource",
            },
            "sink": {
                "type": "SqlDWSink",
                "allowPolyBase": true
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingStorage",
                    "type": "LinkedServiceReference"
                }
            }
        }
    }
]

使用 PolyBase 的最佳做法

下列各節除了 Azure Synapse Analytics 最佳做法中所述的最佳做法之外,還提供最佳做法。

必要的資料庫權限

若要使用 PolyBase,將數據載入 Azure Synapse Analytics 的用戶必須具有 目標資料庫的 “CONTROL” 許可權 。 達成此目標的方法之一,就是將使用者新增為db_owner角色的成員。 瞭解如何在 Azure Synapse Analytics 概觀中執行此動作。

數據列大小和數據類型限制

PolyBase 載入限制為小於 1 MB 的數據列。 無法用來載入 VARCHR(MAX)、NVARCHAR(MAX)或 VARBINARY(MAX)。 如需詳細資訊,請參閱 Azure Synapse Analytics 服務容量限制

當源數據的數據列大於 1 MB 時,您可能會想要將源數據表垂直分割成數個小數據表。 請確定每個數據列的大小上限不會超過限制。 然後,您可以使用 PolyBase 載入較小的數據表,並在 Azure Synapse Analytics 中合併在一起。

或者,對於具有這類寬數據行的數據,您可以使用非 PolyBase 關閉 [允許 PolyBase] 設定來載入數據。

Azure Synapse Analytics 資源類別

若要達到最佳的輸送量,請將較大的資源類別指派給透過PolyBase將數據載入 Azure Synapse Analytics 的使用者。

PolyBase, 疑難排解

載入至十進位數據行

如果您的源數據是文字格式或其他非 PolyBase 兼容存放區(使用分段複製和 PolyBase),且其中包含要載入至 Azure Synapse Analytics Decimal 數據行的空白值,您可能會收到下列錯誤:

ErrorCode=FailedDbOperation, ......HadoopSqlException: Error converting data type VARCHAR to DECIMAL.....Detailed Message=Empty string can't be converted to DECIMAL.....

解決方案是取消選取複製活動接收> - PolyBase 設定中的 [使用類型預設值] 選項(false 為 false)。 “USE_TYPE_DEFAULT” 是 PolyBase 原生組態,指定當 PolyBase 從文本檔擷取數據時,如何處理分隔文本檔中的遺漏值。

檢查 Azure Synapse Analytics 中的 tableName 屬性

下表提供如何在 JSON 數據集中指定 tableName 屬性的範例。 它會顯示數個架構和數據表名稱的組合。

DB 結構描述 資料表名稱 tableName JSON 屬性
dbo MyTable MyTable 或 dbo.MyTable 或 [dbo].[MyTable]
dbo1 MyTable dbo1.MyTable 或 [dbo1].[MyTable]
dbo My.Table [My.Table] 或 [dbo].[My.Table]
dbo1 My.Table [dbo1].[My.Table]

如果您看到下列錯誤,問題可能是您為 tableName 屬性指定的值。 如需指定 tableName JSON 屬性值的正確方式,請參閱上表。

Type=System.Data.SqlClient.SqlException,Message=Invalid object name 'stg.Account_test'.,Source=.Net SqlClient Data Provider

包含預設值的資料行

PolyBase 功能目前只接受與目標數據表相同的數據行數目。 例如,具有四個數據行的數據表,其中一個數據行是使用預設值來定義。 輸入數據仍然需要有四個數據行。 三欄輸入資料集會產生類似下列訊息的錯誤:

All columns of the table must be specified in the INSERT BULK statement.

NULL 值是預設值的特殊形式。 如果數據行可為 Null,該數據行的 Blob 中的輸入數據可能是空的。 但無法從輸入數據集中遺漏它。 PolyBase 會在 Azure Synapse Analytics 中插入遺漏值的 NULL。

外部檔案存取失敗

如果您收到下列錯誤,請確定您使用的是受控識別驗證,並已將 Blob 數據讀取器許可權授與 Azure Synapse 工作區的受控識別 儲存體。

Job failed due to reason: at Sink '[SinkName]': shaded.msdataflow.com.microsoft.sqlserver.jdbc.SQLServerException: External file access failed due to internal error: 'Error occurred while accessing HDFS: Java exception raised on call to HdfsBridge_IsDirExist. Java exception message:\r\nHdfsBridge::isDirExist 

如需詳細資訊,請參閱 在建立工作區之後將許可權授與受控識別。

對應資料流程屬性

在對應數據流中轉換數據時,您可以從 Azure Synapse Analytics 讀取和寫入數據表。 如需詳細資訊,請參閱對應資料流程中的來源轉換接收轉換

來源轉換

Azure Synapse Analytics 的特定 設定 可在 中取得來源轉換的來源 [選項] 索引標籤。

輸入 選取您是否將來源指向資料表(對等的 Select * from <table-name>)或輸入自訂 SQL 查詢。

啟用預備 ,強烈建議您在生產工作負載中搭配 Azure Synapse Analytics 來源使用此選項。 當您從管線使用 Azure Synapse Analytics 來源執行 數據流活動 時,系統會提示您輸入預備位置記憶體帳戶,並將用於分段數據載入。 這是從 Azure Synapse Analytics 載入數據最快的機制。

  • 當您針對記憶體連結服務使用受控識別驗證時,請分別瞭解 Azure Blob 和 Azure Data Lake 儲存體 Gen2 所需的設定
  • 如果您的 Azure 儲存體設定了 VNet 服務端點,您必須使用受控識別驗證並將儲存體帳戶上的「允許受信任的 Microsoft 服務」開啟,請參閱使用 VNet 服務端點搭配 Azure 儲存體的影響
  • 當您使用 Azure Synapse 伺服器 SQL 集區作為來源時,不支援啟用預備。

查詢: 如果您在 [輸入] 欄位中選取 [查詢],請對於您的來源輸入 SQL 查詢。 此設定會覆寫您在資料集中選擇的任何資料表。 這裡不支援 Order By 子句,但您可以設定完整的 SELECT FROM 陳述式。 您也可使用使用者定義的資料表函數。 select * from udfGetData() 是 SQL 中傳回資料表的 UDF。 此查詢會產生您可以在資料流程中使用的來源資料表。 使用查詢也是縮減資料列以進行測試或查閱的絕佳方式。

SQL 範例:Select * from MyTable where customerId > 1000 and customerId < 2000

批次大小: 輸入批次大小,將大型資料區塊化為讀取。 在數據流中,此設定將用來設定 Spark 單欄快取。 這是選項欄位,如果保留空白,則會使用 Spark 預設值。

隔離等級: 對應資料流程中 SQL 來源的預設值為「未認可」。 您可以在這裡將隔離等級變更為下列其中一個值:

  • 讀取認可
  • 讀取未認可
  • 可重複讀取
  • 可序列化
  • None (忽略隔離等級)

隔離等級

接收轉換

azure Synapse Analytics 的特定 設定 可在接收轉換的 [設定] 索引標籤中取得。

Update 方法:決定您的資料庫目的地所允許的作業。 預設僅允許插入。 若要更新、upsert 或刪除資料列,必須使用 alter-row 轉換來標記這些動作的資料列。 對於更新、更新插入和刪除,必須設定索引鍵資料行,以決定要改變哪一個資料列。

資料表動作: 決定在寫入之前,是否要重新建立或移除目的地資料表中的所有資料列。

  • 無:資料表不會執行任何動作。
  • 重新建立:資料表會遭到捨棄並重新建立。 如果要動態建立新的資料表,則為必要。
  • 截斷:系統將會移除目標資料表中的所有資料列。

啟用預備: 這可讓您使用複製命令載入 Azure Synapse Analytics SQL 集區,而且建議用於大部分的 Synapse 接收。 暫存記憶體是在執行數據流活動中設定的。

批次大小:控制要在每個值區中寫入的資料列數目。 較大的批次大小會改善壓縮和記憶體優化,但會導致在快取資料時發生記憶體例外狀況的風險。

使用接收架構:根據預設,系統會在接收架構下建立臨時表作為預備。 或者,您也可以取消核取 [使用接收架構] 選項,而是在 [選取使用者資料庫架構] 中,指定 Data Factory 建立臨時表以載入上游數據,並在完成時自動清除它們。 請確定您的資料庫中具有建立資料表的權限,以及改變結構描述的權限。

顯示數據流「使用接收架構」的螢幕快照。

前置和後置 SQL 指令碼:輸入將在寫入至您的接收資料庫之前 (前置處理) 和之後 (後置處理) 將執行的多行 SQL 指令碼

此螢幕快照顯示 Azure Synapse Analytics 數據流中的前置和後置 SQL 處理腳本。

提示

  1. 建議將含有多個命令的單一批次指令碼分成多個批次。
  2. 只有傳回簡單更新計數的資料定義語言 (DDL) 和資料操作語言 (DML) 陳述式可以當作批次的一部份來執行。 若要深入了解,請參閱執行批次作業

處理資料列時發生錯誤

寫入 Azure Synapse Analytics 時,某些數據列可能會因為目的地所設定的限制而失敗。 常見錯誤包括:

  • 資料表中的字串或二進位資料會遭到截斷
  • 無法將 NULL 值插入資料行
  • 將值轉換成數據類型時,轉換失敗

根據預設,資料流程執行會在它遇到的第一個錯誤時失敗。 您可以選擇 [發生錯誤時繼續],讓您的資料流程即使在個別資料列發生錯誤時也能夠完成。 該服務會提供不同的選項,讓您處理這些錯誤資料列。

交易認可:選擇您的資料是以單一交易或批次寫入。 單一交易可提供更佳的效能,而且在交易完成之前,不會讓其他人看見寫入的數據。 批次交易的效能會更差,但適用於大型數據集。

輸出拒絕的資料:如果啟用,則可以將錯誤資料列輸出至 Azure Blob 儲存體中的 csv 檔案或您選擇的 Azure Data Lake Storage Gen2 帳戶。 這會寫入含有三個額外資料行的錯誤資料列:INSERT 或 UPDATE 之類的 SQL 作業、資料流程錯誤碼,以及資料列上的錯誤訊息。

發生錯誤時回報成功:如果啟用,即使找到發生錯誤的資料列,資料流程也會標示為成功。

顯示對應數據流接收轉換中錯誤數據列處理的圖表。

查閱活動屬性

若要了解屬性的詳細資料,請參閱查閱活動

GetMetadata 活動屬性

若要了解關於屬性的詳細資料,請參閱 GetMetadata 活動

Azure Synapse Analytics 的數據類型對應

當您從 Azure Synapse Analytics 複製數據或將數據複製到 Azure Synapse Analytics 時,會使用下列對應從 Azure Synapse Analytics 數據類型到 Azure Data Factory 過渡期數據類型。 使用 Synapse 管線將數據從 Azure Synapse Analytics 複製到 Azure Synapse Analytics 時,也會使用這些對應,因為管線也會在 Azure Synapse 內實作 Azure Data Factory。 請參閱 架構和數據類型對應 ,以瞭解複製活動如何將來源架構和數據類型對應至接收。

提示

請參閱 Azure Synapse Analytics 中 Azure Synapse Analytics 支援的數據類型和不支援數據類型的因應措施一文。

Azure Synapse Analytics 數據類型 Data Factory 過渡期資料類型
BIGINT Int64
BINARY Byte[]
bit Boolean
char String, Char[]
date Datetime
Datetime Datetime
datetime2 Datetime
Datetimeoffset DateTimeOffset
Decimal Decimal
FILESTREAM attribute (varbinary(max)) Byte[]
Float Double
image Byte[]
int Int32
money Decimal
NCHAR String, Char[]
NUMERIC Decimal
NVARCHAR String, Char[]
real Single
rowversion Byte[]
smalldatetime Datetime
SMALLINT Int16
SMALLMONEY Decimal
time TimeSpan
TINYINT Byte
UNIQUEIDENTIFIER Guid
varbinary Byte[]
varchar String, Char[]

如需複製活動所支援作為來源和接收的數據存放區清單,請參閱 支援的數據存放區和格式