如何在某个日期范围内从表存储中删除记录?

Posted

技术标签:

【中文标题】如何在某个日期范围内从表存储中删除记录?【英文标题】:how to delete records out of table storage within a certain date range? 【发布时间】:2022-01-18 17:51:50 【问题描述】:

我希望能够从表存储中删除在 2020 年 11 月 15 日到 2020 年 12 月 15 日之间具有TimeStamp 的记录。

例如:

我们如何使用powershell删除指定日期范围内的表存储中的记录?

这是我尝试过的:

$storageAccountName = "mystorageaccount"
$resourceGroup = "myresourcegroup"
$tableName = "FilesReceived"
$columnName = "Timestamp"
$value = "datetime'2021-09-15T00:00:00Z'"

$storageAccount = Get-AzStorageAccount `
  -ResourceGroupName $resourceGroup `
  -Name $storageAccountName
$ctx = $storageAccount.Context 

$storageTable = Get-AzStorageTable –Name $tableName –Context $ctx
$cloudTable = ($storageTable).CloudTable

[string]$filter = `
  [Microsoft.Azure.Cosmos.Table.TableQuery]::GenerateFilterCondition($columnName,`
  [Microsoft.Azure.Cosmos.Table.QueryComparisons]::LessThan,$value)

# Get entity
$entityToDelete = Get-AzTableRow `
    -table $cloudTable `
    -customFilter $filter

$entityToDelete | Remove-AzTableRow -table $cloudTable

但是,当我检查$entityToDelete 的内容时,它完全是空的。

【问题讨论】:

【参考方案1】:

我们如何在指定日期内从表存储中删除记录 范围?

与只执行删除查询的关系数据库不同,在表存储中,您首先需要获取要删除的实体,然后发送删除这些实体的请求。

要获取实体,您需要执行类似Timestamp ge datetime'2021-11-15T00:00:00Z' and Timestamp le '2021-12-15T00:00:00Z' 的查询。您可以进行查询投影,只获取PartitionKeyRowKey 属性,因为删除时只需要这两个属性。

获取实体后,您可以分别为每个实体发送删除请求,或执行实体批量事务以在单个请求中删除最多 100 个实体。

【讨论】:

很想知道使用哪个删除命令。我已经下载了最新的 powershell 版本 我已经更新了问题并添加了我尝试运行的代码 gaurav,你在吗? @AlexGordon - 我运行了您的代码并成功删除了数据。你能分享$filter的输出吗?我在我的代码中对查询进行了硬编码。这是我用来获取实体的代码:$data = Get-AzTableRow -table $cloudTable -customFilter "Timestamp ge datetime'2010-09-15T00:00:00Z'" -Top 1 -SelectColumn "PartitionKey,RowKey"

以上是关于如何在某个日期范围内从表存储中删除记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postgres 函数中存储日期变量?

如何从表中删除重复记录? [复制]

在范围循环内从地图中删除选定的键是不是安全?

从表中删除所有记录 - doCMD.RunSQL

从表中的多个重复项中删除特定记录

从表变量 MS SQL 中删除