使用Cassandra 2.28,Drive 3,Sparks2。我在Cassandra中有一个timestamp列,我只需要按日期部分查询它。如果我按日期查询:<代码>。其中(“交易日期=?”,“2012-01-21”:它不会带来任何结果。如果我包括时间部分,它会显示无效日期。我的数据(如我在cqlsh中所读)是:2012-01-21 08:01:00 0000
参数:“2012-01-21”
参数:"2012-01-21 08:01:00"
参数:“2012-01-21 08:01:00 0000”
SimpleDataFormat DATE\u格式=新的SimpleDataFormat(“YY/mm/dd”);TRAN\u DATE=日期格式。parse(“2012年1月19日”);已使用批量加载器/SSLoader加载表格
表中数据:
tran_date | id
--------------------------+-------
2012-01-14 08:01:00+0000 | ABC
2012-01-24 08:01:00+0000 | ABC
2012-01-23 08:01:00+0000 | ALM
2012-01-29 08:01:00+0000 | ALM
2012-01-13 08:01:00+0000 | ATC
2012-01-15 08:01:00+0000 | ATI
2012-01-18 08:01:00+0000 | FKT
2012-01-05 08:01:00+0000 | NYC
2012-01-11 08:01:00+0000 | JDU
2012-01-04 08:01:00+0000 | LST
我该如何解决这个问题。
谢谢
如果您将数据插入时间戳列而不提供像这样的时区:
INSERT INTO timestamp_test (tran_date , id ) VALUES ('2016-12-19','TMP')
Cassandra会选择协调器时区
如果未指定时区,则使用处理写入请求的Cassandra协调器节点的时区。为了准确起见,DataStax建议指定时区,而不是依赖Cassandra节点上配置的时区。
如果使用Datastax驱动程序执行select,则需要将字符串日期转换为java。util。日期并设置协调器节点的时区,在我的示例中是GMT 6
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-01-21");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+6")); //Change this time zone
现在您可以查询
QueryBuilder.eq("TRAN_DATE", date)
以下是完整的演示:
try (Cluster cluster = Cluster.builder().addContactPoints("127.0.0.1").withCredentials("username", "password").build(); Session session = cluster.connect("tests")) {
session.execute("INSERT INTO test_trans(tran_date , id ) VALUES ('2016-12-19','TMP')");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+6"));
Date date = dateFormat.parse("2016-12-19");
System.out.println(date);
for (Row row : session.execute(QueryBuilder.select().from("timestamp_test").where(QueryBuilder.eq("tran_date", date)))) {
System.out.println(row);
}
}
资料来源:https://docs.datastax.com/en/cql/3.0/cql/cql_reference/timestamp_type_r.html
我想查询cassandra timestamp列,例如this hour、last hour、beather。 我在mysql中执行了与昨天数据相同的查询
从mytable中选择*,其中id='5'和postingdate>='2018-11-06 00:00:00'和postingdate<='2018-11-06 23:59:59'; 在开发中心控制台(或CQLSH)上运行这个查询,会给我相同的结果,而不考虑时区。我在PST和IST中都尝试过,得到了同样的结果。在执行查询之前,Cassandra是在执行PST->UTC还是IST->UTC转换?如
我需要使用Cassandra查询将时间戳“1998/02/12 00:00:00”转换为数据1998-02-12。谁能帮我一下吗。有没有可能?
null 还是有其他(更好的)选择? 谢谢
我有带有时间戳(UTC时间)的json日志。我将键和值映射到Cassandra表键并插入记录。但是,Cassandra通过从时间戳中减去5小时,再次将已有的UTC时间戳转换为UTC。这里的时区是(GMT+5)。 现在时间已经是UTC时间,并且仍然插入5小时前的时间戳。 我如何解决这个问题?
我想知道是否有办法查询这个。在下面的例子中,我有一个出席日期列表。正如你所看到的,2-11在2-2之前被添加到Firebase。 我在做一个电话:firebase。 有了以上这些,我总能在firebase数据库中创建最后一条记录。然而这让我很失望,因为2-11已经不是最后一场了。有没有这样的方法: 显然以上行不通。只有一个例子。有什么想法吗?