2013-09-23 32 views
4

这听起来可能很愚蠢,因为SQL复合主键中没有空值。但只想确认一下我们在CQL3中是否可以拥有相同的内容?
因此,我们有这样一个表来存储宽行:如何在CQL3中为复合键列创建空列值

CREATE TABLE keyspace12.colFamily1 
(
    id text, 
    colname text, 
    colvalue blob, 
    PRIMARY KEY (id,colname, colvalue) 
) WITH COMPACT STORAGE 

而且我们有一些情况下,colname的为空。我可以这样做吗?如果是,那么如何?如果否,那么存储宽列行的方式是什么?我们可以在cassandra的组合列的第一部分中有一些null(按照Thrift的约定)?

的相关问题是: CQL3 and millions of columns composite key use caseCassandra -How to create composite column name (not key) using cqlsh

回答

0

而且我们有一些情况下,colname的为空。我可以这样做吗?

响应是没有,如预期

如果否,那么是什么存储宽列行,其中我们可以在卡桑德拉组合柱的第一部分,一些空(按照节俭的会议方式)?

你可以在储蓄与卡桑德拉-CLI。这是不可能的CQL3设置主键组成部分为空

+0

我们已经在做。基本上在节俭我们有像Decimal.Bytes组合列,那里我们可以有小数部分为空...想知道如何实现在CQL3 – Easility

+0

我们在这里有同样的问题,我们如何移植到CQL3呢? –

+0

我认为,**技术**它可能,但**语义** Datastax禁止为主键组件(这是有道理的)为空值。如果将component1,component2和component3作为组合,则为component2设置null将使您在字节数组中有一个“空洞”。对于分片查询和列排序,你可能会有奇怪的行为 – doanduyhai

1

说我有一列族

CREATE TABLE cnt_test (time_slot text , comp1 text, comp2 text, field1 counter, field2 counter, PRIMARY KEY(time_slot,comp1, comp2)); 

我现在想在它

UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='' AND comp2='ABC'; 
UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='' AND comp2='ABC'; 
UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='' AND comp2='ABC'; 
UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='' AND comp2='XYZ'; 
UPDATE cnt_test SET field1=field1+1, field2=field2+2 WHERE time_slot='20130924' AND comp1='PQR' AND comp2=''; 

插入一些数据,你可以在上面的陈述中看到我已经在复合关键部分中插入了一些空值,而不是null我将空白字符。

我甚至可以在同一

SELECT * FROM cnt_test WHERE time_slot='20130924' AND comp1='' AND comp2='ABC'; 

time_slot | comp1 | comp2 | field1 | field2 
-----------+-------+-------+--------+-------- 
    20130924 |  | ABC |  4 |  8 

(1 rows) 

SELECT * FROM cnt_test WHERE time_slot='20130924' AND comp1='PQR' AND comp2=''; 

time_slot | comp1 | comp2 | field1 | field2 
-----------+-------+-------+--------+-------- 
    20130924 | PQR |  |  1 |  2 

(1 rows) 

查询,以便总结每一件事情刚刚与空柱更换空列值即''

+1

感谢Abhi,这在我们的一些用例工作。在我们的例子中colname是什么不是文本而是int?我们如何插入null或空白? – Easility

+0

hmmm ...有趣...在这种情况下,我会考虑任何整数值,可能是0,即默认的整数值。在查询这些数据的同时,我会记住这个假设,并会据此处理。 – abhi

+0

@abhi是的,如何为varint类型做到这一点? –

-1

我需要做同样以模特父/子女关系在一张桌子里。所以当我想要插入一个父代时,'id'被填充,你的'colname'将被设置为零。

要做到这一点,解决方案非常简单,直接将'colname'插入为空字符串。我可以看到我的select返回null返回。