OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

外部テーブル用のCSVファイルを配置する場所

公開日:
更新日:
基本操作
#テーブル

はじめに

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の内容が異なっている様子を示しています。

$ vsql -w password -C -c 'select * from ext1;'
 col1 |                 col2
------+--------------------------------------
    1 | これはノード1にあるCSVファイルです。
    2 | bbb
    3 | ccc
(3 rows)

$ vsql -w password -C -c 'select * from ext1;'
 col1 |                 col2
------+--------------------------------------
    1 | aaa
    2 | これはノード2にあるCSVファイルです。
    3 | ccc
(3 rows)

$ vsql -w password -C c 'select * from ext1;'
 col1 |                 col2
------+--------------------------------------
    1 | aaa
    2 | bbb
    3 | これはノード3にあるCSVファイルです。
(3 rows)

以上です。

検証バージョンについて

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