Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cassandra 1.1.x通过复合键获取_Cassandra_Thrift_Hector_Cql_Astyanax - Fatal编程技术网

cassandra 1.1.x通过复合键获取

cassandra 1.1.x通过复合键获取,cassandra,thrift,hector,cql,astyanax,Cassandra,Thrift,Hector,Cql,Astyanax,是否可以使用Hector或Astyanax通过复合键获取行(在多个列中,而不是序列化为一列的列中) 在cqlsh中,我创建了简单的柱族: CREATE COLUMNFAMILY kkvv (x int, y int, val1 varchar, val2 varchar, PRIMARY KEY (x,y)); 根据需要,行由x作为键存储,其余的存储在列中 我不知道如何得到给定x和y的列切片 在赫克托执行cql,该cql cqlQuery.setQuery("select * fro

是否可以使用Hector或Astyanax通过复合键获取行(在多个列中,而不是序列化为一列的列中)

在cqlsh中,我创建了简单的柱族:

CREATE COLUMNFAMILY kkvv (x int, y int, val1 varchar, val2 varchar, PRIMARY KEY (x,y));
根据需要,行由x作为键存储,其余的存储在列中

我不知道如何得到给定x和y的列切片

在赫克托执行cql,该cql

cqlQuery.setQuery("select * from kkvv")
给我行:

行(2,列切片([HColumn(x=2)])

行(10,列切片([HColumn(x=10)])

控制台cqlsh给出:

x | y | val1 | val2

----+-----+-------+-----------

2 | 1 | v1 | v2 | 1

10 | 27 | v1|U 4b | v2|4b

10 | 91 | v1 | 4a | v2 | 4a

有人在cassandra java客户机中做到了这一点吗?
我可以使用节俭吗,或者它是cql唯一的功能?

这里有两种不同的语法:cql 2和cql 3。默认情况下,Cassandra连接需要CQL 2。但是,CQL2不理解您在这里创建的那种复合键列族

很明显,你在cqlsh中使用CQL3是正确的,因为它以一种正常的方式显示了你的列,但是你没有在Hector中使用它。我不确定赫克托或阿斯蒂亚纳克斯是否支持这一点。最新版本的CassandraJDBC驱动程序确实如此,因此,如果Hector和/或Astyanax使用该驱动程序,那么它们也应该可以工作

Thrift中没有(也可能不会)任何支持将复合comparator列族视为具有多组件主键的表,CQL3就是这样做的。如果需要,请使用CQL 3。

您是否尝试过cassandra教程项目中提供的示例


另外,您读过DataStax吗?

很好地解释了Cassandra中如何存储具有复合键的行

在Astyanax和Hector中,我注意到了一件有趣的事情——当a尝试连接时——它使用CQL2。当我用CQL3和Cassandra api(下面示例中的代码)连接Cassandra时,在某个地方存储了这个设置,之后Astyanax和Hector使用CQL3而不是CQL2。连接是作为单独的执行进行的,因此不能存储在客户端。。。有人有什么想法吗

可以在org.apache.cassandra.thrift.cassandra.Client上使用set\u CQL\u version方法设置CQL版本

如果有人对使用纯Cassandra api的示例感兴趣:

import java.io.UnsupportedEncodingException;
导入java.nio.ByteBuffer;
导入java.util.List;
导入org.apache.cassandra.thrift.cassandra;
导入org.apache.cassandra.thrift.Column;
导入org.apache.cassandra.thrift.Compression;
导入org.apache.cassandra.thrift.CqlResult;
导入org.apache.cassandra.thrift.CqlRow;
导入org.apache.cassandra.thrift.InvalidRequestException;
导入org.apache.cassandra.thrift.SchemaDisagreementException;
导入org.apache.cassandra.thrift.TimedOutException;
导入org.apache.cassandra.thrift.UnavailableException;
导入org.apache.thrift.TException;
导入org.apache.thrift.protocol.TBinaryProtocol;
导入org.apache.thrift.protocol.TProtocol;
导入org.apache.thrift.transport.TFramedTransport;
导入org.apache.thrift.transport.TSocket;
导入org.apache.thrift.transport.tttransport;
公共类KKVVGetter{
私有静态卡桑德拉客户端;
私人静态运输;
public static void main(字符串[]args)引发UnsupportedEncodingException、InvalidRequestException、,
UnavailableException,TimeDouteException,SchemaDisagreementException,TexException{
传输=新的TFramedTransport(新的TSocket(“localhost”,9160));
TProtocol协议=新的TBinaryProtocol(传输);
client=新的Cassandra.client(协议);
transport.open();
客户端.set_cql_版本(“3.0.0”);
执行(“使用ks_测试3”);
显示(“从kkvv中选择x、y、val1、val2,其中x>1和x<11,y<100和y>2”);
System.out.println(“\n\n******************************************\n\n”);
显示(“从kkvv中选择x、y、val1、val2”);
transport.close();
}
专用静态int-toInt(字节[]字节){
int结果=0;
对于(int i=0;i<4;i++){

结果=(结果我想知道如何以及是否能够使用为hadoop提供的bulkloader writable的复合键!?我已经检查过了,就像你说的。同样,可以使用Astyanax或Hector,但必须使用更丰富的源代码来强制使用cql3。