2015-06-08 2 views
2

я использую фрагмент кода, чтобы понять Кассандру и синтаксис:Как создать пространство ключей в кассандре?

import com.datastax.driver.core.Cluster; 
import com.datastax.driver.core.ResultSet; 
import com.datastax.driver.core.Row; 
import com.datastax.driver.core.Session; 

public class App { 

    public static void main(String[] args) { 

     Cluster cluster; 
     Session session; 

     // Connect to the cluster and key space "demo" 
     cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
     session = cluster.connect("demo"); 

     // Insert one record into the users table 
     session.execute("INSERT INTO users (lastname, age, city, email, firstname) VALUES ('Jones', 35, 'Austin', '[email protected]', 'Bob')"); 

     // Use select to get the user we just entered 
     ResultSet results = session.execute("SELECT * FROM users WHERE lastname='Jones'"); 
     for (Row row : results) { 
      System.out.format("%s %d\n", row.getString("firstname"), row.getInt("age")); 
     } 

     // Update the same user with a new age 
     session.execute("update users set age = 36 where lastname = 'Jones'"); 

     // Select and show the change 
     results = session.execute("select * from users where lastname='Jones'"); 
     for (Row row : results) { 
      System.out.format("%s %d\n", row.getString("firstname"), row.getInt("age")); 
     } 

     // Delete the user from the users table 
     session.execute("DELETE FROM users WHERE lastname = 'Jones'"); 

     // Show that the user is gone 
     results = session.execute("SELECT * FROM users"); 
     for (Row row : results) { 
      System.out.format("%s %d %s %s %s\n", row.getString("lastname"), row.getInt("age"), row.getString("city"), 
        row.getString("email"), row.getString("firstname")); 
     } 

     // Clean up the connection by closing it 
     cluster.close(); 
    } 
} 

На исполнении я получаю эту ошибку:

log4j:WARN No appenders could be found for logger (com.datastax.driver.core.SystemProperties). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: Keyspace 'demo' does not exist 
    at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35) 
    at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:289) 
    at com.datastax.driver.core.Cluster.connect(Cluster.java:287) 
    at org.sparkexamples.cassandraExample.main.App.main(App.java:17) 
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Keyspace 'demo' does not exist 
    at com.datastax.driver.core.Responses$Error.asException(Responses.java:103) 
    at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:140) 
    at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:293) 
    at com.datastax.driver.core.RequestHandler.onSet(RequestHandler.java:455) 
    at com.datastax.driver.core.Connection$Dispatcher.messageReceived(Connection.java:734) 
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) 
    at org.jboss.netty.handler.timeout.IdleStateAwareChannelUpstreamHandler.handleUpstream(IdleStateAwareChannelUpstreamHandler.java:36) 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) 
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) 
    at org.jboss.netty.handler.timeout.IdleStateHandler.messageReceived(IdleStateHandler.java:294) 
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) 
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) 
    at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:70) 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) 
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) 
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) 
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) 
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) 
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) 
    at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) 
    at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

В зависимости, я все настроено с искрой (Maven/LIBS), но Я не знаю, как создать пространство ключей с помощью java-кода?

благодарит заранее.

ответ

3

У вас уже есть экземпляр session. Используйте его, чтобы выдать создать команду ключевого пространства:

session.execute("CREATE KEYSPACE IF NOT EXISTS test WITH replication = {" 
    + " 'class': 'SimpleStrategy', " 
    + " 'replication_factor': '3' " 
    + "};"); 

IF NOT EXISTS часть предотвратит заявление от выбрасывания ошибки в случае, если пространство ключей уже существует.

+0

Я использовал ваше предложение, но я получаю те же ошибки 'cluster = Cluster.builder(). AddContactPoint (" 127.0.0.1 "). Build(); \t \t session = cluster.connect ("test"); \t \t session.execute ("СОЗДАТЬ тест ключевого пространства с репликацией" \t \t \t \t + "= { 'класс': 'SimpleStrategy', 'replication_factor': 3};"); ' – OiRc

+0

вы не должны использовать' кластера. connect ("test") ', поскольку ключевое пространство еще не существует. Вместо этого используйте 'session = cluster.connect();'. – maasg

2

Вы можете создать ключевое слово с использованием оператора CQL CREATE KEYSPACE. Пожалуйста, обратитесь к этому документу для получения более подробной информации. http://docs.datastax.com/en/cql/3.0/cql/cql_reference/create_keyspace_r.html

Нет никакой разницы между запуском SELECT или CREATE с кодом Java.

+0

является это можно сделать с помощью java-кода? – OiRc

+0

Несомненно. Просто запустите его точно так же, как вы делаете с 'select',' delete' или любым другим выражением. – AlexR

0

Создать keyspace_creation.cql, как показано ниже:
-> ВИМ keyspace_creation.cql

create keyspace demo WITH REPLICATION = {'class' : 'SimpleStrategy','replication_factor': 3 }; 
USE ycsb; 
create table usertable (
y_id varchar primary key, 
field0 varchar, 
field1 varchar, 
field2 varchar, 
field3 varchar, 
field4 varchar, 
field5 varchar, 
field6 varchar, 
field7 varchar, 
field8 varchar, 
field9 varchar); 

-> CD $ CASSANDRA_HOME/бен
-> ./cqlsh

cqlsh> source '~/$CASSANDRA_HOME/bin/keyspace_creation.cql'; 
Смежные вопросы