使用CF:
CREATE TABLE history (
domain text,
iid text,
timeid timeuuid,
data text,
comments text,
PRIMARY KEY (domain, iid, timeid)
);
Run Code Online (Sandbox Code Playgroud)
我想像这样查询:
select domain, iid, timeid, data, comments from mappings
where domain = 'a' and iid = 'b' order by timeid desc;
Run Code Online (Sandbox Code Playgroud)
但它失败并出现以下错误(cassandra 1.1.5):
Bad Request: Order by currently only support the ordering of columns following their declared order in the PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)
我做错了吗?可能的解决方法是什么?谢谢
PS我使用单一的EQ限制和ORDER BY,但我需要至少2个限制和排序.
有没有办法在Cassandra中使用CQL3为地图中的元素选择TTL值?
我试过这个,但它不起作用:
SELECT TTL (mapname['element']) FROM columnfamily
Run Code Online (Sandbox Code Playgroud) 如何使用Cassandra CQL查询检查非主键字段的值是"A"还是"B"?(我正在使用Cassandra 2.0.1)
这是表定义:
CREATE TABLE my_table (
my_field text,
my_field2 text,
PRIMARY KEY (my_field)
);
Run Code Online (Sandbox Code Playgroud)
我试过了:
1> SELECT * FROM my_table WHERE my_field2 IN ('A', 'B');
2> SELECT * FROM my_table WHERE my_field2 = 'A' OR my_field = 'B' ;
Run Code Online (Sandbox Code Playgroud)
第一个失败了这个messeage:
Bad Request: IN predicates on non-primary-key columns (my_field2) is not yet supported
Run Code Online (Sandbox Code Playgroud)
第二个失败是因为Cassandra CQL不支持OR关键字
我无法让这个简单的查询工作(以非常直接的方式).一般来说,我很沮丧地处理CQL查询.是因为Cassandra还不够成熟,对查询的支持很差,还是我必须改变思维方式?
我想在.Net应用程序中使用Cassandra.我的目标是将一些数据存储在列族中,但每行数据都有不同的模式.
示例(非常简单)我希望有一个'Toys'列系列来存储以下对象,(注意它们除了ID属性之外还有非常不同的属性)
玩具对象1 {"id":"1","name":"Car","number_of_doors":4,"赞":3}
玩具对象2 {"id":"2","type":"Plane","flying_range":"100m"}
玩具对象3 {"id":"3","category":"Train","number_of_carriages":10}
从我最初的理解和使用Datastax CSharp驱动程序开始,我必须始终改变不适合我的表(Column系列).我希望每一行都有自己的架构.Thrift API可能能够解决这个问题,但似乎HectorSharp几乎已经死了.
一个类似于我的要求的问题,但它没有我想要的答案
Cassandra用于无模式数据库,每天有数百万个订单表和数百万个查询
我是通过期望每一行都有自己的架构来咆哮错误的树,还是有办法用Cassandra + Csharp做到这一点?
提前感谢您的回答.
我想通过CQL3中除Row Key之外的复合键来查询数据过滤.这些是我的疑问:
CREATE TABLE grades (id int,
date timestamp,
subject text,
status text,
PRIMARY KEY (id, subject, status, date)
);
Run Code Online (Sandbox Code Playgroud)
当我尝试访问数据时
SELECT * FROM grades where id = 1098; //works fine
SELECT * FROM grades where subject = 'English' ALLOW FILTERING; //works fine
SELECT * FROM grades where status = 'Active' ALLOW FILTERING; //gives an error
Run Code Online (Sandbox Code Playgroud)
错误请求:PRIMARY KEY部分状态不受限制(前一部分主题不受限制或非EQ关系)
只是为了试验,我把关键字保持为"我的主要行密钥".我总是只能使用主行键或第二个键进行查询,考虑到上面的例子,如果我在主键列表中交换主题和状态,我可以查询状态,但如果我尝试通过,我会得到类似的错误主题或时间.
难道我做错了什么?我可以不使用CQL3中的任何其他复合键查询数据吗?我正在使用Cassandra 1.2.6和CQL3.
如图所示,使用精确时间戳查询(2013-08-01 15:02:56)并未返回任何结果,但存在具有该时间戳的行但在查询时返回该行的结果
timestamps > '2013-08-01 15:02:56'
这是Cassandra的正常行为吗?

所以,我最初的问题是使用token()函数来浏览Cassandra 1.2.9中的大型数据集,如下所述:在Cassandra中使用带有varchar键的CQL3分页大型结果集
接受的答案是选择使用令牌和块大小,但另一个问题表现出来.
我的表在cqlsh中看起来像这样:
key | column1 | value
---------------+-----------------------+-------
85.166.4.140 | county_finnmark | 4
85.166.4.140 | county_id_20020 | 4
85.166.4.140 | municipality_alta | 2
85.166.4.140 | municipality_id_20441 | 2
93.89.124.241 | county_hedmark | 24
93.89.124.241 | county_id_20005 | 24
Run Code Online (Sandbox Code Playgroud)
主键是key和column1的组合.在CLI中,相同的数据如下所示:
get ip['85.166.4.140'];
=> (counter=county_finnmark, value=4)
=> (counter=county_id_20020, value=4)
=> (counter=municipality_alta, value=2)
=> (counter=municipality_id_20441, value=2)
Returned 4 results.
Run Code Online (Sandbox Code Playgroud)
问题
当使用限制为100的cql时,返回的结果可能会在记录中间停止,如下所示:
key | column1 | value
---------------+-----------------------+-------
85.166.4.140 | county_finnmark | 4
85.166.4.140 | county_id_20020 | 4
Run Code Online (Sandbox Code Playgroud)
将这些留给"行"(列):
85.166.4.140 | …Run Code Online (Sandbox Code Playgroud) 我试图了解Cassandra数据模型的基本原理.我正在使用CQL.据我所知,必须先定义架构,然后才能插入新列.如果有人需要添加任何列,可以使用ALTER TABLE并将INSERT值插入该新列.
但是在cassandra权威指南中写道,Cassandra的架构较少.
In Cassandra, you don’t define the columns up front; you just define the column families you want in the keyspace, and then you can start writing data without defining the columns anywhere. That’s because in Cassandra, all of a column’s names are supplied by the client.
我感到困惑,没有找到任何预期的答案.有人可以向我解释或告诉我,如果我错过了什么吗?
提前致谢.
我尝试阅读有关数据存储博客和文档但未找到任何具体内容
有没有办法让Cassandra中的2个表属于同一个分区?例如:
CREATE TYPE addr (
street_address1 text,
city text,
state text,
country text,
zip_code text,
);
CREATE TABLE foo (
account_id timeuuid,
data text,
site_id int,
PRIMARY KEY (account_id)
};
CREATE TABLE bar (
account_id timeuuid,
address_id int,
address frozen<addr>,
PRIMARY KEY (account_id, address_id)
);
Run Code Online (Sandbox Code Playgroud)
在这里,我需要确保这两个表/ CF都将存在于同一个分区,对于同一个account_id,这两组数据都可以从同一个节点获取
任何指针都非常感谢.
此外,如果有人在使用UDT(用户定义类型)方面有一些经验,我想了解向后兼容性如何工作.如果我修改"addr"UDT以获得更多属性(例如zip_code2 int和name text),具有这些属性的旧行如何工作?它甚至兼容吗?
谢谢
cassandra datastax-enterprise cql3 datastax-java-driver datastax
我使用以下代码创建表:
CREATE KEYSPACE mykeyspace
WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
USE mykeyspace;
CREATE TABLE users (
user_id int PRIMARY KEY,
fname text,
lname text
);
INSERT INTO users (user_id, fname, lname)
VALUES (1745, 'john', 'smith');
INSERT INTO users (user_id, fname, lname)
VALUES (1744, 'john', 'doe');
INSERT INTO users (user_id, fname, lname)
VALUES (1746, 'john', 'smith');
Run Code Online (Sandbox Code Playgroud)
我想找到lname列的不同值(不是PRIMARY KEY).我想得到以下结果:
lname
-------
smith
Run Code Online (Sandbox Code Playgroud)
通过使用SELECT DISTINCT lname FROM users;
但是因为lname不是PRIMARY KEY我得到以下错误:
InvalidRequest: …Run Code Online (Sandbox Code Playgroud)