我使用Astyanax使用CQL3查询查询Cassandra,它运行正常。
我只想进行查询(SELECT ...),我正在使用以下代码:
AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder()
.forCluster("anyCluster") // Not using clusters
.forKeyspace("default") // Name of my keyspace
.withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
.setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
.setCqlVersion("3.0.0")
.setTargetCassandraVersion("1.2")
)
.withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
.setPort(9160)
.setMaxConnsPerHost(1)
.setSeeds("localhost:9160")
)
.withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
.buildKeyspace(ThriftFamilyFactory.getInstance());
context.start();
Keyspace keyspace = context.getClient();
// Defining any columnfamily
ColumnFamily<String, String> cf =
new ColumnFamily<String, String>(
".", // It works without passing here the name.
StringSerializer.get(), // Key Serializer
StringSerializer.get());
以前的代码是连接的一部分,现在,我想执行查询并获取数据,但我不知道我期望什么数据类型的查询,所以我不知道什么方法用于获取值,如下所示,我不知道是否需要使用getBooleanValue
,getStringValue
,getIntegerValue
等。
try {
OperationResult<CqlResult<String, String>> result
= keyspace.prepareQuery(emp2).withCql("Select * from table_test;").execute();
for (Row<String, String> row : result.getResult().getRows()) {
ColumnList<String> cols = row.getColumns();
System.out.println(cols.getColumnNames());
for(String col : cols.getColumnNames()){
try{
boolean value = cols.getBooleanValue(col, null);
System.out.println(value);
}catch(Exception e){
System.out.println(col + " isn't boolean");
}
try{
Date value = cols.getDateValue(col, null);
System.out.println(value);
}catch(Exception e){
System.out.println(col + " isn't Date");
}
try{
Integer value = cols.getIntegerValue(col, null);
System.out.println(value);
}catch(Exception e){
System.out.println(col + " isn't Integer");
}
try{
Double value = cols.getDoubleValue(col, null);
System.out.println(value);
}catch(Exception e){
System.out.println(col + " isn't Double");
}
try{
String value = cols.getStringValue(col, null);
System.out.println(value);
}catch(Exception e){
System.out.println(col + " isn't string");
}
}
}
} catch (ConnectionException e) {
e.printStackTrace();
}
那么我有可能知道这个吗?使用此API,或者使用不同的API。
谢谢。
答案 0 :(得分:2)
我认为Astyanax客户端无法为您提供所有数据类型信息,而是使用 CQLSH ,您可以获得大部分数据。
select column_name, comparator, column_aliases,key_alias,key_validator from system.schema_columns where keyspace_name='#KS' AND columnfamily_name='#CF';
另外,对于任何其他元字段相关信息,您可以看到结构
CREATE TABLE schema_keyspaces (
keyspace_name text PRIMARY KEY,
durable_writes boolean,
strategy_class text,
strategy_options text
);
CREATE TABLE schema_columnfamilies (
keyspace_name text,
columnfamily_name text,
bloom_filter_fp_chance double,
caching text,
column_aliases text,
comment text,
compaction_strategy_class text,
compaction_strategy_options text,
comparator text,
compression_parameters text,
default_read_consistency text,
default_validator text,
default_write_consistency text,
gc_grace_seconds int,
id int,
key_alias text,
key_aliases text,
key_validator text,
local_read_repair_chance double,
max_compaction_threshold int,
min_compaction_threshold int,
read_repair_chance double,
replicate_on_write boolean,
subcomparator text,
type text,
value_alias text,
PRIMARY KEY (keyspace_name, columnfamily_name)
);
CREATE TABLE schema_columns (
keyspace_name text,
columnfamily_name text,
column_name text,
component_index int,
index_name text,
index_options text,
index_type text,
validator text,
PRIMARY KEY (keyspace_name, columnfamily_name, column_name)
);
答案 1 :(得分:1)
如果您使用java-driver发出CQL3查询,那么行上的getColumnDefinitions函数会告诉您类型。