今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(パーティション)」からの出題です。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2019年7月31日
パーティショニングは、大きなテーブルを小さな複数のテーブルに分割することで、検索の効率化・高速化を図る手法です。検索対象のデータがテーブルが占めるディスク領域全体に拡がっていると、数多くのページを読み込む必要が生じますが、特定のパーティションに集中している場合は、読み込むページ数が大幅に削減されるなど、性能の向上が期待できます。
PostgreSQLのバージョン10からサポートされた宣言的パーティショニングでは、テーブルとパーティションの作成時に適切な宣言を行うだけで、データを適切なパーティションに格納することができる便利な方法です。親テーブルの作成時には、
CREATE TABLE parent(…) PARTITION BY …
のように、PARTITION BY句を指定し、どの列の値を基準にパーティション分割するのかを指定します。パーティションを作成するには
CREATE TABLE partition1 PARTITION OF parent FOR VALUES…
のように、親テーブルの名前の他に、そのパーティションに入れるべきデータの基準となる値をFOR VALUES句で指定し、これがINSERT文の実行時に格納先となるパーティションの自動的な決定と振り分けに使用されます。各パーティションは親テーブルの作成で指定したのと同じ列を持っており、個別に列を追加することはできません。
PostgreSQLでは以前からテーブルの継承(インヘリタンス)をサポートしており、継承元のテーブルparentに対するSELECT文の実行では、それを継承したテーブルpartition1…からもデータをSELECTするため、これをパーティショニング機能の実現に使うことができます。宣言的パーティショニングとは異なり、親テーブルの作成時には特別の指定はなく、普通のテーブルとして作成します。INSERT
INTO parent の実行でも、特別な仕掛けを作らなければそのまま parentテーブルに挿入されてしまいますので、これを各パーティションに自動的に振り分けたい場合には、例えば、parentテーブルにトリガーを設定し、そこでキー列の値を参照して適当なパーティションへのINSERTに変更するプログラムを作成する必要があります。効果的なパーティショニングとして機能させるため、各パーティションには制約やインデックスを追加するなどする必要がありますが、それでも個々のパーティションは(継承機能を使っていることを除けば)通常のテーブルですので、個別に列を追加することが可能です。
宣言的パーティショニングでも継承によるパーティショニングでも、データの格納先となるパーティションが自動的に作成されることはなく、必要なパーティションは事前に作成しておく必要があります。
従って、正解はB、C、Eです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.