2017-02-23 5 views
1

カサンドラのemail_subscriptionsテーブルにsubscribeという新しいブール型列を追加しました。私はそれがすべての行 'subscribeフィールドのためにfalseを返すことに気づいた。 カサンドラ:新しいブールフィールドのバックフィル

は、私は本当の subscribeフィールドを持つテーブル内のすべての行をデフォルトにたかったが、 this StackOverflow answerは言う:

はカサンドラにはデフォルト値はありません。

だから私の質問、どのように私は彼らの subscribeフィールドは trueに設定されているし、私の email_subscriptionsテーブル内のすべての行を設定するのですか?バッチ更新を使用してバックフィルを行う必要がありますか?

+0

正しく確認していますか? * false *の代わりに* null *を取得する必要があります。 – xmas79

答えて

3

これを行うには2通りの方法があります。

  • email_subscriptionsからすべてのレコードを選択し、subscribe = true値とともに挿入するプログラムを作成できます。

    それとも

  • フィールドの値をサブスクライブ選択し、値を確認するには、isNull()方法(列がnullの場合はtrueを返し、そうでない場合はfalse)とnullです。真復帰した場合、それはそれは購読意味nullであり、この値がまだ挿入されていない、あなたが購読=真

0

として扱うことができる唯一の方法は、あなたのテーブル全体をバック満たすことです。あなたのテーブルのサイズによっては、タイムアウトになるために、単純な

SELECT * FROM mytable; 

を使用して、テーブルを照会に問題がある可能性があります。 UPDATEステートメントではパーティションキーが必須なので、そのテーブルからパーティションキーを吐き出す方法を見つける必要があります。

これはTOKEN機能を使用するのに最適なシナリオです。あなたが宿題をしていて広すぎるパーティションを持っていないと仮定すると、すべてのデータセットをパーティションの範囲に分割してスキャンすることができます。どのくらいの範囲があなたのデータに依存しています。一般的な観点からは、以下を行う必要があります。

SELECT __partition_key_columns__ FROM mytable WHERE 
    TOKEN(__partition_key_columns__) >= min_range AND 
    TOKEN(__partition_key_columns__) < max_range; 

min_rangemax_rangeが W推測ウィンドウサイズの段階で(Murmur3を使用して、IIRC)から-2^63 2^64-1に行きます:

SELECT __partition_key_columns__ FROM mytable WHERE TOKEN(__partition_key_columns__) >= -2^63 AND TOKEN(__partition_key_columns__) < -2^63 + W; 
SELECT __partition_key_columns__ FROM mytable WHERE TOKEN(__partition_key_columns__) >= -2^63 + W AND TOKEN(__partition_key_columns__) < -2^63 + 2*W; 
... 

すべての範囲を2^64-1までカバーするまで。タイムアウトが発生した場合はWを小さくしてもう一度試してください。そうでない場合は、ウィンドウWを展開して処理を高速化します。すべてのパーティションを抽出して、各範囲の更新を発行することができます。

編集:This blog postは、このようなタスクの実行方法を正確に説明しています。

関連する問題