2016-12-01 15 views
1

私はcassandraにテーブルを持っています。 は私のタスクは次のとおりです。私は、レコードとPROVIDER_IDとファイル名がテーブルに存在挿入するとき 私は時間範囲を持つレコードを選択します(そのタイムスタンプは主キー、およびフィルタリングを許可する使用してはならない) 、レコードがレコードを更新するために主キーをcassandraに入れます

CREATE TABLE test (
    name text, 
    filename text, 
    timestamp timestamp, 
    is_deleted boolean, 
    PRIMARY KEY (provider_id, filename, timestamp) 
) 
に更新されます
+0

を選択または更新しますか? – xmas79

答えて

3

プライマリキー列を更新できません。別のレコードが挿入されます。
これは、カッサンドラの仕組みです。
その後、PROVIDER_ID、ファイル名とタイムスタンプを削除し、あなたがクラスタリングの列を使用する必要がある時間範囲に応じて項目を選択したい場合は、新しいタイムスタンプ

1

で再挿入、PROVIDER_IDとタイムスタンプを選択し、ファイル名を持っています。あなたのステートメントを作成する必要があります:

CREATE TABLE test (
    provider_id UUID, 
    name text, 
    filename text, 
    timestamp timestamp, 
    is_deleted boolean, 
    PRIMARY KEY ((provider_id, filename), timestamp) 
) 

今PROVIDER_ID +ファイル名は、お使いのパーティション・キーで、あなたのクラスタリング列にタイムスタンプ。

複合パーティションキーは、provider_idfilenameで構成されています。 クラスタリング列timestampは、 データのクラスタリング順序を決定します。一般的に、Cassandraは、同じノードに同じ provider_idを持つが、異なるノードにはfilenameという異なる列を格納し、同じノードに同じprovider_idfilenameを持つ列を格納します。

これは、あなたが今、このようなあなたのデータを照会することができることを意味:

SELECT * FROM test 
WHERE provider_id = 1 
AND filename = "test.txt" 
AND timestamp >= '2016-01-01 00:00:00+0200' AND ts <= '2016-08-13 23:59:00+0200' 

、可能な更新のために:

UPDATE test 
SET name = "test-new" 
WHERE provider_id = 1 
AND filename = "test.txt" 
AND timestamp >= '2016-01-01 00:00:00+0200' AND ts <= '2016-08-13 23:59:00+0200' 

もっとinfo

関連する問題