目次
はじめに
フラッタンテーブルのリフレッシュ(非正規列に対するデータ更新)方法についてご紹介します。基本的なフラッタンテーブルの紹介や作成方法については以下の記事をご参照ください。
フラッタンテーブルとは
http://vertica-tech.ashisuto.co.jp/flattened-table1/
フラッタンテーブルへのリフレッシュ方法
フラッタンテーブルへのリフレッシュ方法は以下の3つがあります。①DEFAULT
②SET USING
③DEFAULT USING
②SET USING
③DEFAULT USING
リフレッシュ方法はフラッタンテーブルの作成(CREATE TABLE)時のデータ定義で指定します。
どのリフレッシュ方法を採用するかは、データの更新量やマスタテーブルの更新有無等を考慮し検討します。
各リフレッシュ方法の特徴について、以下で説明していきます。
DEFAULTの特徴
・フラッタンテーブルへデータがロードされると、自動的に非正規化列もデータが更新される・SET USINGと比較すると、非正規化列へのデータ更新が高速
・非正規化列のデータを更新するタイミングは制御できない
・マスタテーブルを更新した場合は、手動でフラッタンテーブルを更新する必要がある
SET USINGの特徴
・フラッタンテーブルへデータがロードされても、非正規列のデータは更新されない・REFRESH_COLUMNS関数により任意のタイミングで非正規化列のデータを更新できる
・DEFAULTと比較すると、非正規化列へのデータ更新が遅くなる
・マスタテーブルを更新した場合、REFRESH_COLUMNS関数により自動で非正規化列のデータが更新される
DEFAULT USINGの特徴
・DEFAULTとSET USINGの組み合わせ方式・フラッタンテーブルへデータがロードされると、自動的に非正規化列もデータが更新される
・REFRESH_COLUMNS関数により任意のタイミングで非正規化列のデータを更新できる
REFRESH_COLUMNS関数
SET USINGもしくはDEFAULT USINGにて構成された非正規化列のデータはREFRESH_COLUMNS関数を使って手動することができます。構文
REFRESH_COLUMNS ( ‘table‑list’, ‘[column‑list]’
[, ‘[refresh‑mode ]’ [, min‑partition‑key, max‑partition‑key] ])
[, ‘[refresh‑mode ]’ [, min‑partition‑key, max‑partition‑key] ])
パラメータ | 説明 |
---|---|
table‑list | リフレッシュ対象のテーブルを指定します。 |
column‑list | リフレッシュ対象の列名を指定します。 |
refresh‑mode | リフレッシュの方式を指定します。 UPDATE: ・元の行を削除済みとしてマークし、新しい行に置き換える(DeleteVectorが生成される) ・明示的なCOMMITが必要(トランザクションを管理したい場合) ・一般的に、データ変更の行が少ない場合に使用する REBUILD: ・指定した列の全てのデータを置き換える ・暗黙的にCOMMITされる ・一般的に、データ変更の行が多い場合に使用する デフォルトはUPDATEで実行されます。 複数テーブルを一度にリフレッシュする場合は、REBUILDモードを指定する必要があります。 |
min‑partition‑key max‑partition‑key | リフレッシュ対象のパーティションを指定します。 特定のパーティションのデータが更新された際に利用することで、REBUILD時のオーバーヘッドを最小限にすることができます。 ※注意事項 ・REBUILDモード指定時のみこのオプションを使用することができます ・このオプションは、更新するテーブルを1つだけ指定できます。 ・テーブルは、指定された列でパーティション分割する必要があります。 |
実行例
以下を条件として、REFRESH_COLUMNS関数を実行します。・対象テーブル:ssbm.lineorder_p
・対象パーティション:「199801」から「199808」
・リフレッシュ対象の非正規化列:lo_region列およびlo_category列
・リフレッシュのモード:REBUILD
1 2 3 4 5 6 7 8 9 10 |
dbadmin=> SELECT REFRESH_COLUMNS( dbadmin(> 'ssbm.lineorder_p', dbadmin(> 'lo_region,lo_category', dbadmin(> 'REBUILD', dbadmin(> '199801', '199808' dbadmin(> ); REFRESH_COLUMNS --------------------------- refresh_columns completed (1 row) |
参考情報
フラッタンテーブルとはhttp://vertica-tech.ashisuto.co.jp/flattened-table1/
フラッタンテーブルの検索性能(Vertica 8.1新機能)
http://vertica-tech.ashisuto.co.jp/flattened-table-query/
検証バージョンについて
この記事の内容はVertica 9.2で確認しています。更新履歴
2020/1/10 本記事を公開- 投稿タグ
- フラッタンテーブル, Flattened Table, リフレッシュ, Reflesh