の列値を更新する方法はありますスコアでソートされた日。カサンドラ私はカサンドラのテーブルを持っているテーブル全体
問題は、ユーザーが自分の名前を変更したとき(今日)に、過去数日間クエリを実行する必要があるときに、レポートに名前の古いバージョンが表示されます。
テーブルを1日ごとに分割する必要があるため、列user_nameをSTATICに変更すると機能しません。
これを解決する方法はありますか? ありがとうございます。
の列値を更新する方法はありますスコアでソートされた日。カサンドラ私はカサンドラのテーブルを持っているテーブル全体
問題は、ユーザーが自分の名前を変更したとき(今日)に、過去数日間クエリを実行する必要があるときに、レポートに名前の古いバージョンが表示されます。
テーブルを1日ごとに分割する必要があるため、列user_nameをSTATICに変更すると機能しません。
これを解決する方法はありますか? ありがとうございます。
あなたはUSER_NAMEが更新された場合は、あなたがそのUSER_NAMEのすべてのコピーを更新する必要があり、高速アクセスのためのuser_nameを非正規化しておりますので、あなたの表から
を任意のデータを取得したい場合は、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
テーブルからそのユーザのすべてのレコードを選択する必要があるとベーステーブル
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
このアプローチは私の心を越え、私は最初のテーブルの更新やクライアント側でのこれらの2つのテーブルの結合を行う方がよいでしょう。どう思いますか? –
@JelenaLazarevic更新された回答を確認する –
データを取得する方法を知っていますが、同じユーザー(同じID)がそのnaを変更したときに過去の(複数のパーティション)のすべてのuser_namesを更新する方法をテーブルにモデル化する方法がありますmesと挿入する必要があります。 –