卡桑德拉的时间戳'表创建时出现InvalidQueryException

时间:2016-10-25 14:32:18

标签: java cassandra timestamp

我有一个Cassandra 3的小表定义,如下所示。

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我使用以下代码添加Instant编解码器。

    // 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();

当我调试这段代码时,我可以看到我的Cluster对象在初始化后在cluster.getConfiguration()。codecRegistry中包含新的Instant编解码器。

但是,当我执行创建我的表的cql时,如顶部所定义,我通过session.execute获得以下异常:

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

我觉得我已经错过了一些明显的东西,因为即使没有即时编解码器也应该识别时间戳,任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

答案就像使用类型反转列名一样简单!

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