influxdb - 使用位测试进行选择?
influxdb - selection using bit testing?
InfluxDB 中有没有办法在搜索查询中使用按位运算符?例如,如果我想找到设置了标签或字段值的第二位的所有点,我希望能够执行如下操作:
SELECT * 从测量 WHERE tag_name & (1<<1) = true
或
SELECT * 从测量 WHERE (tag_name >> 1) & 1 = true
问: 我能找到所有在 tag
或 field
中设置了第 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 的按位运算符仅适用于 boolean
和 integer
。它不适用于浮动。
参考:
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'
InfluxDB 中有没有办法在搜索查询中使用按位运算符?例如,如果我想找到设置了标签或字段值的第二位的所有点,我希望能够执行如下操作:
SELECT * 从测量 WHERE tag_name & (1<<1) = true
或
SELECT * 从测量 WHERE (tag_name >> 1) & 1 = true
问: 我能找到所有在 tag
或 field
中设置了第 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 的按位运算符仅适用于 boolean
和 integer
。它不适用于浮动。
参考: 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'