はじめに

本記事では、Verticaデータベースに画像などのバイナリデータを扱うする方法をご紹介します。

バイナリデータを扱う方法

2通りの方法があります。

方法1.バイナリデータのファイルパスをテーブルに格納する方法

ファイル名とファイルパスをテーブル(文字列のデータ型を使用)に保存し、実際のバイナリデータはVertica以外のファイルシステムに格納します。
この方法を使用してアプリケーションからVerticaデータベースを参照して画像を表示させたい場合、以下のように処理します。

 (1) アプリケーションからVerticaのテーブルに格納されているファイルパスを取得
 (2) 上記(1)で取得したファイルパスを元に、アプリケーションから保存されているバイナリデータを読み込む

方法2.バイナリデータをエンコードしてテーブルに格納する方法

事前にバイナリデータをエンコードし、そのエンコードしたデータをテーブルに格納します。

使用するデータ型

バイナリデータを格納するためには、以下のどちらかのデータ型を使用します。

データ型最大バイト数
VARBINARY65,000
LONG VARBINARY32,000,000


なお、LONG VARBINARY型は、結合や集計処理できないといった制限があるため、可能な限りVARBINARY型を使用することを推奨します。
詳細は以下のマニュアルをご参照ください。

https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/SQLReferenceManual/DataTypes/LongDataTypes.htm


COPYコマンドの実行例

以下のCOPYコマンドの実行例は、16進数にエンコードしたバイナリデータのファイル「/tmp/hex_image1.dat」をロードしています。
また、フォーマットの指定として「FORMAT ‘hex’」をVARBINARY型のカラムに指定しています。


格納したデータを参照する実行例

16進数にエンコードしたバイナリデータを参照する場合は、TO_HEX関数を使ってVARBINARY型のカラムを検索します。

※TO_HEX関数は、各バイナリ値を2つの16進数値で返します。
本記事の実行例ではcol列をVARBINARY(65000)で作成しており、TO_HEX関数では130000バイトの値が返却され内部的に桁溢れが発生するため、LONG VARBINARY型への変換も加えています。


検証バージョンについて

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

更新履歴

2019/11/01 本記事を公開