如何使用datafactory管道转换xml数据

时间:2019-05-20 15:54:52

标签: xml azure-data-factory azure-data-factory-2

如何将XML有效内容中的数据保存到Blob存储?

输入

<root>
  <alexIsAwesome>yes he is</alexIsAwesome>
  <bytes>sdfsdfjijOIJOISJDFQPWORPJkjsdlfkjlksdf==</bytes>
</root>

所需结果

<root>
  <alexIsAwesome>yes he is</alexIsAwesome>
  <bytes>/blob/path/toSavedPayload</bytes>
</root>
  1. 将字节保存在blob中的某个地方
  2. 用保存字节的URI替换字节

我们如何使用数据工厂从XML中提取节点并将其保存到Blob?

3 个答案:

答案 0 :(得分:2)

在这种情况下,您必须使用一些自定义代码来执行此操作。我会从这些选项中选择

  • Azure函数-仅用于一些简单的数据处理
  • Azure Databricks-如果您需要处理一些大的XML数据

答案 1 :(得分:2)

由于Azure数据工厂本身不支持XML,所以建议您使用SSIS包。

  1. 在数据流任务中,具有XML源并将字节从xml中读取到DT_Image数据类型的变量中。
  2. 创建一个脚本任务,该任务将第1步中获得的字节数组(DT_Image)上传到azure blob存储中,如下所述。根据要求对代码进行了略微修改。 Reference of SO post
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;    

// Retrieve storage account from connection string.
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse("StorageKey");

// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

// Retrieve reference to a blob named "myblob".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob");

byte[] byteArrayIn = Dts.Variables["User::ImageVariable"].Value;

// Create or overwrite the "myblob" blob with contents from a local file.
using (var memoryStream = new MemoryStream(byteArrayIn);)
{
    blockBlob.UploadFromStream(memoryStream);
}
  1. 现在,在Azure Data Factory的SSIS运行时中托管此SSIS包并执行SSIS包。

SSIS Runtime in Azure DataFactory

答案 2 :(得分:1)

当前,ADF本身不支持XML。但是

  1. 您可以编写自己的代码,然后使用ADF的enter image description here
  2. SSIS内置了对custom activity的支持。也许你可以看看。