2017-11-23 17 views
1

の列値を更新する方法はありますスコアでソートされた日。カサンドラ私はカサンドラのテーブルを持っているテーブル全体

問題は、ユーザーが自分の名前を変更したとき(今日)に、過去数日間クエリを実行する必要があるときに、レポートに名前の古いバージョンが表示されます。

テーブルを1日ごとに分割する必要があるため、列user_nameをSTATICに変更すると機能しません。

これを解決する方法はありますか? ありがとうございます。

答えて

-1

あなたはUSER_NAMEが更新された場合は、あなたがそのUSER_NAMEのすべてのコピーを更新する必要があり、高速アクセスのためのuser_nameを非正規化しておりますので、あなたの表から

+0

データを取得する方法を知っていますが、同じユーザー(同じID)がそのnaを変更したときに過去の(複数のパーティション)のすべてのuser_namesを更新する方法をテーブルにモデル化する方法がありますmesと挿入する必要があります。 –

0

を任意のデータを取得したい場合は、SELECTコマンドを使用することができます。あなたが別のテーブルを維持する必要が

すべてのユーザーが自分の名前を更新するたび

CREATE TABLE network_by_user_id ( 
    user_id int, 
    network_id int, 
    date date, 
    score float, 
    id uuid, 
    PRIMARY KEY (user_id, network_id, date, score, id) 
); 

はだから今、あなたがnetwork_by_user_idテーブルからそのユーザのすべてのレコードを選択する必要があるとベーステーブル

の各レコード更新user_nameの
update test set user_name = 'New Name' where network_id = ? and date = ? and score = ? and id = ? 

ユーザーのレコードの数は、しっかりと更新のコスト、その後、時間の経過とともに増加した場合user_nameも時間とともに急速に増加します。

別のアプローチは、以下のようなベーステーブルを正規化することである:ベーステーブルで検出された各user_idに対して

CREATE TABLE test ( 
    network_id int, 
    date date, 
    score float, 
    id uuid, 
    user_id int, 
    PRIMARY KEY ((network_id, date), score, id) 
); 


CREATE TABLE users ( 
    user_id int, 
    user_name text, 
    PRIMARY KEY (user_id) 
); 

あなたはuser_name

の詳細情報を取得するための非同期実行とusersに問い合わせることができますexecuteAsync

+0

このアプローチは私の心を越え、私は最初のテーブルの更新やクライアント側でのこれらの2つのテーブルの結合を行う方がよいでしょう。どう思いますか? –

+0

@JelenaLazarevic更新された回答を確認する –

関連する問題