如何编写匹配多个标签值的查询?
How to compose a query that matches multiple tag values?
我想知道编写匹配标签多个值的 WHERE 子句的最佳方法是什么。我的印象是我可以使用正则表达式模式解决这个问题,但我似乎碰壁了。我的查询返回的数据太多...
在我的例子中,我有几个带有“location_id”标签的测量值。
当我使用如下所示的 where 子句创建查询时,我得到的数据不正确。可能是我对如何使用正则表达式模式有误解,或者可能是不可能的……
我的数据如下
time cpu location_id
---- ---- -----------
2017-11-27T07:00:00Z 159 2
2017-11-27T15:00:00Z 154 27
2017-11-27T23:00:00Z 117 7
2017-11-28T07:00:00Z 160 7
2017-11-28T15:00:00Z 167 27
2017-11-28T23:00:00Z 170 27
当我执行查询时,我只希望返回值为“7”的位置。
但是当我使用如下查询时,来自 location_id 27 的数据也被返回…
SELECT * 来自“测量”,其中 location_id =~ /7/;
我的目标是指出 location_id 应该在值列表中。这甚至可以用正则表达式吗?或者我应该使用 AND 从句吗?
SELECT * 来自“测量”,其中 location_id =~ /7|2|104|45/;
这可以通过正则表达式实现(尽管只有 tags/fields 是字符串)。首先,回想一下正则表达式 /7/
匹配输入文本中的字符 7
anywhere。因此“7”和“27”都匹配。
要限制匹配覆盖整个输入文本,请将其包裹在 start-of-text ^
和 end-of-text $
标记中。例如,正则表达式 /^7$/
将匹配 仅 字符串“7”,不匹配其他任何内容。
要匹配多个完整字符串,请使用正则表达式或运算符 |
。但是请记住,它的运算符优先级低于组合,这意味着我们必须将子表达式括在括号中。例如,/^(7|2|104|45)$/
将匹配“7”、“2”、“104”或“45”。
有关详细信息,请参阅 golang regex syntax 文档。
我想知道编写匹配标签多个值的 WHERE 子句的最佳方法是什么。我的印象是我可以使用正则表达式模式解决这个问题,但我似乎碰壁了。我的查询返回的数据太多...
在我的例子中,我有几个带有“location_id”标签的测量值。
当我使用如下所示的 where 子句创建查询时,我得到的数据不正确。可能是我对如何使用正则表达式模式有误解,或者可能是不可能的……
我的数据如下
time cpu location_id
---- ---- -----------
2017-11-27T07:00:00Z 159 2
2017-11-27T15:00:00Z 154 27
2017-11-27T23:00:00Z 117 7
2017-11-28T07:00:00Z 160 7
2017-11-28T15:00:00Z 167 27
2017-11-28T23:00:00Z 170 27
当我执行查询时,我只希望返回值为“7”的位置。 但是当我使用如下查询时,来自 location_id 27 的数据也被返回…
SELECT * 来自“测量”,其中 location_id =~ /7/;
我的目标是指出 location_id 应该在值列表中。这甚至可以用正则表达式吗?或者我应该使用 AND 从句吗?
SELECT * 来自“测量”,其中 location_id =~ /7|2|104|45/;
这可以通过正则表达式实现(尽管只有 tags/fields 是字符串)。首先,回想一下正则表达式 /7/
匹配输入文本中的字符 7
anywhere。因此“7”和“27”都匹配。
要限制匹配覆盖整个输入文本,请将其包裹在 start-of-text ^
和 end-of-text $
标记中。例如,正则表达式 /^7$/
将匹配 仅 字符串“7”,不匹配其他任何内容。
要匹配多个完整字符串,请使用正则表达式或运算符 |
。但是请记住,它的运算符优先级低于组合,这意味着我们必须将子表达式括在括号中。例如,/^(7|2|104|45)$/
将匹配“7”、“2”、“104”或“45”。
有关详细信息,请参阅 golang regex syntax 文档。