создание семейства столбцов в cql?

когда я создаю семейство столбцов с помощью cql, это дает мне очень неожиданный результат.

public static void createColumnfamily()
    {
        try
        {
            Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver");
            Connection con = DriverManager.getConnection("jdbc:cassandra://192.168.1.32:9160/temp");
            String qry = "CREATE TABLE users(user_name varchar," +
                                            "password varchar," +
                                            "gender varchar," +
                                            "session_token varchar," +
                                            "birth_year bigint," +
                                            "PRIMARY KEY (user_name)" +
                                            ")";
            Statement smt = con.createStatement();
            smt.executeUpdate(qry);
            System.out.println("TABLE(column family) is created");
            con.close();
        }
        catch(Exception e)
        {
            System.out.println(" : " + e.getMessage());
        }

    }

Вот что я получил: строка 1:132, посторонний ввод ')', ожидающий EOF


person Sunil Kumar    schedule 07.07.2012    source источник


Ответы (2)


Вы используете CQL 2, который не поддерживает такой стиль объявления первичного ключа. Если вы хотите объявить это таким образом, вы должны использовать CQL 3, что вы можете сделать, запросив эту версию в URL-адресе подключения:

DriverManager.getConnection("jdbc:cassandra://192.168.1.32:9160/temp?version=3.0.0");

Однако CQL 3 необходим не только для этого. Как предложил Стив Ван Опстал, вы можете просто поставить маркер PRIMARY KEY с самим определением столбца, поскольку у вас нет многокомпонентного первичного ключа.

CREATE TABLE users(
    user_name varchar PRIMARY KEY,
    password varchar,
    gender varchar,
    session_token varchar,
    birth_year bigint,
);

CQL 3 обычно предпочтительнее, если ваша Cassandra поддерживает его, поскольку это путь вперед, но если вы не хотите переключаться прямо сейчас, вы можете внести это второе изменение.

person the paul    schedule 07.07.2012

Я вижу здесь только две возможные проблемы.

  1. Запрос не принимает ваш способ определения первичного ключа

    Попробуй это:

        String qry = "CREATE TABLE users(user_name varchar PRIMARY KEY," +
                                        "password varchar," +
                                        "gender varchar," +
                                        "session_token varchar," +
                                        "birth_year bigint"
                                        ")";
    
  2. Запрос не принимает varchar в качестве первичного ключа

    Попробуй это:

        String qry = "CREATE TABLE users(user_id int" +
                                        "user_name varchar," +
                                        "password varchar," +
                                        "gender varchar," +
                                        "session_token varchar," +
                                        "birth_year bigint," +
                                        "PRIMARY KEY (user_id)" +
                                        ")";
    
person Steve Van Opstal    schedule 07.07.2012