はじめに

Verticaでは、CSVファイルを外部テーブルとして利用する事ができます。
当記事では、複数台ノードで構成されたVerticaクラスタ構成で外部テーブル用に使用するCSVファイルを配置する場所についての注意点を紹介します。

外部テーブルの概要

Verticaで外部テーブルとは何か?については、以下の記事をご参照ください。
CSVファイルを外部テーブルとして利用する方法

外部テーブルの概要を簡単におさらいします。
特定のCSVファイルをデータベース内の通常のテーブルと同様にひとつのテーブルとして参照できるようにするのが外部テーブルです。
SQLで外部テーブルをSELECT処理をすると、CSVファイルを参照します。



Verticaクラスタがシングルノード構成の場合は、配置場所についての考慮は必要ありません。
しかし、複数台ノードで構成された場合には注意が必要です。

注意点

外部テーブル用のCSVファイルは全ノードから参照できる必要があります。
例えば、CSVファイルをある特定のノードのローカルディスクに配置してしまうと、そのノードがエグゼキュータとして動作する場合は問題なく処理をする事ができます。しかし、CSVファイルを持たないノードがエグゼキュータになった場合や、CSVファイルを持っているノードが障害などで停止した場合、CSVファイルはどのノードからも参照できなくなってしまいます。

 

そのため、CSVファイルを配置する場所は、全ノードから参照できるNFSサーバなどの共有可能な領域上に配置する事が推奨されています。



NFSサーバがすぐに用意できない場合は、各ノードのローカルディスクの同一パス上に同じファイル名のCSVファイルのコピーを配置する事で対処する事も可能です。



しかし、その場合はCSVファイルの内容を更新した際には、全ノードにコピーする事を忘れないようにしてください。
CSVファイルの内容がノードによって異なる場合、SQL結果も異なってしまいます。

(例)各ノードにあるCSVファイルの内容が異なった状態で外部テーブルを参照すると、以下のようにSQLの実行結果が異なってしまいます。
以下の例では、ロードバランス機能のラウンドロビンによって、エグゼキュータがノード1→ノード2→ノード3の順番に分散され、それによって各ノード上のCSVの内容が異なっている様子を示しています。


以上です。

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。