首页 > 解决方案 > 为什么插入和选择查询的结果集不同

问题描述

当我使用session.executein 时cassandra,我注意到ResultSet同一张表的结构不同。如果我使用 查询表以获取记录Where,则ResultSet包含从表中获取的数据。

val resultSet = session.execute(whereClause)

ResultSet[ exhausted: false, Columns[year(bigint), month(bigint), 
    creation_time_hour(bigint), creation_time_minute(bigint), 
    question_id(uuid), question_description(varchar)]]

但如果我使用Insert,我会得到完全不同的东西。

ResultSet[ exhausted: false, Columns[[applied](boolean)]]

这是预期的行为吗?有没有办法在方法返回cassandra的表中“插入”数据?ResultSetexecute

标签: cassandra-2.0datastax-java-driver

解决方案


通常,INSERT不会将插入的值返回给用户。例外是触发轻量级事务的插入 - 如果您使用IF NOT EXISTS. 在这种情况下,它可能会返回:

  1. 单行,单列[applied]true值 - 这意味着数据已插入;
cqlsh:test> insert into test.u2(id,u) values(5, {id:1, t1:3}) if not exists;

 [applied]
-----------
      True
  1. 具有表对应行的所有值的单行,加上[applied]具有false值的列 - 当具有给定主键的行已经存在时会发生这种情况。
cqlsh:test> insert into test.u2(id,u) values(1, {id:1, t1:2});
cqlsh:test> insert into test.u2(id,u) values(1, {id:1, t1:3}) if not exists;

 [applied] | id | u
-----------+----+----------------
     False |  1 | {id: 1, t1: 2}

推荐阅读