はじめに
Verticaの強みは複雑なチューニングを必要とせず、シンプルな運用で高速なパフォーマンスを実現できるという点にあります。
例えば、あるビル空調サービス会社では、データ量や分析処理量の大幅な増加に伴い、大量データの処理性能に大きな課題を抱えていましたが、Verticaを採用することで従来システムの10倍の処理効率を実現することに成功しました。また同社では、DWH(Data Warehouse)用途だけでなく、空調の各センサーデータをニア・リアルタイムにロードし、空調システムの不具合をリアルタイムで予測するIoT基盤としてもVerticaを利用しています。
このようにVerticaは企業データのDWHとしての利用はもちろんのこと、機械学習アルゴリズムの実装や半構造化データをそのまま取り込むFlex Table機能等により、大量データの分析プラットフォームとしても普及しています。
本稿では、通常のデータベースから一歩進んだ、Verticaのビッグデータ分析機能をご紹介します(図1)。
Verticaの基礎を知りたい方は、アシストが開設している「Vertica技術情報サイト」の以下の記事をご参照ください。
本記事では次の機能について、ご紹介します。
- Flex Table(半構造化データ活用)
- Hadoop/Spark連携
- Kafka連携(リアルタイムデータ連携)
- SQL Analytics(ログ分析用のSQL拡張関数)
- Machine Learning(機械学習)
半構造化データをデータベースへ取り込む
Apache Hadoop(以降、Hadoop)やApache Spark(以降、Spark)に格納されるログデータや、IoTデバイスなどからのセンサーデータは、半構造化データです。通常これらのデータをデータベースに取り込むためには事前にCSVなどの構造化データに変換する必要がありますが、Verticaでは半構造化データをそのまま取り込むFlex Tableという便利な機能が提供されています。この機能を利用することにより、前処理無くVerticaに直接データロードできるため運用や開発の負荷を大幅に軽減することができます。
使い方はとても簡単で、Flex Tableを作成し、COPYコマンドでJSONやAVRO、CEFといった半構造化データをロードするだけです(図2)。
たとえばJSON形式のファイルの場合、key-value型でデータが格納されているため、Verticaはキーを列名、バリューをテーブルデータとして自動的に認識し、データをロードします。この時、事前にテーブルの列名などの定義は不要です。また、データ型は文字列型だけでなく、BOOLEAN、INTEGER、FLOAT、TIMESTAMP、DATEなどにも対応しています。データをロードしたあとは、通常のSQLでデータ操作を行うことが可能です。Flex Tableの基本的な利用方法については、「Vertica技術情報サイト」の以下の記事をご参照ください。
Hadoopと連携し、オンライン系分析処理を高速化する
ビッグデータ基盤というと、Hadoopを思い浮かべる方が多いのではないでしょうか。実際にHadoopを大量データのバッチ処理やデータレイク(大量データの置場)として活用されている方も多いと思います。しかし、Hadoopはオンライン系の高速分析処理に課題があるため、HadoopのフロントにVerticaを配置し、高速分析処理はVerticaに任せることでこの課題を払拭することができます。
HadoopとVerticaの連携には以下の3つの方法があります。
① HDFS上のデータをVerticaにロードする
② HDFS上のデータを外部表としてアクセスする
③ Hadoopのテーブル定義を利用し、Hiveを通じてHDFS上のデータにアクセスする
これらの3つを図解したものが(図3)です。
最もシンプルで高速なパフォーマンスを得られるのは①の方法です。(図4)のように、データロード用のコマンド(COPYコマンド)でHDFS上のデータをVertica内に簡単に取り込むことができます。Hadoopで事前バッチ処理したデータをVerticaに取り込んで使うような場合に非常に便利です。
図4:Hadoop上のデータをVerticaにインポート
COPY testTable SOURCE dfs(url='http://hadoop:50070/webhdfs/v1/test.txt',username='hadoopUser');
一方、②と③の方法では、Verticaに実際のデータをロードするのではなく、Verticaを介してHDFS上のデータを参照します。Verticaにデータを取り込む①の方法と比べると処理性能は劣りますが、Verticaにアクセスするのと同様にSQLで簡単にHDFS上のデータにアクセスできるメリットがあります。
また、Verticaはデータベースに取り込むデータ量に応じてライセンス費用が決まりますが、②と③の方法はライセンスの課金対象にならないというコスト的なメリットもあります。