仅使用Azure数据工厂复制特定的扩展斑点



我正在尝试将一个blob容器从一个Azure存储帐户复制到另一个。我正在使用Azure Data Factory复制活动来做到这一点。复制所有斑点很容易。但是我只想复制特定的扩展斑点。

在创建输入数据集时,我看不到指定wildcardregex的任何选项。

有什么方法可以通过ADF实现这一目标。我还尝试了Azure数据运动库。即使没有这种功能。DML中只有基于prefix的过滤。

在数据集定义中使用 filefilter 属性来处理此操作。例如。

{
  "name": "Dataset01",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "BlobStore01",
    "structure": [ ],
    "typeProperties": {
      "folderPath": "FilesFolder1/FilesFolder2",
      "fileFilter": "*.csv" // <<<<< here
      }
      //etc...
     }
     //etc...
    }

这同时使用 *和?。

更多信息作为此文档页面的一部分:

https://learn.microsoft.com/en-us/azure/data-factory/data-factory-onprem-onprem-file-system-connector

希望这会有所帮助。

基于我的理解,Blob没有文件扩展概念。当我们在本地计算机上下载这些文件时,文件扩展程序将非常方便。基于文件扩展名,我们的本地计算机可以决定用于打开这些文件的应用程序。

有什么办法可以通过ADF

实现这一目标

我们可以使用Azure数据工厂自定义活动来做到这一点。我们可以自己实施逻辑。有关如何使用自定义活动的更多信息,请参阅本教程。

我们还可以使用Azure WebJob和Time触发来做到这一点。

如果Azure Data Factory是唯一的选择,我们可以使用逻辑实现复制斑点。以下是我的演示代码。我在我身边进行了测试,它可以正常工作

         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));
            }
       }

相关内容

  • 没有找到相关文章

最新更新