У меня есть небольшое определение таблицы для 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 кодека, любая помощь будет высоко оценена.
* румянец * достает для кофейника :-) Спасибо за вашу помощь! – mesospheric