はじめに

フラッタンテーブルのリフレッシュ(非正規列に対するデータ更新)方法についてご紹介します。

基本的なフラッタンテーブルの紹介や作成方法については以下の記事をご参照ください。

フラッタンテーブルとは
http://vertica-tech.ashisuto.co.jp/flattened-table1/

フラッタンテーブルへのリフレッシュ方法

フラッタンテーブルへのリフレッシュ方法は以下の3つがあります。
①DEFAULT
②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] ])

パラメータ説明
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



参考情報

フラッタンテーブルとは
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 本記事を公開