簡體   English   中英

創建表時,Cassandra'timestamp'InvalidQueryException

[英]Cassandra 'timestamp' InvalidQueryException when Table created

我有一個Cassandra 3的小表定義,如下所示。

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

我希望能夠將名為“ lastupdated”的時間戳列映射到java.time.Instant類型。 可以根據Cassandra文檔處理此問題,方法是注冊一個新的Instant編解碼器,如此處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

我覺得我錯過了一些顯而易見的事情,因為即使沒有Instant Codec,也應該識別時間戳,我們將不勝感激。

答案很簡單,只需將列名稱轉換為類型即可!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM