2016-03-23 22 views
1

Geniş bölümleri olan bir tablo oluşturmak (veya başka bir şekilde, herhangi bir bölümdeki satır sayısını verimli bir şekilde satın alabilmenizi sağlayan değer sütunları olmayan (birincil anahtar sütunları olmayan) bir tablo oluşturmak istiyorum. İşte böyle bir tabloBu tür sayaç tablosu tanımı geçerli mi?

CREATE TABLE IF NOT EXISTS test_table 
(
    partitionKeyCol   timestamp 
    clusteringCol   timeuuid 
    partitionRowCountCol counter static 
    PRIMARY KEY    (partitionKeyCol, clusteringCol) 
) 

bu tanım sorunu basit bir tanımıdır ve diğerleri bunun gibi yapılandırılmış, onların geçerliliği açıkça dokümanlar yer alan bilgilere çıkarılabilir edilemez olmasıdır.

docs (sayaçları konusunda) devlet ne yapıyoruz:

  • Sayaç kolon ne bir tablo en PRIMARY KEY bir parçası olarak belirtilen, ne de bir INDEX

  • oluşturmak için kullanılabilir Bir sayaç sütunu sadece adanmış sayaç tablosu (yalnızca değer sütunları olarak tanımlanan sayaç sütunlarına sahip olan bir tablo olarak aldığım) tablosunda tanımlanabilir.

docs (sayaçları konusunda) devlet yok Ne:

  • sayaçların eşsiz yazma yolu verilen bunun için tanımlanmış statik bir sayaç sütunu (sahip olmak bir tablo yeteneği , ben de bir olmasını,) bu terimin benim anlayış verilmiş, bir adanmış sayaç tablosu yapım bunun (için tanımlanan sıfır değeri sütunları olan bir tablo, bir

  • yetenek) kayda değer olduğunu hissediyorum statik cou Bu

dokümanlar içinde mevcut (ve eksik) bu konuda bilgi göz önüne alındığında için ara tabanlı kolon tanımlandığı gibidir, böyle bir tanım geçerli olduğu görülmektedir. Ancak, partitionRowCountCol güncellemelerinin (partitionKeyCol, clusteringCol) tupllerini eklemek için kullanılandan farklı bir yazma yolunun kullanılmasını gerektirdiğinden, bunun mümkün olduğundan emin değilim.

Bu tür sayaç tablosu tanımı geçerli mi? Eğer öyleyse, tabloya nasıl yazılır?

cevap

1

Bu yapıda bir tablo tanımlanabilir gibi görünüyor, ancak bunun için iyi bir kullanım durumu bulmak için mücadele ediyorum. Aslında bu kümelenme sütununa yazmanın bir yolu yok gibi görünüyor.

CREATE TABLE test.test_table (
    a timestamp, 
    b timeuuid, 
    c counter static, 
    PRIMARY KEY (a, b) 
); 

[email protected]:test> insert into test_table (a,b,c) VALUES (unixtimestampof(now()), now(), 3); 
InvalidRequest: code=2200 [Invalid query] message="INSERT statements are not allowed on counter tables, use UPDATE instead" 
[email protected]:test> update test_table set c = c + 1 where a=unixtimestampof(now()); 
[email protected]:test> update test_table set c = c + 1 where a=unixtimestampof(now()); 
[email protected]:test> select * from test_table; 

a      | b | c 
--------------------------+------+--- 
2016-03-24 15:04:31+0000 | null | 1 
2016-03-24 15:04:37+0000 | null | 1 

(2 rows) 
[email protected]:test> update test_table set c = c + 1 where a=unixtimestampof(now()) and b=now(); 
InvalidRequest: code=2200 [Invalid query] message="Invalid restrictions on clustering columns since the UPDATE statement modifies only static columns" 
[email protected]:test> insert into test_table (a,b) VALUES (unixtimestampof(now()), now()); 
InvalidRequest: code=2200 [Invalid query] message="INSERT statements are not allowed on counter tables, use UPDATE instead" 
[email protected]:test> update test_table set b = now(), c = c + 1 where a=unixtimestampof(now()); 
InvalidRequest: code=2200 [Invalid query] message="PRIMARY KEY part b found in SET part" 

Neye denemek istiyorsun?

+0

Bir günlük bir şekilde bir zaman dizisini bölümlemeye çalışıyorum ve satır taraması gerçekleştirdiğine inandığım "COUNT" toplamını kullanmadan belirli bir günde giriş sayısını elde etmenin bir yolunu sağladım ve sonucu döndürür. Sayı ve tupller asla aynı anda alınmaz, bu nedenle sayacın masaya dahil edilmesi, sadece bunun için bir tablo oluşturulmasını önleme isteğiyle sıkı bir şekilde motive edilmiştir. – Kevin

+0

Hafifçe ilgili bir notta, geçerli olmayan bir tablonun başarıyla oluşturulabileceğini tuhaf buluyorum. Bu bir hata olarak kabul edilebilir mi? – Kevin

+0

Bu garip. Düğmeye değer olduğunu düşünüyorsanız, [Cassandra] (https://issues.apache.org/jira/browse/CASSANDRA) ile bir JIRA bileti açmayı önerebilirim. –