4

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

我们可以从天蓝色表中添加/删除列吗?

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

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

4

3 回答 3

7

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

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

当您将 Azure 表服务告知Update实体时,它会简单地删除该实体的所有现有属性,并插入请求负载中定义的属性。

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

现在来解决你的问题。

因此,假设您已经有一个刚刚定义的实体,PartitionKey并且RowKey. 现在您要添加FirstName, LastName,Email属性。因为实体中不存在这些属性,所以您可以使用MergeReplace更新实体,这些属性将添加到实体中。

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

于 2016-02-29T03:19:16.923 回答
5

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

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

高温高压

于 2016-02-29T01:40:23.657 回答
2

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

但是,如果您在开发模式下工作,并且您插入了一个您想要删除的不必要的属性。您可以使用 azure storage explorer 执行相同的操作。

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

于 2018-06-18T06:06:23.783 回答