Mapreduce 卡桑德拉不等算子

Mapreduce 卡桑德拉不等算子,mapreduce,cassandra,cql3,Mapreduce,Cassandra,Cql3,向所有卡桑德拉专家提问 我有一个专栏家族,大约有一百万张唱片 我希望以这样一种方式查询这些记录,即我应该能够执行不等于的操作 我在谷歌上搜索了一下,似乎我必须使用某种地图还原 有人能告诉我在这方面有哪些选择。我可以提出一些方法 < P > 1)如果您想测试的数值不相等,则考虑将这些模型建模为布尔列(即:列 ISQualtToNeTeDeDATION< /CODE > true或false)。 < P> 2)否则,考虑模拟不支持的查询!=X通过组合客户端上两个独立查询的结果,X 3) 如果您的模式

向所有卡桑德拉专家提问

我有一个专栏家族,大约有一百万张唱片

我希望以这样一种方式查询这些记录,即我应该能够执行
不等于
的操作

我在谷歌上搜索了一下,似乎我必须使用某种
地图还原


有人能告诉我在这方面有哪些选择。

我可以提出一些方法

< P > 1)如果您想测试的数值不相等,则考虑将这些模型建模为<代码>布尔列(即:列<代码> ISQualtToNeTeDeDATION< /CODE > true或false)。 < P> 2)否则,考虑模拟不支持的查询<代码>!=X
通过组合客户端上两个独立查询的结果,
>X

3) 如果您的模式不能支持上述任何一种类型的查询,您可能不得不求助于编写自定义例程来执行客户端筛选并动态构造不相等集。如果您可以首先将搜索空间缩小到可管理的比例,这样在不使用“不相等”的情况下运行查询相对便宜,那么这将起作用

假设你对某个特定客户购买的每种产品类型都感兴趣,除了Widget。理想的查询可能类似于
SELECT*FROM purchases,其中customer='Bob'和item!='小部件'
当然,现在您不能运行它,但是在这种情况下,您应该能够运行
SELECT*FROM purchases,其中customer='Bob'
而不会浪费太多资源并过滤
项目!='客户端应用程序中的小部件“


4) 最后,如果在执行扫描之前无法以有意义的方式限制数据(不进行相等性检查的查询将返回太多行,无法轻松处理),则可能必须求助于MapReduce。这意味着运行一个分布式作业,该作业将扫描集群中表中的所有行。这样的作业显然会比本机查询运行得慢很多,而且设置起来相当复杂。如果您想这样做,请查看Cassandra Hadoop集成。

如果您想在特定分区键上使用不等于运算符并从表中获取所有其他数据,则可以使用范围查询和CQL中的令牌函数的组合来实现这一点

例如,如果要获取除分区键为“abc”的行以外的所有行,则执行以下2个查询

select <column1>,<column2> from <keyspace1>.<table1> where TOKEN(<partition_key_column_name>) < TOKEN('abc');
select <column1>,<column2> from <keyspace1>.<table1> where TOKEN(<partition_key_column_name>) > TOKEN('abc');
从中选择。其中TOKEN()TOKEN('abc');
但,请注意,结果将是巨大的(取决于您需要的表和字段的大小)。因此,您可能希望将其与dsbulk这类实用程序结合使用。还请注意,您的结果中没有订购的保证。这只是一种数据转储,对于某些类似一次性数据迁移的场景可能非常有用