标签: cql

如何将 cassandra 表中的列更新为特定值?

嗨,我有一张卡桑德拉表。我的表中有大约 200 条记录。后来我更改了表以添加一个名为预算的新列,其类型为 boolean 。我想将该列的默认值设置为 true 。cql 应该是什么样子。

我正在尝试以下命令,但它不起作用

cqlsh:Openmind> update mep_primecastaccount set budget = true ;
SyntaxException: line 1:46 mismatched input ';' expecting K_WHERE
Run Code Online (Sandbox Code Playgroud)

感谢任何帮助,谢谢

cql cassandra cql3 cassandra-2.0 cassandra-3.0

1
推荐指数
1
解决办法
1199
查看次数

使用maxTimeuuid/minTimeuuid进行CQL timeuuid比较

我在Mac OS X上使用Datastax cassandra发行版(dsc-cassandra-1.2.6).我想使用timeuuid类型,并正在尝试对它们进行查询.

这是我的表:

CREATE TABLE test_t (
  canon_key text,
  t timeuuid,
  PRIMARY KEY (canon_key, t)
)
Run Code Online (Sandbox Code Playgroud)

现在让我说我得到一排.

cqlsh:pagedb> select canon_key, t, dateOf(t), unixTimestampOf(t) from test_t where canon_key = 'xxx' and t >= minTimeuuid('2013-08-08 18:43:58-0700');                 
 canon_key | t                                    | dateOf(t)                | unixTimestampOf(t)

-----------+--------------------------------------+--------------------------+--------------------

       xxx | 287d3c30-0095-11e3-9268-a7d2e09193eb | 2013-08-08 18:43:58-0700 |      1376012638067
Run Code Online (Sandbox Code Playgroud)

现在,我想删除这一行.我没有看到这样做的好方法,因为timeuuid类型没有相等运算符.

我添加的数据的性质是这样的,我(可能)甚至不介意这样做:

cqlsh:pagedb>从test_t中选择canon_key,t,dateOf(t),unixTimestampOf(t)其中canon_key ='xxx'和t> = minTimeuuid('2013-08-08 18:43:58-0700')和t < = maxTimeuuid('2013-08-08 18:43:58-0700');

但根据文档(http://cassandra.apache.org/doc/cql3/CQL.html#usingdates),这将无法正常工作.引述:"请注意,t> = maxTimeuuid('2013-01-01 00:05 + 0000')仍然不会选择在'2013-01-01 00:05 + 0000'生成的时间长度,并且基本上相当于t> maxTimeuuid('2013-01-01 00:05 + 0000')."

那么..我该如何删除这一行?

cql cassandra datastax-enterprise

0
推荐指数
1
解决办法
3931
查看次数

如何解决cassandra中不匹配的列名/值?

我在cassandra表中插入了一组数据。但是我在其中得到了不匹配的列名/值。我正在发布代码以及表结构

public static void aMethod2FromData(DetailsVO detailsVO) {

    System.out.println(detailsVO.getA_no());

    StringBuilder sb = new StringBuilder();

    int num = (int) (Math.random() * 8847);
    int radar = (int) (Math.random() * 847);
    sb.append(
    "INSERT INTO CALL_RATIO_ANALYSYS (A_NO,JAN,FEB,MAR,APR,MAY,JUNE,JULY,AUG,SEP,OCT,NOV,DEC,RADAR_VOICE,RADAR_SMS,RADAR_MMS,RADAR_GPRS,RADAR_OTHER,MMS_INCOMING,MMS_OUTGOING,VOICE_INCOING,VOICE_OUTGOING,SMS_INCOMING,SMS_OUTGOING,GPRS_SOCIAL,GPRS_MAIL,GPRS_GOOGLE,GPRS_ENTERTAINMENT,GPRS_BUSINESS)")
            .append("VALUES(");



        sb.append("'").append(detailsVO.getA_no()).append("',");
        //calculation for Jan to dec
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        sb.append("'").append(num).append("',");
        //end here
        //start calculation of radar
        sb.append("'").append(radar).append("',");
        sb.append("'").append(radar).append("',");
        sb.append("'").append(radar).append("',");
        sb.append("'").append(radar).append("',");
        sb.append("'").append(radar).append("',");
        //ends here
        //mms incoming
        sb.append("'").append(radar).append("',");
        sb.append("'").append(radar).append("',");
        //ends here
        //voice incoming outgoing
        sb.append("'").append(radar).append("',");
        sb.append("'").append(radar).append("',");
        //end here
        //sms incoming outgoing …
Run Code Online (Sandbox Code Playgroud)

java cql cassandra

0
推荐指数
1
解决办法
2834
查看次数

我们是否需要使用Leveled压实策略和SIzeTiered压缩策略进行手动压缩

我们有几个表格采用Leveled压缩策略和SizeTiered压缩策略.我们多久需要进行一次压实?提前致谢

cql cassandra datastax-enterprise cqlsh datastax

0
推荐指数
1
解决办法
1827
查看次数

当 read_repair_chance = 0 时修复不一致

我的理解是 read_repair_chance 是在所有副本上触发 ReadRepair 的概率机会。如果发现不一致,最新更新将用于修复数据。

ReadRepairs 对我来说太贵了,因为我的大部分读取 CL 都是 ONE。所以我也选择 read_repair_chance = 0 和 dclocal_read_repair_chance = 0 。

但有时我会使用 QUORUM 而不是 ONE。当两个副本响应时达到读取 QUORUM,但两条记录可以不同。Cassandra 返回具有最新时间戳的那个。它会尝试修复另一台吗?

cql cassandra cql3

0
推荐指数
1
解决办法
3142
查看次数

Cassandra:如何对传感器数据的时间序列进行建模?

我需要将传感器读数存储在 cassandra(版本 2!)中。有n 个传感器,其中每个传感器最多可以发送m 个具有不同类型(例如Float、Bool、String)的不同值。这些值必须存储在 cassandra 中。稍后,将主要按时间范围查询值。因此,查询可以是“给我从 2016-05-01 09:00 到 2016-05-15 13:00 的所有读数”。可能有按传感器 ID/类型的过滤器,但主要查询始终是时间。(因此查询可能是“给我 2016 年 5 月 5 日以来传感器 1 和 5 的所有数据”,但很可能不是“给我传感器 1 和 5 的所有数据”)。

对于更详细的查询,如果必须扫描所有数据(受时间和可能的传感器 ID 限制)也是可以的。因此,对于查询“给我 2016 年 5 月 5 日以来传感器 5 的所有传感器数据,其中读数的浮点值大于 1000”,如果 cassandra 必须扫描 2016 年 5 月 5 日以来传感器 5 的所有值,那么就可以了!

我读了很多关于数据建模的博客文章/问题(例如[1] [2] [3] [4] [5] [6]),但有些东西已经有很多年了,我不确定它是否仍然存在正确的方法。

我的主要问题是:

  • 我使用什么数据类型作为时间戳(需要毫秒分辨率)
  • 如何定义键?(例如,我是否需要像某些示例使用的每小时主键?如果是,我可以在 cassandra 中合并超过一小时的结果还是需要手动执行此操作?)
  • 如何添加sensorID以便高效查询

传感器数据将始终按顺序插入,因此不会更改以前的数据,也不会添加时间戳低于当前最大值的数据。

database-design cql cassandra

0
推荐指数
1
解决办法
1601
查看次数

在Cassandra中创建的分区数

我在Cassandra中创建了一个带有一个分区键(即一个主键)的表,并在其中插入了约50K记录,其中35K是唯一记录。

根据规则(如果我错了,请纠正我),Cassandra中的分区数应等于表中的唯一记录(即分区数=主键中的唯一记录)。

但是当我做节点工具时-

./nodetool tablestats -H keyspace.tablename

它给我:-

    Number of keys (estimate partitions key): 7500
Run Code Online (Sandbox Code Playgroud)

即比矿表中唯一记录的数量少得多。

因此,任何人都可以解释这种情况。

cql cassandra

0
推荐指数
1
解决办法
1168
查看次数

为什么 CQL 允许带有分区键的不等式运算符?

SELECT文档清楚地表明,在 a 中允许与分区列一起使用的唯一运算符是 equals ( =) 和in[value1, values2[,...]),但是, with ALLOW FILTERING,似乎允许不等式运算符。这是一个简单的例子:

CREATE TABLE dept_emp (
    emp_no      INT,
    dept_no     VARCHAR,
    from_date   DATE,
    to_date     DATE,
    PRIMARY KEY (emp_no, dept_no)
);

insert into dept_emp (emp_no, dept_no, from_date, to_date) values
(1, '9', '1901-01-01', '1920-02-01');
insert into dept_emp (emp_no, dept_no, from_date, to_date) values
(2, '9', '1920-01-01', '1930-01-01');
insert into dept_emp (emp_no, dept_no, from_date, to_date) values
(3, '9', '1920-01-01', '1930-01-01');

SELECT * FROM dept_emp WHERE emp_no > 1 ALLOW FILTERING;

 emp_no …
Run Code Online (Sandbox Code Playgroud)

cql cassandra

0
推荐指数
1
解决办法
352
查看次数

CQL列表值是否真的限制为65535字节?

文档列出了Cassandra 2.2的许多CQL限制.我在为收集限制特别感兴趣SetList.如果我已正确解释它,该文档指出集合中的值限制为65535字节.

据我所知,这个限制是存在的,因为set identity是使用存储引擎单元的列名中的复合值实现的(类似于聚类列值限制),CQL限制为那么多字节.

考虑一个Set类似的表

CREATE TABLE test.bounds (
    someid text,
    someorder text,
    words set<text>,
    PRIMARY KEY (someid, someorder)
)
Run Code Online (Sandbox Code Playgroud)

PreparedStatement ps = session.prepare("INSERT INTO test.bounds (someid, someorder, words) VALUES (?, ?, ?)");
BoundStatement bs = ps.bind("id", "order", ImmutableSet.of(StringUtils.repeat('a', 66000)));
session.execute(bs);
Run Code Online (Sandbox Code Playgroud)

这将抛出预期的异常

Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: The sum of all clustering columns is too long (66024 > 65535)
Run Code Online (Sandbox Code Playgroud)

现在如果我改变表使用a List而不是aSet

CREATE TABLE test.bounds (
    someid text,
    someorder text,
    words list<text>, …
Run Code Online (Sandbox Code Playgroud)

cql cassandra

-6
推荐指数
1
解决办法
383
查看次数