我使用Azure存储资源管理器查询Azure表存储。我想找到包含给定文本的所有消息,如T-SQL中所示:
message like '%SysFn%'
执行T-SQL会给出"处理此请求时发生错误"
Azure中此查询的等效内容是什么?
答案 0 :(得分:17)
没有直接的等价物,因为没有通配符搜索。列出了here所有支持的操作。你会看到eq,gt,ge,lt,le等。你可以利用它们来寻找特定的范围。
根据您的分区方案,您可以根据特定的分区键选择实体的子集,然后扫描每个实体,检查message
以找到您需要的特定实体(基本上是部分分区)扫描)。
答案 1 :(得分:3)
另一个选项是将日志从Azure表存储导出到csv。获得csv后,您可以在Excel或任何其他应用程序中打开它并搜索文本。
您可以使用TableXplorer(http://clumsyleaf.com/products/tablexplorer)导出表存储数据。在此,可以选择将过滤后的数据导出到csv。
答案 2 :(得分:1)
虽然在Azure表存储中严格不可能进行高级通配符搜索,但是可以结合使用“ ge”和“ lt”运算符来实现“前缀”搜索。此过程在Scott Helme here的博客文章中进行了解释。
基本上,此方法使用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')