我计划使用 Azure 数据工厂来创建 Azure 表存储的备份。我的 Azure 表中的实体可能会更改其架构。有没有办法让 Azure 管道在每次架构更改时无需手动干预即可处理此问题?
例如:让第一个条目是
<entry>
<content type="application/xml">
<m:properties>
<d:PartitionKey>P1</d:PartitionKey>
<d:RowKey>R1</d:RowKey>
<d:Timestamp m:type="Edm.DateTime">2017-05-22T20:37:34.8743000Z</d:Timestamp>
<d:IsDefault m:type="Edm.Boolean">False</d:IsDefault>
</m:properties>
</content>
</entry>
而另一个条目可能是:
<entry>
<content type="application/xml">
<m:properties>
<d:PartitionKey>P2</d:PartitionKey>
<d:RowKey>R2</d:RowKey>
<d:Timestamp m:type="Edm.DateTime">2017-05-22T20:37:34.8743000Z</d:Timestamp>
<d:IsDefault m:type="Edm.Boolean">False</d:IsDefault>
**<d:IsTest m:type="Edm.Boolean">False</d:IsTest>**
</m:properties>
</content>
</entry>
我不想每次实体更改时都更改我的数据集。
根据文档: https://learn.microsoft.com/en-us/azure/data-factory/data-factory-faq
如果结构和 jsonPathDefinition 未在数据中定义 工厂数据集,复制活动从第一个开始检测架构 对象并展平整个对象。
他们是解决此问题的方法吗?
Azure 表中的实体可能会更改其架构。有没有办法让 Azure 管道在每次架构更改时无需手动干预即可处理此问题?
在本文中,我们可以发现,对于无架构数据存储(如 Azure 表),数据工厂服务通过以下方式之一推断架构:
1. 如果使用数据集定义中的结构属性指定数据结构,则数据工厂服务将此结构作为架构。在这种情况下,如果行不包含列的值,则为其提供 null 值。
2. 如果未使用数据集定义中的结构属性指定数据结构,数据工厂将使用数据中的第一行推断架构。在这种情况下,如果第一行不包含完整架构,则复制操作的结果中会缺少某些列。
如果不想在数据集定义中手动显式指定结构属性,则可以在架构更改时将表架构存储/更新到另一个表或 Blob 中,然后可以使用 .NET SDK 创建自定义活动,并在创建数据集时基于存储的架构动态和编程方式定义结构属性。