2016-10-25 2 views
0

У меня есть небольшое определение таблицы для Cassandra 3, как показано ниже.Cassandra 'timestamp' InvalidQueryException при создании таблицы

create table if not exists mytable(id uuid primary key, data text, timestamp lastupdated); 

Я хочу, чтобы иметь возможность отобразить столбец временной метки под названием «LastUpdated» к типу java.time.Instant. Это можно обработать в соответствии с документацией Cassandra, зарегистрировав новый мгновенный кодек, как описано здесь. https://datastax.github.io/java-driver/manual/custom_codecs/extras/

Следуйте инструкциям, включая импорт com.datastax.cassandra: cassandra-driver-extras: 3.1.0 Я использую следующий код для добавьте мгновенный кодек.

// Extra setup to allow Cassandra Timestamp to map to Java 8 Instant 
    CodecRegistry myCodecRegistry; 
    myCodecRegistry = CodecRegistry.DEFAULT_INSTANCE; 
    myCodecRegistry.register(InstantCodec.instance); 

    Cluster cluster = Cluster.builder(). 
      addContactPoints(extractAddresses(config())). 
      withCodecRegistry(myCodecRegistry).build(); 

Когда я отладить этот код я вижу, что мой объект кластера содержит новый Instant кодек в cluster.getConfiguration(). CodecRegistry после его инициализации.

Однако, когда я исполняю CQL, который создает свою таблицу, как это определено в верхней части, я получаю следующее исключение, через session.execute:

unknown type xxx.lastupdated : 
com.datastax.driver.core.exceptions.InvalidQueryException: Unknown type xxx.lastupdated 

Я чувствую, что я упустил что-то очевидное, как метку времени должны быть распознаны даже без Instant кодека, любая помощь будет высоко оценена.

ответ

1

Ответ так же просто, как инвертирование имени столбца с типом!

create table if not exists mytable (
    id uuid primary key, 
    data text, 
    lastupdated timestamp 
); 
+0

* румянец * достает для кофейника :-) Спасибо за вашу помощь! – mesospheric

Смежные вопросы