[英]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.