[英]Azure Data Factory pipeline
我想為 Azure blob 容器創建鏈接服務,其帳戶信息來自 Azure SQL 數據庫。 由於條目和帳戶信息的數量是動態的,因此我無法在 Azure 數據工廠的設置部分定義到 Azure blob 容器的鏈接服務。 Azure 數據工廠中的鏈接服務可以直接動態創建嗎?
不幸的是,這在 ADF 的當前版本中是不可能的。 您只能使用函數來引用與管道執行(執行日期/時間)相關的元素。 不能使用其他數據源動態定義 blob 名稱。
您可以將數據工廠中的函數與上述系統變量一起用於以下目的:
- 指定數據選擇查詢(請參閱數據移動活動文章引用的連接器文章。調用數據工廠函數的語法是: $$ 用於數據選擇查詢以及活動和數據集中的其他屬性。
- 使用活動輸入集合中的數據工廠函數指定輸入依賴項(請參閱上面的示例)。 指定輸入依賴表達式不需要 $$。
從這里: 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))
一種方法是使用 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.