このページでは、列を手動で追加および削除して、列エンジンの列ストアのコンテンツを管理する方法について説明します。
ワークロードに基づいて、列ストアに列を手動で追加したり、テーブルまたはマテリアライズド ビューの一部またはすべての列を列ストアから削除したりできます。クエリ評価では、保存されている列形式のデータが自動的に使用され、クエリに回答します。
列ストアに追加するテーブル、マテリアライズド ビュー、列を選択する場合は、列ストアのサイズとワークロードの形状の両方を考慮してください。選択に適した候補としては、頻繁にスキャンされる大規模なテーブルやビューがあります。これらのテーブルまたはビュー内で、OLAP ワークロードで使用されている大規模で一意でないインデックスを特定します。これらのインデックスの列を列ストアに追加し、インデックスを削除することで、プライマリ インスタンスでのメンテナンスに関連するパフォーマンス コストを排除できます。
カラム型エンジンの列ストアのコンテンツを管理するには、次のいずれかの方法を使用します。
テーブル、列、マテリアライズド ビューを列ストアに追加する際に使用できるデータ型とデータソースについては、列ストアに追加できるデータをご覧ください。
データベース フラグを更新して列ストア コンテンツを管理する
google_columnar_engine.relations
データベース フラグを更新することで、列ストア コンテンツを手動で管理できます。このフラグには、列ストアのすべてのデータソースを指定する単一の値があります。再起動中、このフラグで指定された列が列ストアに自動的に入力されます。
このフラグは、自動列化と組み合わせて使用できます。google_columnar_engine.relations
フラグで指定した列を入力した後に、列エンジンで使用可能なメモリがある場合、自動列化により、必要に応じて列ストアに列が追加されます。
フラグを使用して列を追加する
列ストアに列を追加するには、インスタンスの google_columnar_engine.relations
フラグを定義します。値は、カンマ区切りのアイテムのリストに設定します。各アイテムには、特定のテーブルから含める列のリストを指定します。形式は次のとおりです。
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)
次のように置き換えます。
DATABASE_NAME: 列ストアに追加する列を含むデータベース。
SCHEMA_NAME: 列ストアに追加するテーブルまたはマテリアライズド ビューを識別するスキーマ(例:
public
)。TABLE_NAME: 列ストアに追加する列を含むテーブルまたはマテリアライズド ビュー。
COLUMN_LIST: 列ストアに追加する列のカンマ区切りリスト。
1 つのテーブルまたは 1 つのマテリアライズド ビューのすべての列を追加するには、列リストを省略します。
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME
ALTER SYSTEM SET google_columnar_engine.relations='DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_1,COLUMN_2)';
フラグを使用して列を削除する
列ストアから列を削除するには、フラグを使用して列を追加するで説明されている google_columnar_engine.relations
フラグに新しい値を設定し、削除する列を除外します。
列ストアからすべての列を削除するには、インスタンスから google_columnar_engine.relations
フラグを設定解除します。
インスタンスにデータベース フラグを設定する方法については、インスタンスのデータベース フラグを構成するをご覧ください。
SQL 関数を使用して列ストア コンテンツを管理する
列ストア コンテンツは、SQL 関数を使用して手動で管理できます。
SQL 関数を使用して列を追加する
google_columnar_engine_add
SQL 関数を実行して、列ストアに列を追加します。
この方法では、指定した列が列ストアに追加され、接続されたノードの列のみが管理されます。新しい列は、インスタンスの再起動後もストア内に保持されません。
この方法では、google_columnar_engine.relations
データベース フラグは変更されません。自動列化では、この SQL 関数によって追加された列は考慮されません。
psql クライアント
SELECT google_columnar_engine_add( relation => 'TABLE_NAME', columns => 'COLUMN_LIST' );
-
次のように置き換えます。
- TABLE_NAME: テーブルまたはマテリアライズド ビューの名前を含む文字列。テーブルまたはビューが
public
以外のスキーマにある場合は、スキーマ名、ドット、テーブルまたはビューの名前を指定します(例:'myschema.mytable'
)。 - COLUMN_LIST: 追加する列の名前をカンマ区切りで指定した文字列(大文字と小文字が区別されます)。テーブルまたはマテリアライズド ビューのすべての列を列ストアに追加する場合は、このパラメータを省略します。
SQL 関数を使用して列を削除する
次のように google_columnar_engine_drop
SQL 関数を実行します。
psql クライアント
SELECT google_columnar_engine_drop( relation => 'TABLE_NAME', columns => 'COLUMN_LIST' );
- TABLE_NAME: テーブルまたはマテリアライズド ビューの名前を含む文字列。テーブルまたはビューが
public
以外のスキーマにある場合は、スキーマ名、ドット、テーブルまたはビューの名前を指定します(例:'myschema.mytable'
)。 - COLUMN_LIST: 追加する列の名前をカンマ区切りで指定した文字列(大文字と小文字が区別されます)。テーブルまたはマテリアライズド ビューのすべての列を列ストアに追加する場合は、このパラメータを省略します。
google_columnar_engine_drop
関数を使用して、google_columnar_engine.relations
データベース フラグを編集して追加された列を削除できます。ただし、そうすると、インスタンスの再起動時にこれらの列が列ストアに再び追加されます。