Я использую Astyanax для запроса Cassandra с использованием запросов CQL3, и он работает нормально.Как получить типы данных из запроса SQL-сервера Astyanax
Я только хочу, чтобы сделать запросы (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, или, возможно, с другим.
спасибо.
Я закончил с использованием 'выберите компаратор, column_aliases, key_alias, key_validator из system.schema_columnfamilies где "ColumnFamily"= '# CF',' 'для Составной KEY' и теперь хотите использовать запрос, чтобы получить те, которые не являются «PRIMARY KEY», но не показывают некоторые таблицы (эти таблицы не создаются с помощью «COMPACT STORAGE», вы знаете, почему это может происходить? и что делать? – eLRuLL
таблицы, не отображаемые вашим запросом, - это те, которые были созданы с помощью «КОМПАКТНОГО ХРАНЕНИЯ» (по предыдущему комментарию я сказал наоборот) – eLRuLL
Я немного смущен. Вам действительно нужен CF с компактным хранилищем, зная тот факт, что они поддерживают один и только один столбец за пределами одной части ПЕРВИЧНОГО КЕ Y. – abhi