influxdb - 使用位测试进行选择?

influxdb - selection using bit testing?

InfluxDB 中有没有办法在搜索查询中使用按位运算符?例如,如果我想找到设置了标签或字段值的第二位的所有点,我希望能够执行如下操作:

SELECT * 从测量 WHERE tag_name & (1<<1) = true

SELECT * 从测量 WHERE (tag_name >> 1) & 1 = true

问: 我能找到所有在 tagfield 中设置了第 2 位的点吗?

A: 对于 tag 不可能,因为它的值始终是 string 类型。

对于 Field 是的,但是 对其执行 filtering 可能会对性能产生影响,因为 field 未编入索引。也就是说,每个 SELECT 查询都是完整的 table 扫描。

bitwise operators 仅在 influx 1.3.x 中引入,因此如果您使用的是早期版本,则将无法执行以下操作。

假设您有以下 dataset.

> show field keys from measurement_abcd
name: measurement_abcd
fieldKey fieldType
-------- ---------
value    integer

> select * from measurement_abcd
name: measurement_abcd
time                tag1 value
----                ---- -----
1434086562000000000      2
1434087562000000000      3
1434088562000000000      4
1434089562000000000 abc  5
1434089562000000000      5

您可以通过执行;

检索在字段 value 中设置了第二位的行

SELECT * FROM measurement_abcd WHERE "value" | 2 = "value"

这将为您提供以下 输出;

> SELECT * FROM measurement_abcd WHERE "value" | 2 = "value"
name: measurement_abcd
time                tag1 value
----                ---- -----
1434086562000000000      2
1434087562000000000      3

值得注意的是,influx 的按位运算符仅适用于 booleaninteger。它不适用于浮动。

参考: https://docs.influxdata.com/influxdb/v1.3/query_language/math_operators/#bitwise-and

使用以下数据复制上面的实验:

curl -i -XPOST 'http://localhost:8086/write?db=Whosebug1' --data-binary 'measurement_abcd value=2i 1434086562000000000'

curl -i -XPOST 'http://localhost:8086/write?db=Whosebug1' --data-binary 'measurement_abcd value=3i 1434087562000000000'

curl -i -XPOST 'http://localhost:8086/write?db=Whosebug1' --data-binary 'measurement_abcd value=4i 1434088562000000000'

curl -i -XPOST 'http://localhost:8086/write?db=Whosebug1' --data-binary 'measurement_abcd value=5i 1434089562000000000'