我試圖將一個Blob容器從一個Azure存儲帳戶複製到另一個。我正在使用Azure Data Factory
複製活動來執行此操作。複製所有的斑點很簡單。但我只想複製特定的擴展blob。使用Azure數據工廠僅複製特定的擴展blob
在創建輸入數據集時,我沒有看到任何指定wildcard
或regex
的選項。
有沒有什麼辦法可以通過ADF實現這一點。我也嘗試了Azure Data Movement Library。即使它沒有這樣的功能。 DML僅提供基於prefix
的過濾。
我試圖將一個Blob容器從一個Azure存儲帳戶複製到另一個。我正在使用Azure Data Factory
複製活動來執行此操作。複製所有的斑點很簡單。但我只想複製特定的擴展blob。使用Azure數據工廠僅複製特定的擴展blob
在創建輸入數據集時,我沒有看到任何指定wildcard
或regex
的選項。
有沒有什麼辦法可以通過ADF實現這一點。我也嘗試了Azure Data Movement Library。即使它沒有這樣的功能。 DML僅提供基於prefix
的過濾。
在數據集定義中,使用FileFilter屬性來處理此問題。例如。
{
"name": "Dataset01",
"properties": {
"type": "AzureBlob",
"linkedServiceName": "BlobStore01",
"structure": [ ],
"typeProperties": {
"folderPath": "FilesFolder1/FilesFolder2",
"fileFilter": "*.csv" // <<<<< here
}
//etc...
}
//etc...
}
它接受使用*和?的多個和單個字符通配符。
更多信息,因爲這文檔頁面的一部分:
https://docs.microsoft.com/en-us/azure/data-factory/data-factory-onprem-file-system-connector
希望這有助於。
基於我的理解,blob沒有文件擴展名的概念。在我們的本地計算機上下載這些文件時,文件擴展名會很方便。根據文件擴展名,我們的本地計算機可以決定使用哪個應用程序來打開這些文件。
有什麼辦法,我可以使用ADF
我們可以使用Azure的數據工廠定製活動,要做到這一點實現這一目標。我們可以自己實現我們的邏輯。有關如何使用自定義活動的更多信息,請參閱此tutorials。
我們也可以使用帶時間觸發的Azure WebJob來做到這一點。
如果Azure Data Factory是唯一的選擇,我們可以用我們的邏輯來實現複製blob。以下是我的演示代碼。我測試了它在我身邊,它工作正常
CloudStorageAccount storageAccountSource = CloudStorageAccount.Parse("connection string");
CloudStorageAccount storageAccountDest = CloudStorageAccount.Parse("connection string");
// Create the blob client.
CloudBlobClient blobClientSource = storageAccountSource.CreateCloudBlobClient();
CloudBlobClient blobClientDest = storageAccountDest.CreateCloudBlobClient();
CloudBlobContainer containerSource = blobClientSource.GetContainerReference("test");
CloudBlobContainer containerDest = blobClientDest.GetContainerReference("test");
containerDest.CreateIfNotExists();
SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List |
SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create | SharedAccessBlobPermissions.Delete
};
// Get the container's existing permissions.
BlobContainerPermissions permissions = containerSource.GetPermissions();
permissions.SharedAccessPolicies.Add("policy", sharedPolicy);
containerSource.SetPermissionsAsync(permissions);
var blobToken = containerSource.GetSharedAccessSignature(sharedPolicy);
foreach (IListBlobItem item in containerSource.ListBlobs())
{
CloudBlob destBlob;
CloudBlob srcBlob;
if (item.GetType() == typeof(CloudBlockBlob))
{
srcBlob = (CloudBlockBlob)item;
destBlob = containerDest.GetBlockBlobReference(srcBlob.Name);
}
else
{
srcBlob = (CloudPageBlob)item;
destBlob = containerDest.GetPageBlobReference(srcBlob.Name);
}
if (srcBlob.Name.Contains("format"))
{
destBlob.StartCopy(new Uri(srcBlob.Uri.AbsoluteUri + blobToken));
}
}
很高興知道這樣的過濾器存在。但是您分享的文章提到了'請注意fileFilter適用於輸入的FileShare數據集'。不確定這是否適用於Blob Input數據集。 – Venky
爆炸!對不起,錯過了。我假設了一些如此簡單的東西適用於兩者!現在可以爲Microsoft創建另一個用戶反饋信息:-) –
是的。 ADF缺乏如此多的基本功能。例如使用「上次修改」列進行增量備份,並通過Blob Type進行Blob篩選。 Azure DML現在是Blob存儲的最佳解決方案。 – Venky