OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

画像などのバイナリデータを扱う方法

公開日:
基本操作
#データ型
#COPY

はじめに

本記事では、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型のカラムに指定しています。

/*** テーブル定義 ***/
dbadmin=> \d image1
                                       List of Fields by Tables
 Schema | Table  | Column |       Type       | Size  | Default | Not Null | Primary Key | Foreign Key 
--------+--------+--------+------------------+-------+---------+----------+-------------+-------------
 public | image1 | col    | varbinary(65000) | 65000 |         | f        | f           | 

/*** COPYコマンドの実行例 ***/
dbadmin=> COPY image1 (col FORMAT 'hex') FROM '/tmp/hex_image1.dat';
 Rows Loaded 
-------------
           1
(1 row)

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

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

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

/*** 検索の実行例 ***/
dbadmin=> SELECT TO_HEX(col::long varbinary) FROM image1;
                       TO_HEX
----------------------------------------------------
 5089474e0a0d0a1a000<・・・中略・・・>004549444e42ae8260

検証バージョンについて

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

更新履歴

2019/11/01 本記事を公開