5.2.2 ローストア表とカラムストア表の選択基準
ここでは,表をローストア表として定義するか,カラムストア表として定義するかの選択基準について説明します。
- 〈この項の構成〉
(1) カラムストア表の制限事項
カラムストア表には,次に示す運用上の制限事項があります。これらの制限事項によって運用上の問題が発生する場合は,表をローストア表として定義してください。
-
カラムストア表には,テキストインデクスを定義できません。
-
カラムストア表は,アーカイブマルチチャンク表として定義できません。
-
カラムストア表は,FIX表にはできません。
(2) 表をローストア表として定義するか,またはカラムストア表として定義するかの選択基準
表をローストア表として定義するか,またはカラムストア表として定義するかは,次の表に示す選択基準を基に決定してください。
定義する表に対してどのような検索をするか,または定義する表の特徴 |
適している表の種類 |
|
---|---|---|
定義する表に対して行われる検索 |
次のような検索が実行される表の場合
|
ローストア表 |
次のような検索が実行される表の場合
|
カラムストア表 |
|
定義する表に対して行われる操作 |
|
ローストア表 |
定義する表のデータ容量 |
|
ローストア表 |
|
カラムストア表 |
|
データウェアハウスでの使い方 |
|
ローストア表 |
|
カラムストア表 |
|
表に定義する列のデータ型 |
|
カラムストア表 |
- 注※
-
更新行のカラム化機能を有効にすると,カラムストア表の検索性能の低下を防ぐことができます。更新行のカラム化機能については,「11.18 更新行のカラム化機能の運用(カラムストア表の検索性能の維持)」を参照してください。
- 重要
-
カラムストア表に適した表は,マルチチャンク表に適するケースが多いため,カラムストア表かつマルチチャンク表として表を定義することを推奨します。表をマルチチャンク表として定義する際の考慮点については,「5.2.4 マルチチャンク表を定義する場合の考慮点」を参照してください。
表をローストア表として定義する場合は,CREATE TABLE文のSTORAGE FORMATオプションにROWを指定するか,またはSTORAGE FORMATオプションの指定を省略してください。表をカラムストア表として定義する場合は,CREATE TABLE文のSTORAGE FORMATオプションにCOLUMNを指定してください。
CREATE TABLE文については,マニュアルHADB SQLリファレンスの定義系SQLを参照してください。
(3) カラムストア表の検索時に使用されるB-treeインデクス
カラムストア表に定義したB-treeインデクスが,カラムストア表の検索時に使用されるケースは限定されています。カラムストア表で,B-treeインデクスを使用する代表的な例を次に示します。次のような絞り込みが有効な場合にだけ,カラムストア表にB-treeインデクスを定義することを推奨します。
-
SQL文の実行時に,インデクス指定で使用するインデクスを指定する場合
-
集合関数MINまたはMAXを指定して,最小値や最大値を求める場合
-
探索条件を指定して,UPDATE文またはDELETE文を実行する場合
特定の年や月のデータにアクセスするような場合は,レンジインデクスを定義して検索範囲を絞り込むことを推奨します。
カラムストア表の検索時に使用されるB-treeインデクスの規則については,マニュアルHADB AP開発ガイドのSQL文の実行時に使用されるB-treeインデクスおよびテキストインデクスを参照してください。
- メモ
-
B-treeインデクスを定義したカラムストア表には,更新行のカラム化機能は適用されません。更新行のカラム化機能については,「11.18 更新行のカラム化機能の運用(カラムストア表の検索性能の維持)」を参照してください。
(4) カラムストア表の列データの圧縮方式
カラムストア表にデータをインポートする際,各列のデータは,次の表に示すどれかの方式で圧縮されます。そのため,ローストア表に比べてデータ容量が小さくなります。データインポートの実行時に,インポートするデータを基に,HADBサーバが次の表に示す圧縮方式のどれかを自動的に選択します。
項番 |
圧縮方式 |
説明 |
---|---|---|
1 |
無圧縮(NONE) |
データは圧縮されないで格納されます。 |
2 |
ランレングス圧縮(RUNLENGTH) |
同じ値のデータが連続で出現した場合に,連続で出現したデータと繰り返し回数の組でデータを保存します。同じ値のデータが繰り返し連続して出現するような場合に有効な圧縮方式です。 圧縮の例:AAAABB → 4A2B |
3 |
差分圧縮(DELTA) |
先頭のデータの値と隣り合うデータの差分値とで,データを保存します。ある特定の値の周辺にデータが集中している場合に有効な圧縮方式です。 圧縮の例:100,99,101,103 → 100,-1,2,2 |
4 |
差分ランレングス圧縮(DELTA_RUNLENGTH) |
対象のデータを差分圧縮したあとに,差分値のデータをランレングス圧縮します。一定の値でインクリメントするデータ(等差数列をなすデータ)の場合に有効な圧縮方式です。伝票番号などのように,番号が1つずつ加算されていくようなデータを圧縮する際に有効です。 |
5 |
辞書圧縮(DICTIONARY) |
よく出現するデータを辞書に格納しておき,データ部には辞書へのインデクス(添え字)だけを格納します。カーディナリティ(データの種類)が少ない文字列データなどで有効な圧縮方式です。 なお,辞書のサイズは最大16キロバイトです。 |
圧縮の方法には,上記の表に示すようにデータの重複を排除する方式と,データ間の差分を取る方式があります。そのため,128バイト以上の文字列データや,128バイト以上のバイナリデータなどのように,データの重複があまりない場合や,データ間の差分が少ない場合は,圧縮効果が少ないことがあります。
- メモ
-
-
データインポートの終了時に,HADBサーバが選択した圧縮方式がメッセージに出力されます。
-
データインポート時に圧縮方式が決定されます。そのため,同じ表へのデータインポートの場合に,インポートするデータのパターンが異なると,同じ列であっても圧縮方式が異なることがあります。
-
HADBサーバによる圧縮方式の選択は,データインポート時にデータを格納するスレッドごとに行われます。
-
HADBサーバは,格納する列データの先頭16メガバイト分の列データに対して圧縮率を計算し,最も圧縮率がよい圧縮方式を選択します。圧縮率が悪く,圧縮後のデータサイズが,無圧縮のデータサイズ以上になった場合は,無圧縮が選択されます。
-
なお,次に示す処理の場合に,カラムストア表の列ごとに圧縮方式を指定することもできます。この場合,常に指定した圧縮方式で列データが圧縮されます。
-
CREATE TABLE文でカラムストア表を定義する
-
ALTER TABLE文でカラムストア表に列を追加する
- ■UPDATE文またはDELETE文を実行するカラムストア表と圧縮方式の関係
-
更新を前提としたカラムストア表の場合,差分圧縮以外の圧縮方式を指定することを推奨※1します。HADBによる圧縮方式の自動選択※2をしないようにしてください。
- [理由]
-
カラムストア形式のデータに対して,UPDATE文またはDELETE文を実行した場合,HADBは対象の行データを全列分伸長します。差分圧縮(DELTA)の伸長の際,先頭のデータから伸長対象のデータまでのすべての差分値を計算するため,ほかの圧縮方式よりも列の伸長処理に時間が掛かります。そのため,カラムストア表に差分圧縮(DELTA)が適用された列があると,UPDATE文またはDELETE文の実行時間が長くなります。
- 注※1
-
CREATE TABLE文の圧縮方式指定(COMPRESSION TYPE)で,差分圧縮(DELTA)および圧縮方式の自動選択(AUTO)以外を指定することを推奨します。
- 注※2
-
圧縮方式指定を省略した場合,または圧縮方式指定にAUTOを指定した場合,HADBが圧縮方式を自動選択します。その結果,圧縮方式に差分圧縮(DELTA)が適用される可能性があります。
(5) ローストア表とカラムストア表の使い分けの例
ローストア表とカラムストア表の使い分けの例を,次に示す運用例を基に説明します。
- 運用例
-
A社では,各営業所からの売上データを集めた売上データ分析用のデータウェアハウスを構築しようとしている。売上データの分析軸として,日付,営業所,商品,顧客を考えている。このデータウェアハウスを構築するために,スキーマモデルとして,次の図に示すスタースキーマで構築することに決定した。
図5‒2 A社の売上データ分析用のデータウェアハウスのスキーマモデル
上記のスタースキーマの場合,SALES表がファクト表になります。また,PRODUCTS表,CUSTOMERS表,OFFICES表,およびCALENDAR表が,ディメンジョン表になります。各表には,次のデータが格納されています。
-
SALES表
SALES表には,売れた商品の商品ID,商品個数,単価,顧客ID,売上を計上した営業所のID,売上発生日などの売上データが,過去10年分格納されています。1日当たりおよそ10万件のデータが格納されるため,合計で3億6千万件くらいの売上データが格納されています。
売上データ中の商品ID,顧客ID,営業所ID,売上発生日には,それぞれPRODUCTS表,CUSTOMERS表,OFFICES表,CALENDAR表の主キーに当たるデータ(外部キー)が格納されています。
-
PRODUCTS表
PRODUCTS表には,A社が扱っている商品のデータ(商品ID,名称,カテゴリなど)が格納されています。
-
CUSTOMERS表
CUSTOMERS表には,A社の顧客のデータ(顧客ID,顧客名,顧客の業種,顧客の住所など)が格納されています。
-
OFFICES表
OFFICES表には,A社の営業所のデータ(営業所ID,営業所名,営業所の所在地など)が格納されています。
-
CALENDAR表
CALENDAR表には,日時に関するディメンジョンデータ(日付,月,四半期,年)が格納されています。
上記のようなスキーマモデルで,月次の売上データの集計,顧客ごとの売上分析,および営業ごとの売上分析などを行った場合,次のような検索が頻繁に実行されると予想されます。
-
SALES表に対する全件検索
-
SALES表中の,ある一定期間のデータの検索(今月のデータや前月のデータの検索など)
そのため,SALES表は,カラムストア表として定義します。また,売上発生日に対応する列にレンジインデクスを定義します。
PRODUCTS表,CUSTOMERS表,OFFICES表,およびCALENDAR表は,SALES表のデータにある外部キーによるジョインで使用されるケースが多くなると予想されます。これらの表は,データ件数が比較的多くないため,ローストア表として定義します。また,主キーに対応する列にB-treeインデクスを定義します。