【问题标题】:How to transform xml data using datafactory pipeline如何使用 datafactory 管道转换 xml 数据
【发布时间】:2019-10-07 00:41:24
【问题描述】:

我们如何将 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?

【问题讨论】:

  • 需要更多信息 - 定义 XML 有效负载?您的意思是它是数据湖中的文件还是从 Web 或数据库调用在 ADF 管道中返回的?
  • xml blob 存储在存储帐户中,我正在寻找类似于常规 XSLT 转换的功能
  • 我使用 Azure Batch 自定义活动来解决这个问题。这是我提到的另一个 SO 答案:stackoverflow.com/questions/59938374/…

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


【解决方案1】:

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

  1. 您可以编写自己的代码,然后使用 ADF 的 custom activity
  2. SSIS 具有对XML as a source 的内置支持。也许你可以看看。

【讨论】:

【解决方案2】:

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

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

【讨论】:

【解决方案3】:

由于 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 数据工厂的 SSIS 运行时中托管此 SSIS 包并执行 SSIS 包。

SSIS Runtime in Azure DataFactory

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 2019-11-30
  • 2016-02-01
相关资源
最近更新 更多