我正在使用 Azure 存储资源管理器查询 Azure 表存储。我想查找包含给定文本的所有消息,例如在 T-SQL 中:
message like '%SysFn%'
执行 T-SQL 给出“处理此请求时发生错误”
Azure 中此查询的等效项是什么?
我正在使用 Azure 存储资源管理器查询 Azure 表存储。我想查找包含给定文本的所有消息,例如在 T-SQL 中:
message like '%SysFn%'
执行 T-SQL 给出“处理此请求时发生错误”
Azure 中此查询的等效项是什么?
没有直接的等价物,因为没有通配符搜索。此处列出了所有支持的操作。您会看到 eq、gt、ge、lt、le 等。也许您可以利用这些来查找特定范围。
根据您的分区方案,您可以根据特定的分区键选择实体的子集,然后扫描每个实体,检查message
以找到您需要的特定实体(基本上是部分分区扫描)。
虽然在 Azure 表存储中不能严格执行高级通配符搜索,但您可以结合使用“ge”和“lt”运算符来实现“前缀”搜索。此过程在 Scott Helme 的博客文章中进行了解释。
本质上,此方法使用 ASCII 递增来查询 Azure 表存储以查找其属性以特定文本字符串开头的任何行。我编写了一个小型 Powershell 函数,它生成执行前缀搜索所需的自定义过滤器。
Function Get-AzTableWildcardFilter {
param (
[Parameter(Mandatory=$true)]
[string]$FilterProperty,
[Parameter(Mandatory=$true)]
[string]$FilterText
)
Begin {}
Process {
$SearchArray = ([char[]]$FilterText)
$SearchArray[-1] = [char](([int]$SearchArray[-1]) + 1)
$SearchString = ($SearchArray -join '')
}
End {
Write-Output "($($FilterProperty) ge '$($FilterText)') and ($($FilterProperty) lt '$($SearchString)')"
}
}
然后,您可以像这样使用此函数Get-AzTableRow
(其中 $CloudTable 是您的Microsoft.Azure.Cosmos.Table.CloudTable
对象):
Get-AzTableRow -Table $CloudTable -CustomFilter (Get-AzTableWildcardFilter -FilterProperty 'RowKey' -FilterText 'foo')
另一种选择是将日志从 Azure 表存储导出到 csv。拥有 csv 后,您可以在 excel 或任何其他应用程序中打开它并搜索文本。
您可以使用 TableXplorer ( http://clumsyleaf.com/products/tablexplorer )导出表存储数据。在此有一个选项可将过滤后的数据导出到 csv。