はじめに

Verticaには、データベース上にテーブルとして存在しているかのようにCSVファイルを外部テーブルとして利用する機能があります。

外部テーブル機能を利用すると、CSVファイルとデータベース内のテーブルのデータを結合して結果を取得するなど、通常のSQLと同様の処理を行うことができます。また、ライセンス対象となるデータサイズ外として使えるというメリットもあります。


利用手順

外部テーブルとして利用するためには以下の手順で行います。

1.CSVファイルを任意のディレクトリに配置、権限を付与する

はじめに対象のCSVファイルを配置し、権限を付与します。



2.外部テーブル用のテーブルを作成する

外部テーブル作成の基本的な構文は以下の通りです。
CREATE EXTERNAL TABLE [schema.]table-name AS COPY
( { column-as-expression | column } )
FROM ‘pathToData’ ‘option’


実行例は以下のとおりです。


上記2ステップを踏まえることで、任意のSQLを実行してCSVファイルのデータを読み込むことができます。
また、作成した外部テーブルは通常のテーブルと同様に定義情報を確認できます。
外部テーブルの場合には、TABLESシステムテーブルの「TABLE_DEFINITION」列にCOPY句が出力されます。



SQL実行例

SQLの実行例を以下に記載します。



通常のテーブルに対する操作と比べるとパフォーマンスは劣りますが、同様の操作を行うことができることをご理解いただけたかと思います。



制限事項や注意点

外部テーブル機能はCSVファイルを読み込んで処理を実行するため、Vertica本来の高速処理の恩恵を受けることができません。また、以下の様な制限事項や注意事項がある点をご確認ください。

ファイルのアクセス権を付与する

OS上に存在するファイルのため、適切なアクセス権を付与しておく必要があります。

更新処理ができない

外部ファイルとして存在するため、テーブルに対してINSERT / UPDATE / DELETE / TRUNCATEを行うことはできません。

プロジェクションを作成できない

外部テーブルに対してプロジェクションを作成することはできません。

ファイルアクセスに伴うI/O

毎回ファイルへのアクセスが発生すること、キャッシュも効かないため頻繁に参照する必要があるデータ、特に件数の多いファイルの読み込みには向きません。



参考情報

【マニュアル】
CREATE EXTERNAL TABLE AS COPY
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/SQLReferenceManual/Statements/CREATEEXTERNALTABLEASCOPY.htm


検証バージョンについて

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