java - 创建表时 Cassandra 'timestamp' InvalidQueryException

标签 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,我使用以下代码添加即时编解码器。

    // 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 中包含新的即时编解码器。

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

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

我觉得我错过了一些明显的事情,因为即使没有即时编解码器,时间戳也应该被识别,任何帮助将不胜感激。

最佳答案

答案很简单,只需将列名与类型反转即可!

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

关于java - 创建表时 Cassandra 'timestamp' InvalidQueryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40242745/

相关文章:

java - 从数据库中在java中显示时间戳值

java - 接收应用程序如何知道使用了哪种序列化机制?

java - 时间和/或日期排序

java - 防止可能由于线程导致的堆内存不足异常

Java 正则表达式 : find single quoted text with escapes

python - cassandra python驱动程序自动降级protocol_version不起作用

java - 何时在 Cassandra 中使用 UUID 而不是毫秒时间戳?

hadoop - Cassandra CQL3 复合 key 不是由 Hadoop reducer 编写的

java - 如何在 Java 中将 Twitter 时间戳转换为日期

php - 为什么 PHP 中的日期时间到时间戳转换不起作用?