はじめに

Verticaにデータロードを行うコマンドとして以下の2つが用意されています。
・INSERT
・COPY

本記事ではそれぞれのコマンドの基本的な使用方法をご案内します。

INSERTとCOPYの使い分け

データロード方式は、以下のように使い分けます。

INSERT:マスターテーブルに新規データを追加する等、少量のデータ追加を行う場合に使用
COPY :CSVファイル等を利用してデータを一括ロードする場合に使用

Verticaにおける大量データのロードについては、COPYによる一括ロードの方がパフォーマンスの面で優れます。
そのため特別な要件がない限り、Verticaでの大量データロードには、INSERTではなくCOPYの使用をご検討ください。

INSERT

構文

実行例

以下に基本的な実行例をいくつかご案内します。

補足

9.2以前のバージョンでは、VerticaはROSに加え規模の小さいデータロードに使用されるWOSというメモリ領域が存在しましたが、アーキテクチャを簡素化する目的で9.3以降では廃止されます。
9.3以降は、WOSを経由せず、常にROSに直接データロードされる仕様となりました。

COPY

構文

オプション

ロード対象ファイルのフォーマット等に対応するため、COPYコマンドには豊富なオプションが用意されています。
その中から、よく使用するものを一部ご紹介します。
パラメータ名説明デフォルト値
(未指定時の動作)
DELIMITER区切り文字を指定します。|(パイプ)
ENCLOSED BY囲み文字を指定します。なし
ENFORCELENGTHロードするデータが列幅を超過(桁あふれ)した場合、その行のロードをスキップします。桁あふれした部分を切り捨ててロード
ABORT ON ERRORエラーレコードを検出した時点でロード処理を中止し、処理全体をロールバックエラーレコードはスキップして処理

実行例

前述したオプションの紹介も兼ね、以下に実行例をご案内します。

オプションが必要ない場合

区切り文字を指定する場合

囲み文字を指定する場合

データ分散について

複数ノード構成のVerticaでは、大規模なテーブル(プロジェクション)のデータは各ノードに分散して保持します。
データロード処理(COPY、INSERT)を実行した際、Verticaはデータの分散配置を自動的に行います。
そのため、ユーザー側でデータの分散方式等について意識する必要はありません。

以下に分散配置のイメージ図を記載します。


※Verticaは、セグメントキーを設定してデータ分散を行います。
上記図の例では、店舗ID列がセグメントキーに設定されています。
※全ノードに複製(レプリケーション化)されるテーブルは、上記のようなデータ分散処理は行われません。

参考情報

INSERT
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/SQLReferenceManual/Statements/INSERT.htm

COPY
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/SQLReferenceManual/Statements/COPY/COPY.htm

検証バージョンについて

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

更新履歴

2020/04/27 本記事を公開