我认为这是不可能的,但是无论我问这个问题,也许我错过了一些东西。
我们可以从天蓝色表中添加/删除列吗?
例如,默认情况下我们会得到这些列:PartitionKey、RowKey、Timestamp、ETag。例如,我可以添加另外 3 个:FirstName、LastName、Email 列吗?
之后我将插入一些值,我想删除列电子邮件并添加列地址。我们可以这样做吗?
我认为这是不可能的,但是无论我问这个问题,也许我错过了一些东西。
我们可以从天蓝色表中添加/删除列吗?
例如,默认情况下我们会得到这些列:PartitionKey、RowKey、Timestamp、ETag。例如,我可以添加另外 3 个:FirstName、LastName、Email 列吗?
之后我将插入一些值,我想删除列电子邮件并添加列地址。我们可以这样做吗?
正如 Igor 所说,Azure Tables 没有行和列的概念。一个表可以包含零个或多个实体,每个实体最多可以有 255 个属性(一个属性是名称/值/类型)。在这 255 个属性中,其中 3 个是无法通过代码更新的系统属性(PartitionKey、RowKey 和 Timestamp)。创建实体时,您定义 PartitionKey 和 RowKey,然后它们成为只读属性。因此,在更新实体时,您只能更新 252 个属性。
要管理 Azure 表中的数据,有一个 REST API,您可以在请求正文中提供实体的属性。Azure 存储提供了两种更新实体的方法 -Update
和Merge
.
当您将 Azure 表服务告知Update
实体时,它会简单地删除该实体的所有现有属性,并插入请求负载中定义的属性。
当您将 Azure 表服务告知Merge
实体时,它会查看现有实体属性并将它们与请求负载中定义的属性进行比较。如果它找到匹配的属性,它会简单地更新这些属性。如果属性不存在于现有实体中,但在请求有效负载中定义,则这些属性将添加到实体中。如果属性存在于现有实体中但未在请求有效负载中定义,则它们不会更改。
现在来解决你的问题。
因此,假设您已经有一个刚刚定义的实体,PartitionKey
并且RowKey
. 现在您要添加FirstName
, LastName
,Email
属性。因为实体中不存在这些属性,所以您可以使用Merge
或Replace
更新实体,这些属性将添加到实体中。
现在您想Email
从实体中删除属性,而是将Address
属性添加到该实体。您将要做的是Update
对您的请求正文将具有的实体执行操作FirstName
,LastName
并且Address
仅具有属性(无Email
属性)。当您使用此请求有效负载更新实体时,Email
将从实体中删除属性。
Azure 表没有 SQL 表那样的“列”。Azure 表具有实体。每个实体最多有 255 个属性。大多数可让您查看 Azure 表的工具都选择将其中的数据可视化为带有列的表格。然而,实际上,每个实体(行)都是属性的集合。
因此,您可以在每次保存时将对象/实体保存到具有不同属性的 Azure 表中。这让事情有些混乱,但你可以做到。
高温高压
我认为上面给出的程序化答案是实现功能的最佳解决方案。
但是,如果您在开发模式下工作,并且您插入了一个您想要删除的不必要的属性。您可以使用 azure storage explorer 执行相同的操作。
您可以导出选择的表,删除 CSV 文件中的属性并将其导入新表中。删除现有表并将新表重命名为现有表。这是一种解决方法。