【问题标题】:Hector slicequery 'where' clauseHector slicequery 'where' 子句
【发布时间】:2013-06-08 04:51:33
【问题描述】:

假设我有一个包含以下列的表 ClientHeaders

| UUID | Cliend_id | IP | Country | Date |

其中 UUID 是主键。

我想使用这个查询:

select * from ClientHeaders where Client_id = "123";

如何使用赫克托的切片查询来做到这一点。

我知道是不是这样:select * from ClientHeaders where UUID= "123";

以下将完成任务:

sliceQuery.setColumnFamily("ClientHeaders");
sliceQuery.setKey("123");
sliceQuery.setRange("", "", false, 5);
QueryResult<ColumnSlice<String, String>> result = sliceQuery.execute(); 

因为 UUID 是主键,所以 sliceQuery.setKey("123"); 与主键一起使用, 有什么方法可以从非主键执行 where 子句功能?

【问题讨论】:

    标签: java jakarta-ee cassandra hector cassandra-cli


    【解决方案1】:

    为此,您必须使用 IndexedSlicesQuery

    StringSerializer stringSerializer = StringSerializer.get();
    BytesArraySerializer bas = BytesArraySerializer.get();
    
    
    IndexedSlicesQuery<String, String, byte[]> indexedSlicesQuery = 
                HFactory.createIndexedSlicesQuery("your keyspace", stringSerializer, stringSerializer, bas);
    
    indexedSlicesQuery.setColumnFamily("ClientHeaders");
    indexedSlicesQuery.setColumnNames("UUID","Cliend_id","IP","Country","Date");
    indexedSlicesQuery.addEqualsExpression("Client_id", stringSerializer.toBytes("123"));
    
    QueryResult<OrderedRows<String, String, byte[]>> result = indexedSlicesQuery.execute();
    

    【讨论】:

    • 嘿.. 感谢您的回答.. 但我收到此错误The method createIndexedSlicesQuery(Keyspace, Serializer&lt;K&gt;, Serializer&lt;N&gt;, Serializer&lt;V&gt;) in the type HFactory is not applicable for the arguments (String, StringSerializer, StringSerializer, BytesArraySerializer)
    • 我使用Keyspace keyspace =HFactory.createKeyspace("MyKeyspacename", cluster); 解决了上述错误但是现在,indexedSlicesQuery.execute(); 正在抛出异常:me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:No indexed columns present in index clause with operator EQ)
    • yes ,为此您必须在该特定列名上创建索引,例如使用比较器 = UTF8Type 和 column_metadata= [{column_name: client_id, validation_class: LongType, index_type: KEYS}] 更新列族 ClientHeaders;注意:还要在更新查询中提及您所需的列名和/或根据要求进行相关更改
    • 这解决了之前的异常,但现在抛出了这个:me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:[436c69656e745f4944]=[41622e43442e45462e4748] failed value validation (Expected 8 or 0 byte long (11)))
    • for (Row row : result.get().getList()) { System.out.println("你的行键:"+row.getKey()) ; System.out.println("你的client_id:"+row.getColumnSlice().getColumnByName("client_id").getValue()); System.out.println("你的ip:"+row.getColumnSlice().getColumnByName("ip").getValue()); }
    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2015-04-21
    • 2012-04-23
    • 2019-08-22
    相关资源
    最近更新 更多