在cassandra中创建表时,我们可以给出按如下顺序排列的聚类键。
Create table user(partitionkey int, id int, name varchar, age int, address text,
insrt_ts timestamp,
Primary key(partitionkey, name, insrt_ts, id)
with clustering order by (name asc, insrt_ts desc, id asc);
当我们将数据插入到该表中时,如cassandra文档所示,记录将根据聚类键进行排序。
当我使用CQL1和
我的问题在下一个。
我的代码中有下一个简单的模型:
public class Client
{
public Guid Id { get; set; }
public string Name { get; set; }
}
我为它定义了一个映射:
public class CustomMappings : Mappings
{
public CustomMappings()
{
For<Client>().TableName("clients")
.PartitionKey(
我有一个定义如下的cassandra表:
CREATE TABLE test.test(
id text,
time bigint,
tag text,
mstatus boolean,
lonumb int,
PRIMARY KEY (id, time, tag)
)
我想使用select选择一个列。我试过:
select * from test where lonumb = 4231;
它规定:
code=2200 [Invalid query] message="No indexed columns present in by-columns clause with E
最近,我开始对CQL产生很大兴趣,因为我正在考虑使用Datastax驱动程序。以前,我使用的是column family而不是表,我使用的是Astyanax驱动程序。我需要澄清一些事情-
我在生产集群中使用下面的列族定义。而且,我可以动态插入任意列(及其值),而无需实际修改列族模式。
create column family FAMILY_DATA
with key_validation_class = 'UTF8Type'
and comparator = 'UTF8Type'
and default_validation_class = 'Bytes
我确信这是Cassandra最常见的问题。尽管如此: 我有一个示例表: CREATE TABLE test.test1 (
a text,
b text,
c timestamp,
id uuid,
d timestamp,
e decimal,
PRIMARY KEY ((a),c, b, id)) WITH CLUSTERING ORDER BY (b ASC, compartment ASC); 我的问题是: select b, (toUnixTimestamp(d) - toUnixTimestamp(c))/1000/60/60/24/365.25 as age from test
我对卡桑德拉的聚类感到有点困惑。我有一个非常重写和更新的应用程序。对于传统的关系数据库,我将数据划分为两个表:一个表用于不频繁更改的数据;一个表(行较短)用于频繁更改的列:
例如:
create table user_def ( id int primary key, email list< varchar > ); # stable
create table user_var ( id int primary key, state int ); # changes all the time
但是Cassandra似乎是为访问人烟稀少的列而优化的,所以我不确定在Cassandra模
我刚接触cassandra,我遇到了一个问题。我创建了一个keyspace demodb和一个表users。该表有3列: id (int和主键)、firstname (varchar)、name (varchar)。这个请求给我带来了好的结果:
SELECT * FROM demodb.users WHERE id = 3;
但这一条:
SELECT * FROM demodb.users WHERE firstname = 'francois';
不起作用,我得到以下错误消息:
InvalidRequest: code=2200 [Invalid query] message
我有一个Server表MyTable,其中包含列A的主键集,以及B和C列的唯一聚集索引集。
在此电话之后:
(new SqlDataAdapter(new SqlCommand($"select top 0 * from MyTable", conn))).FillSchema(theDataTable, SchemaType.Mapped);
theDataTable的.PrimaryKey设置为B和C列,而不是A。
为何会这样呢?
我有一个在第一列上有主键的表,但是当我看到这个表中的可用数据时,我发现包括主键数据在内的记录是重复的。我想知道这是怎么可能的?主列在SQL Server 2008中是否有重复数据?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[DemoTbl](
[ProcedureId] [int] NOT NULL,
我正尝试从命令行插入到我的CQL表中。我可以插入所有内容。但是我想知道如果我有一个时间戳列,那么我如何从命令行插入到时间戳列中?基本上,每当我插入到我的CQL表中时,我都想插入当前时间戳
目前,每当我插入到下面的CQL表中时,我都会硬编码时间戳。
CREATE TABLE TEST (ID TEXT, NAME TEXT, VALUE TEXT, LAST_MODIFIED_DATE TIMESTAMP, PRIMARY KEY (ID));
INSERT INTO TEST (ID, NAME, VALUE, LAST_MODIFIED_DATE) VALUES ('1',
因此,我有一个Cassandra CQL语句,如下所示:
SELECT * FROM DATA WHERE APPLICATION_ID = ? AND PARTNER_ID = ? AND LOCATION_ID = ? AND DEVICE_ID = ? AND DATA_SCHEMA = ?
此表按时间戳列排序。
该功能由REST和筛选器参数之一(它们可以指定这些参数以获取最近的行)进行正面处理,然后我将“极限1”追加到CQL语句的末尾,因为它是按时间标记列降序排序的。我想做的是允许他们指定多个设备id,以获取最新的条目。所以,我的问题是,有没有办法在卡桑德拉做这样的事情:
SELECT
我知道,当我通过cql创建一个表时,我可以定义聚类顺序,如下所示:
create table test(
id int,
time timestamp,
value text,
primary key(id,time)) with clustering order by (time desc)
但我希望在使用alter创建表test后更改它的聚类:
alter table test
with clustering order by (item asc)
但我在这一点上出错了。谢谢你的帮助。