如何编写匹配多个标签值的查询?

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 文档。