Azure Table 存储 - 删除列

Azure Table Storage - remove columns

我认为这是不可能的,但不管我怎么问,也许我漏掉了什么。

我们可以 add/remove 天蓝色的列 table 吗?

例如,默认情况下我们获取这些列:PartitionKey、RowKey、Timestamp、ETag。例如,我可以添加另外 3 个:FirstName、LastName、Email 列吗?

之后我将插入一些值,我想删除电子邮件列并添加地址列。我们可以这样做吗?

Azure Table 不像 SQL table 那样有 "columns"。 Azure Tables 有实体。每个实体最多有 255 个属性。大多数让您查看 Azure table 的工具都选择将其中的数据可视化为带有列的表格。然而,实际上,每个实体(行)都是属性的集合。

因此,每次保存时,您都可以将 objects/entities 保存到具有不同属性的 Azure Table 中。这让事情有些混乱,但你可以做到。

HTH

正如 Igor 所说的那样,Azure Tables 没有行和列的概念。 table 可以包含零个或多个实体,每个实体最多可以有 255 个属性(一个属性是 name/value/type)。在这 255 个属性中,有 3 个是您无法通过代码更新的系统属性(PartitionKey、RowKey 和 Timestamp)。创建实体时,您定义 PartitionKey 和 RowKey,之后它们变为只读属性。所以在更新实体的时候,只能更新252个属性。

要在 Azure Table 中管理数据,有一个 REST API,您可以在请求正文中提供实体的属性。 Azure 存储提供了两种更新实体的方法 - Update and Merge.

当您告诉 Azure Table 服务到 Update 一个实体时,它只会删除该实体的所有现有属性,并插入请求负载中定义的属性。

当您将 Azure Table 服务告知 Merge 一个实体时,它会查看现有的实体属性并将它们与请求负载中定义的属性进行比较。如果找到匹配的属性,它会简单地更新这些属性。如果属性不存在于现有实体中但在请求有效负载中定义,则这些属性将添加到实体中。如果属性存在于现有实体中但未在请求有效负载中定义,则它们不会更改。

现在来解决你的问题。

所以假设您已经有一个实体,您刚刚在其中定义了 PartitionKeyRowKey。现在您想添加 FirstNameLastNameEmail 属性。因为实体中没有这些属性,您可以使用 MergeReplace 更新实体,这些属性将添加到实体中。

现在您想从实体中删除 Email 属性,而是向该实体添加 Address 属性。您要做的是对该实体执行 Update 操作,您的请求正文将仅具有 FirstNameLastNameAddress 属性(没有 Email 属性) .当您使用此请求负载更新实体时,Email 属性将从实体中删除。

我认为上面给出的程序化答案是实现功能的最佳解决方案。

但以防万一,您在开发模式下工作并且插入了一个您想要删除的不必要的属性。您可以使用 azure storage explorer 来做同样的事情。

您可以导出选择的 table,删除 CSV 文件中的 属性,然后在新的 table 中将其导回。删除现有的 table 并将新的 table 重命名为现有的。这是一种解决方法。