簡體   English   中英

Azure 數據工廠管道

[英]Azure Data Factory pipeline

我想為 Azure blob 容器創建鏈接服務,其帳戶信息來自 Azure SQL 數據庫。 由於條目和帳戶信息的數量是動態的,因此我無法在 Azure 數據工廠的設置部分定義到 Azure blob 容器的鏈接服務。 Azure 數據工廠中的鏈接服務可以直接動態創建嗎?

不幸的是,這在 ADF 的當前版本中是不可能的。 您只能使用函數來引用與管道執行(執行日期/時間)相關的元素。 不能使用其他數據源動態定義 blob 名稱。

您可以將數據工廠中的函數與上述系統變量一起用於以下目的:

  1. 指定數據選擇查詢(請參閱數據移動活動文章引用的連接器文章。調用數據工廠函數的語法是: $$ 用於數據選擇查詢以及活動和數據集中的其他屬性。
  2. 使用活動輸入集合中的數據工廠函數指定輸入依賴項(請參閱上面的示例)。 指定輸入依賴表達式不需要 $$。

從這里: https : //docs.microsoft.com/en-us/azure/data-factory/data-factory-functions-variables

這是您目前可以使用 blob 輸入執行的所有操作: https : //docs.microsoft.com/en-us/azure/data-factory/data-factory-azure-blob-connector

在您的情況下,我建議如果您可以重新定義輸入 blob 以具有可以從管道執行的日期/時間派生的名稱/文件夾,那么您可以獲得該功能。

否則,您可以進行 usql 調用,從 sql 獲取信息,然后將 blob 移動到帶有日期戳的文件夾中,然后管道可以接收該文件夾。

好吧,我認為這可以通過將 Powershell 腳本與數據工廠 cmdlet 和 Azure 函數結合來運行它們。 因此,powershell 需要連接並從存儲中獲取 schmas,創建數據集並部署它們,更改管道,設置管道計划並添加/刪除元素,然后恢復(或僅設置當天的管道啟動)流程。 但這需要相當多的工作。

但是現在預覽的版本 2 中的數據工廠提供了更多選項,包括使用 SSIS,因此可以解決該問題。

我實際上使用python sdk執行此操作,我不僅為鏈接服務執行此操作,而且對於每個活動,我的所有元數據都存儲在 SQL Server 表中(我稱之為 adf.Mapping),該表具有如下列: source_linked_service_name、source_dataset、target_linked_service_name、target_dataset

創建鏈接服務所需的元數據存儲在另一個表中,我只是通過使用 links_service_name 來獲取它,我有一個計划任務每​​天運行我的 python 腳本,如果使用上述庫發生更改,它會更新鏈接服務:

properties = SqlServerLinkedService(connection_string=connection_string,
                                                user_name=user_name,
                                                password=password,
                                                connect_via=ir_sql_server)

adf_client.adf_object.linked_services.create_or_update( resource_group_name=resource_group_name, factory_name=data_factory_name, linked_service_name=self.name, properties=properties)
logger.info('Created SQL Server linked service: ' + str(self.name))

使用“執行 SSIS 包”任務,您可以在可以管理動態數據源的女巫中運行 ssis 包。

在此處輸入圖片說明

第二種方法是使用“筆記本”任務。 然后,您需要運行 Python 或 Scala 來連接到您擁有連接信息的源,然后以某種循環或其他方式創建數據集以實現您的目標。

在此處輸入圖片說明

在 ADF(甚至 v2)內部,通過使用 ADF 對象,您不能這樣做。

一種方法是使用 Azure Databricks Notebooks

另一種方法是參數化值

{
  "type":"Microsoft.DataFactory/factories/linkedservices",
  "properties":{
  "parameters": {
        "StorageAccountEndpoint": {
            "type": "String",
            "defaultValue": "https://<<yourstorageaccountname>>.blob.core.windows.net/?sv=2018-03-28&ss=b&srt=sco&sp=rwdlac&se=2019-10-20T16:33:57Z&st=2019-09-20T08:33:57Z&spr=https&sig=lDrBjD%2BjM2T1XjRW997VPMqDp99ZxVoReyRK0VEX7zQ%3D"
        }
    },
    "type": "AzureBlobStorage",
    "typeProperties": {
        "sasUri": "@{linkedService().StorageAccountEndpoint}"
    }

}}

您可以擁有一個參數化的 Linked 服務來執行此操作,例如:

{
    "name": "AzureBlobStorage1",
    "properties": {
        "type": "AzureBlobStorage",
        "annotations": [],
        "parameters": {
            "storageAccountName": {
                "type": "string"
            }
        },
        "typeProperties": {
            "serviceEndpoint": "@{concat('https://',linkedService().storageAccountName,'.blob.core.windows.net')}",
            "accountKind": "StorageV2"
        }
    }
}

此代碼允許您僅使用存儲帳戶名稱,但您可以根據需要使用完整 url。

然后創建一個帶有 2 個參數的數據集:

  • 存儲帳戶名稱
  • 容器名稱

在此處輸入圖片說明

然后您的數據集將如下所示:

在此處輸入圖片說明

在這個例子中,我使用了一個二進制格式的數據集,但選擇適合你的任何東西。

幾乎所有連接器都可以完全參數化,但並非所有連接器都允許從 UI 中進行參數化; 你需要像我一樣用 JSON 來做。

PS--> 我沒有處理動態存儲帳戶名稱,但是我已經為 ADF 管道中一個數據庫帳戶中的多個數據庫名稱動態處理了它。 希望能幫助到你。

Azure 數據工廠中的鏈接服務可以動態配置為在執行時接受參數值。 這些服務在 Azure 中稱為參數化鏈接服務

您需要將動態/更改值配置為鏈接服務中的參數,然后在運行時從配置文件中引用它們的值。 可以通過 AzureDatafactory Pipeline 的查找活動來考慮配置文件。

顯示了一個用於動態獲取 Cosmos DB 名稱的示例參數化鏈接服務以供參考: 這里的 DBName 是在觸發管道時將與實際 DB 名稱值一起傳遞的參數。

{
    "name": "ls_name_xyz",
    "type": "Microsoft.DataFactory/factories/linkedservices",
    "properties": {
        "type": "CosmosDbMongoDbApi",
        "parameters": {
            "DBName": {
                "type": "String"
            }
        },
        "annotations": [],
        "typeProperties": {
            "connectionString": "your_connection_string-xyz",
            "database": "@{linkedService().DBName}",
            "encryptedCredential": "your_credentials-xyz"
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM