如何在Cassandra的服务器端存储时间戳?

时间:2020-10-24 15:11:28

标签: java cassandra

我尝试使用下面的代码:

    final Session session = connection.getSession();
    final String keyspaceName = session.getLoggedKeyspace();
    psInsert = session.prepare(QueryBuilder
            .insertInto(keyspaceName, CampaignConstants.TABLE_NAME_SAMPLE)
            .value("ID", QueryBuilder.bindMarker())
            .value("NAME", QueryBuilder.bindMarker())
            .value("UPDATE_TIME", QueryBuilder.now()));

“ UPDATE_TIME”列的类型为“时间戳”。我无法将其修改为“ TimeUUID”类型。

我收到此错误:

com.datastax.driver.core.exceptions.InvalidQueryException:类型错误: 无法将功能system.now(类型timeuuid)的结果分配给 update_time(时间戳类型)

函数QueryBuilder.now()返回一个Java类实例:com.datastax.driver.core.querybuilder.Utils $ FCall。

我进行了搜索,但是文档中没有指定如何使用驱动程序使用now()函数。

1 个答案:

答案 0 :(得分:3)

在CQL中,您需要使用以下表达式:toTimestamp(now())

对于Java驱动程序4.x,它被翻译为以下内容:您需要使用QueryBuilder.now()来代替QueryBuilder.toTimestamp(QueryBuilder.now()

对于Java驱动程序3.x,您需要将QueryBuilder.now()包装到QueryBuilder.fcall中,如下所示:QueryBuilder.fcall("toTimestamp", QueryBuilder.now())