2016-12-30 16 views
1

私のテーブルからタイムスタンプの間のデータを削除したい。タイムスタンプ列を使用して行を削除するcassandra

CREATE TABLE propatterns_test.test (
clientId text, 
meterId text, 
meterreading text, 
date timestamp, 
PRIMARY KEY (meterId, date)); 

マイ削除クエリは次のとおりです。

このエラーを返さ
DELETE FROM test WHERE meterid = 'M5' AND date > '2016-12-27 10:00:00+0000'; 

:その後

InvalidRequest: Error from server: code=2200 [Invalid query] 
    message="Invalid operator < for PRIMARY KEY part date" 

私は特定の行を削除しようとしました:実は

DELETE FROM test WHERE meterid = 'M5' AND date = '2016-12-27 09:42:30+0000'; 

テーブルには同じものが含まれますレコードが削除されませんでした。何がテーブルから削除されていない

meterid | date      | clientid | meterreading 
---------+--------------------------+----------+-------------- 
     M5 | 2016-12-27 09:42:30+0000 |  RDS |  35417.8 
     M5 | 2016-12-27 09:42:44+0000 |  RDS |  35417.8 
     M5 | 2016-12-27 09:47:20+0000 |  RDS |  35417.8 
     M5 | 2016-12-27 09:47:33+0000 |  RDS |  35417.8 

これは次のように私のデータが見えるものです。では、プライマリキーの一部であるタイムスタンプ日付間のデータを削除するにはどうすればよいですか?

答えて

1

C * 3.0以降では範囲句で削除が可能です。エラーを見れば私はあなたがCQLを介してこれを行うことができない場合には3.0より前のバージョンだと思う。

1

私はここでいくつか起こっていることを見る。まず、上記のiconnjのように、Cassandra 3.0以前のバージョンでは範囲の削除はできません。

第2に、タイムスタンプに存在するミリ秒を考慮していないため、1行削除の試行が失敗しています(私は信じています)。 timestsampasblobblobasbigint関数内ネストごdate列を場合は、これを見ることができます:

[email protected]:stackoverflow> SELECT meterid,date,blobAsBigint(timestampAsBlob(date)) 
    FROM propatterns WHERE meterid='M5'; 

meterid | date      | system.blobasbigint(system.timestampasblob(date)) 
---------+--------------------------+--------------------------------------------------- 
     M5 | 2016-12-27 09:42:30+0000 |          1482831750000 
     M5 | 2016-12-30 17:31:53+0000 |          1483119113231 
     M5 | 2016-12-30 17:32:08+0000 |          1483119128812 

(3 rows) 

私は明示的にあなたの例から挿入することを、2016-12-27 09:42:30+0000行の末尾にゼロを注意してください。 dateof(now())ネストされた関数を使用してINSERTした2つの行は、実際にはタイムスタンプの最後の3桁のミリ秒を持つことに注意してください。要約すると

[email protected]:stackoverflow> DELETE FROM propatterns WHERE meterid='M5' 
    AND date='2016-12-30 17:32:08.812+0000'; 
[email protected]:stackoverflow> SELECT meterid,date,blobAsBigint(timestampAsBlob(date)) 
    FROM propatterns WHERE meterid='M5'; 

meterid | date      | system.blobasbigint(system.timestampasblob(date)) 
---------+--------------------------+--------------------------------------------------- 
     M5 | 2016-12-27 09:42:30+0000 |          1482831750000 
     M5 | 2016-12-30 17:31:53+0000 |          1483119113231 

(2 rows) 

::私はこれらの3つの数字を取ると私は行の1つを削除するとミリ秒として追加したときに何が起こるか

ウォッチあなたが範囲を実行することはできません

  • 前削除カサンドラ3.0。
  • ミリ秒が実際に存在する場合は、ミリ秒を指定せずにタイムスタンプでキー入力された個々の行を削除することはできません。
関連する問題