Azure表存储 - 删除列

时间:2016-02-28 21:30:02

标签: azure azure-table-storage

我认为这是不可能的,但是我问这个问题,也许我错过了一些东西。

我们可以在azure表中添加/删除列吗?

例如,默认情况下,我们会获得以下列:PartitionKey,RowKey,Timestamp,ETag。我可以添加例如另一个3:FirstName,LastName,Email列吗?

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

3 个答案:

答案 0 :(得分:3)

Azure表没有SQL表那样的“列”。 Azure表具有实体。每个实体最多有255个属性。大多数工具可以让您查看Azure表,选择使用列以表格形式显示其中的数据。但是,实际上,每个实体(行)都是属性的集合。

因此,每次执行保存时,都可以将对象/实体保存到具有不同属性的Azure表中。它让事情有些混乱,但你可以做到。

HTH

答案 1 :(得分:3)

正如Igor所说,Azure Tables没有行和列的概念。表可以包含零个或多个实体,每个实体最多可以包含255个属性(属性是名称/值/类型)。在这255个属性中,其中3个是您无法通过代码更新的系统属性(PartitionKey,RowKey和Timestamp)。在创建实体时,您可以定义PartitionKey和RowKey,之后它们将成为只读属性。因此,在更新实体时,您只能更新252个属性。

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

当您将Azure表服务告知Update一个实体时,它只会丢弃该实体的所有现有属性,并插入请求有效负载中定义的属性。

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

现在遇到你的问题。

因此,假设您已经拥有一个刚刚定义PartitionKeyRowKey的实体。现在,您要添加FirstNameLastNameEmail属性。由于实体中不存在这些属性,因此您可以使用MergeReplace来更新实体,并将这些属性添加到实体中。

现在,您要从实体中删除Email属性,而是将Address属性添加到该实体。您要做的是对该实体执行Update操作,您的请求正文将仅包含FirstNameLastNameAddress属性(无Email属性) 。使用此请求有效内容更新实体时,将从实体中删除Email属性。

答案 2 :(得分:0)

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

但是,如果你正在开发模式,你已经插入了一个你想要删除的不必要的属性。您可以使用azure存储资源管理器执行相同的操作。

您可以导出所选表格,删除CSV文件中的属性并将其导入新表格中。删除现有表并将新表重命名为现有表。这是一种解决方法。