Cassandra 不执行带有时间戳字段的插入语句

Posted

技术标签:

【中文标题】Cassandra 不执行带有时间戳字段的插入语句【英文标题】:Cassandra does not execute insert statement with timestamp field 【发布时间】:2015-11-19 15:58:54 【问题描述】:

--更新:似乎是虚拟机出现了故障。我重新启动了 Cassandra 服务,它按预期工作。 --更新:似乎问题不在代码中,我尝试在Cassandra客户端中执行插入语句,我得到相同的行为,没有显示错误,没有插入任何内容。 导致此行为的列是时间戳类型。当我将此列值设置为某些值时(例如'2015-08-25 22:15:12') 表格是: 创建桌面播放器 (msisdn varchar 主键, game int,keyword varchar,插入时间戳,lang int,mo int,mt int,qid int,score int)

我是 Cassandra 的新手,下载了 VirtualBox 快照来测试它。 我正在尝试批处理的示例代码,它什么也没做,所以我尝试按照人们的建议直接执行准备好的语句。

var addPlayer = casDemoSession.Prepare("INSERT INTO player (msisdn,qid,keyword,mo,mt,game,score,lang,inserted) Values (?,?,?,?,?,?,?,?,?)");

for (int i = 0; i < 20; i++) 
    var bs = addPlayer.Bind(getRandMSISDN(), 1, "", 1, 0, 0, 10, 0,  DateTime.Now);
    bs.EnableTracing(true);
    casDemoSession.Execute(bs);

上面的代码没有抛出任何异常,也没有插入任何数据。我试图跟踪查询,但它没有显示实际的 cql 查询。 PlannetCassandra V0.1 VM 运行 Cassandra 2.0.1 datastax 驱动 2.6 https://github.com/datastax/csharp-driver

【问题讨论】:

您能否使用您在客户端和表架构中测试的 CQL 进行更新? @Tamer,您是否打算使用DateTime.Now 而不是DateTime.Now()?另外,您使用的是哪个驱动程序? 似乎是虚拟机出现了故障。我应该删除问题吗? 【参考方案1】:

可能缺少的一件事是您的播放器表的键空间名称。通常你会有 "INSERT INTO &lt;keyspace&gt;.name (..."

如果您能够运行 cqlsh,您能否将“DESCRIBE TABLE &lt;keyspace&gt;.player”的输出添加到您的问题中,并显示当您尝试在 cqlsh 中进行插入时会发生什么。

【讨论】:

以上是关于Cassandra 不执行带有时间戳字段的插入语句的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra 更新 - 带有时间戳聚类键的“位置”

更新/插入中的Cassandra不一致

使用 MySQL/PHP 在字段中使用 now() 插入当前日期/时间

CassandraIO 无法保存时间戳

期望时间戳值Cassandra的长或日期字符串表示

在使用准备好的语句执行插入查询后获取自动增量 ID