多田さんのセッションで方法について紹介があり、興味があったので調べてみました。パーティショニングはあまり詳しくないので方法として間違っているかもしれないですが、その点はあらかじめご了承ください。インデックスへのデータ追加Columnstoreインデックスが設定されているテーブルに対してはデータの追加の更新をすることができません。インデックスの作成という手順が必要になってきます。インデックスが設定されているテーブルは通常、集計やレポートのために使用する大容量のデータが格納されているものになるかと思います。データの更新が必要になった場合、夜間に上記のような作業をして、データのメンテナンスをするというケースが必要になることもあるかもしれないですね。インデックスが設定されているテーブルへデータを追加することが可能です。使用させていただき作成した疑似個人情報を使用してスイッチのテストをしてみたいと思います。このサービスではデータに特定の範囲の乱数を設定することが可能です。そこで、疑似個人情報を乱数を使用してハッシュパーティショニングをしてみます。1~5の乱数をハッシュとして設定しています。種類のテーブルを作成しています。これらのテーブルを以下の設定でパーティショニングしています。パーティショニングして各ファイルグループに格納しています。データをスイッチするファイルグループに格納しています。各パーティションのデータの格納状況を以下のクエリを実行して確認してみます。インデックスの構成です。データが分散されて格納されているのが確認できますね。テーブルにパーティションをスイッチすることで追加ができます。それでは以下のようにパーティションをスイッチしてみたいと思います。事前に必要となるパーティションは作成済みです。ファイルグループを使用したパーティションは存在していませんので、スキーマとファンクションを変更してワークテーブルがスイッチできる領域を作成します。スイッチするためには同じファイルグループを使用している必要がありますので。パーティションが以下のように変更されました。パーティションのスキーマが変更され、ファイルグループが追加されます。先ほど使用したクエリで、パーティションの状態を確認してみます。して境界値を設定します。(5)このクエリを実行しようとすると以下のエラーとなります。青い色がついているのがデータが格納されているパーティションになります。インデックスがない場合は、上述のクエリでパーティションの設定を変更することができます。インデックスを使用する場合、常に空きを一つ確保しておく必要があるようですね。値を格納する前の状態で以下のパーティション構成を設定しておく必要があるようです。作成しておく必要があります。作成してからスイッチをすることになりそうです。(6)この状態であれば先ほどのエラーは発生しません。インデックスが作成されているテーブルにデータを追加することが可能です。インデックスを作成しておく必要があります。そのため、スイッチの直前には更新系のテーブルにもデータの変更はかけられなくなります。インデックスの状態だけでなく、スイッチ元のテーブルに対象のパーティションのデータのみが含まれているという保証をする必要があります。データの保障に関しては以下のようなクエリを実行し、スイッチ元のテーブルのデータには特定のデータのみが含まれることを保証します。5)ここまで準備ができているとスイッチすることが可能です。インデックスが設定されている状態でデータの追加ができていることが確認できますね。この手のデータマネージメントは本当の奥が深いですね。チューニング等をメインにしていますが、本ブログで情報発信している内容に関することでしたら対応できます。お仕事のご相談がありましたらTwitterfacebookやブログのコメントでご連絡いただけると幸いです。ブログにコメント頂いた内容は私が承認しない限り表示されません。受賞させていただきました。本ブログの内容は個人的に検証したものとなり、検証結果を含め記載している内容を保証するものではありません。体験記の連載をさせていただきました。最後まで飲み切れず...。