【Azure 存储服务】存储在Azure Storage Table中的数据,如何按照条件进行删除呢?

问题描述

如何按条件删除 Storage Table 中的数据,如果Table中有大量的条记录需要删除,Java代码如何按条件删除 Table中的数据(Entity)?

image.png

(通过Azure Storage Explorer工具是可以删除,但是由于数据量太大,人工操作耗时太久,所以需要使用Java代码完成)

问题解答

删除Table

删除表的操作可以通过 Storage Explorer工具或者REST API接口(https://learn.microsoft.com/zh-cn/rest/api/storageservices/delete-table)完成。成功删除表时,会立即将其标记为要删除,并且客户端不再可访问。 稍后,在垃圾回收期间,该表将从表存储中删除。

请注意,删除表可能需要至少 40 秒才能完成。 如果在删除表时尝试对表执行操作,服务将返回状态代码 409 (Conflict) 。 该服务返回其他错误信息,指示正在删除表。

删除Table中的Entity

当需要根据某些条件删除表中数据的时候,可以参考Table的实例代码:https://docs.azure.cn/zh-cn/cosmos-db/table/how-to-use-java, 调用 TableClient.deleteEntity 即可根据 partition key 和 row key 来删除数据。 也可以先查找需要删除的Entity后,调用 deleteEntity 方法删除

  • deleteEntity(TableEntity entity) : Deletes an TableEntity from the table.
  • deleteEntity(String partitionKey, String rowKey) : Deletes an TableEntity from the table.


    image.png

    (可以在红色箭头处 forEach 中调用 tableClient.deleteEntity(tableEntity) 来删除它)

其他方式

当然也可以使用RESTAPI的方式执行实体组事务 (REST API) - https://learn.microsoft.com/zh-cn/rest/api/storageservices/performing-entity-group-transactions#requirements-for-entity-group-transactions

需要注意的是批量操作需要满足以下要求:

• 要作为事务部分操作的所有实体都必须具有相同的 PartitionKey 值。
• 一个实体在事务中只能出现一次,对其只能执行一项操作。
• 事务可以包含最多 100 个实体,其总有效负载大小不能超过 4 MiB。

【END】

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

分类: 【Azure 存储服务】

标签: Azure Storage, Table Entity, Delete Entity

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容