天天看點

【Azure 存儲服務】存儲在Azure Storage Table中的資料,如何按照條件進行删除呢?

問題描述

如何按條件删除 Storage Table 中的資料,如果Table中有大量的條記錄需要删除,Java代碼如何按條件删除 Table中的資料(Entity)?

【Azure 存儲服務】存儲在Azure Storage Table中的資料,如何按照條件進行删除呢?

(通過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.
【Azure 存儲服務】存儲在Azure Storage Table中的資料,如何按照條件進行删除呢?

(可以在紅色箭頭處 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】