什么是天蓝色表存储查询相当于T-sql的LIKE命令?

时间:2013-03-27 13:38:04

标签: azure azure-sql-database azure-storage azure-table-storage

我使用Azure存储资源管理器查询Azure表存储。我想找到包含给定文本的所有消息,如T-SQL中所示:

message like '%SysFn%'

执行T-SQL会给出"处理此请求时发生错误"

Azure中此查询的等效内容是什么?

3 个答案:

答案 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')