我有一个表MACRecord在卡桑德拉如下:卡桑德拉:搜索NULL值
CREATE TABLE has.macrecord (
macadd text PRIMARY KEY,
position int,
record int,
rssi1 float,
rssi2 float,
rssi3 float,
rssi4 float,
rssi5 float,
timestamp timestamp
)
我有各自基于它的标题即节点1刚刚更新RSSI1,节点2只更新在更新行5个不同的节点rssi2等。这显然会为其他列创建空值。
我似乎无法找到一个查询,只会给我那些不是空的行。具体而言,我提到了这个post。
我希望能够像在MYSQL中一样查询例如SELECT *FROM MACRecord where RSSI1 != NULL
。但是,似乎空值和比较运算符(如!=)在CQL中不受支持。
是否有替代方案可以使用NULL值或特殊标志?我插入浮动,所以不像字符串我不能插入像''的东西。这个问题可能的解决方法是什么?
编辑:
在MYSQL我的数据模型是这样的:
+-----------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+-------------------+-----------------------------+
| MACAdd | varchar(17) | YES | UNI | NULL | |
| Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| Record | smallint(6) | YES | | NULL | |
| RSSI1 | decimal(5,2) | YES | | NULL | |
| RSSI2 | decimal(5,2) | YES | | NULL | |
| RSSI3 | decimal(5,2) | YES | | NULL | |
| RSSI4 | decimal(5,2) | YES | | NULL | |
| RSSI5 | decimal(5,2) | YES | | NULL | |
| Position | smallint(6) | YES | | NULL | |
+-----------+--------------+------+-----+-------------------+-----------------------------+
每个节点(1-5)中的溶液从MySQL根据它例如节点号码查询1 "SELECT *FROM MACRecord WHERE RSSI1 is not NULL"
我在cassandra中更新了我的数据模型,如下所示,以便rssi1-rssi5现在是VARCHAR类型。
CREATE TABLE has.macrecord (
macadd text PRIMARY KEY,
position int,
record int,
rssi1 text,
rssi2 text,
rssi3 text,
rssi4 text,
rssi5 text,
timestamp timestamp
)
我想,每个节点将首先插入字符串“NULL”的记录,当实际RSSI数据来时,只需更换“NULL”字符串,因此它会避免墓碑,并会或多或少地对用户来说这些值实际上不是有效的数据段,因为它们被标记为'NULL'。
但是我仍然对我如何检索结果感到困惑,就像我在MYSQL中所做的那样。 cassandra中没有!=运算符。我怎么能写一个查询,它会给我一个结果集,例如“SELECT * FROM HAS.MACRecord where RSSI1!='NULL'”。
你打算如何工作?您不能查询不在密钥中的字段。您可能不得不重新考虑您的数据模型。 – jny