假设我在Cassandra表中有一个文本列。此列具有以文本方式表示的数值,例如
|...|...|myTextColumn|...|...|
|...|...| '1000' |...|...|
|...|...| '200' |...|...|
|...|...| '35' |...|...|
如果我使用索引,我可以通过myTextColumn进行查询,并要求所有小于300的值:
select * from myTable where myTextColumn<'300' ALLOW FILTERING ;
通过这样做,我有一个三重问题:
请注意,我理解为什么会发生这种情况,为什么不我的问题。我的问题是,是否有可能解决这个问题,如果是这样,如果不再采用以下方法: i)更改列类型 ii)添加前导零以便全部值具有相同的位数。
感谢您的时间。最好的问候。
答案 0 :(得分:2)
我仅使用查询无法解决此问题。但是我最终通过在myTextColumn中插入的数值添加一个额外的数字来解决它。
所有数字变量都以其自己的数字位数为前缀,例如一千是41000,二百是3200.当然,四万一千是541000,三万二千是43200.
为了确保前缀始终是一个数字,即使对于大数字,我们可以使用Base16(如果我们想要支持更大的数字,则为24或32),例如A1234567890。
这可确保始终正确过滤并排序结果。
为了跟进原始示例,该表变为:
|...|...|myTextColumn|...|...|
|...|...| '41000' |...|...|
|...|...| '3200' |...|...|
|...|...| '235' |...|...|
因此,如果我执行查询:
select * from myTable where myTextColumn<'3300' ALLOW FILTERING ;
我将获得{235,3200},其中包含正确顺序的正确结果。