Verticaは、高い検索パフォーマンスを実現する「DWH/ビッグデータ活用」に特化した列指向(カラムナー)データベースです。
※Verticaの基礎を知りたい方は、アシスト Vertica技術情報サイトの「Verticaとは」をご確認ください。
2015年末にVerticaの最新バージョンである、Vertica 7.2がリリースされました。Vertica 7.2では、IoTデータなどのデータストリーミング分析のためにApache Kafkaとの連携が強化されたり、Hive等Hadoopで使われることが多いORCファイル上で直接クエリが実行できるようになったりと、これまで以上にIoTデータやビッグデータ分析の高速化に力を入れています。
また、こういった新機能だけでなく、主キー/一意キー制約や、バックアップ/リストア機能の強化といった、エンタープライズ向けの機能も強化されています。
Vertica 7.2で追加された主な新機能は次の通りです。
- 「Apache Kafka」分散型メッセージングシステムのネイティブサポート
- データロード時の主キー/一意キー制約列に対する一意性チェック機能の追加
- HASH JOINの性能向上や、ヒント句のサポートといったクエリの最適化
- データロード時のParserとしてAvro Parser、CSV Parserの追加
- 解析関数(NTH_VALUE)、算術関数(COSH、SINH、TANH、LOG10)の追加
- JDBC接続のMARS対応やPythonドライバーの追加といったクライアント接続機能の強化
- スキーマレベルの権限継承機能の追加
- プロセスレベルのハング検知機能追加といったデータベース管理機能の強化
- バックアップ・リカバリ機能の強化
- Flex Zoneライセンス体系の変更
この中から、まずはIoTデータとビッグデータ分析をより便利にする以下の2つの新機能をご紹介します。
- 「Apache Kafka」分散型メッセージングシステムのネイティブサポート
- Flex Zoneライセンス体系の変更
1.Apache Kafkaと連携することで、大量データのデータストリーミング分析を実現
Verticaへのデータロードは、COPYコマンドを用いたCSVファイルのバルクロードで実施する方法が一般的です。INSERT文も使用できますが、Verticaのような列指向データベースは1件1件のINSERT処理よりも、ある程度まとまった件数をロードするバルクロードに向いています。
そのため、これまでのバージョンでは、IoT端末が生成する大量のログデータやTwitterのつぶやきデータ等の逐次発生するデータをリアルタイムで取り込むことは難しいというのが現実でした。(ETLツール等を用いて、少量のデータを逐次COPYコマンドでロードするような仕組みを作れば実現できますが、そういった仕組みはデータ同期等のことを考えると複雑になりがちです)
Vertica 7.2では、オープンソース分散型メッセージングシステムの「Apache Kafka」(以下Kafka)のネイティブサポートを提供することで、これらのデータをニア・リアルタイムで取り込むことが可能になりました。
例えばTwitterのつぶやきデータを分析したい場合は、図1のような構成で実現することができます。TwitterのつぶやきデータをApache Flumeやfluentdなどを使って収集し、Kafkaに送信します。Kafkaには送られてきたデータがキューとしてKafka Cluster内に次々と溜まっていきます。このキューに溜まっているデータの中から、分析に使用するデータをVerticaが一定間隔で受け取りに行き、内部的にCOPYコマンドを使ってVerticaにロードします。
このように、INSERTではなくVerticaが得意とするCOPYコマンドを使用したバルクロードとして処理することで、ログデータ等の逐次発生するようなデータをVerticaにリアルタイムに取り込むことが可能です。ロードしたデータについては通常のテーブルに格納されるので、すぐに分析を行うことができます。
次に、Kafkaと連携させるために、事前にVertica側で実施しなければならない内容について説明します。
1. Kafka スケジューラの定義(vkconfig schedulerコマンド)
接続先のKafkaサーバの情報や、Kafkaにデータを取得しに行く間隔(図1の場合は10秒間隔)等を指定します。
2.データロード用のターゲットテーブルの作成(CREATE [FLEX] TABLE)
Kafkaから取得したデータをロードするためのテーブルを作成しておきます。構造化できないようなデータの場合は、半構造化データを扱えるFlex Tableを作成しておくと良いでしょう。
※Flex Tableについては後述する「Flex Tableとは?」を参照してください。
3. Kafka Topicとターゲットテーブルの関連付け(vkconfig topicコマンド)
KafkaではデータをTopicという単位で分類して格納しています。取り込みたいKafkaのTopicとロード先のVerticaのテーブルとの関連付けを行います。
4. Kafkaスケジューラの実行(vkconfig launchコマンド)
設定した内容でkafka連携を開始するためのコマンドを実行します。
Kafka連携がネイティブサポートされたことで、このようにわずか4つのコマンドを実行するだけで、KafkaのデータをVerticaに取り込むことが可能になりました。
Kafka連携時の具体的な手順については、アシストが運営するVertica技術情報サイトの「Apache Kafka連携機能を利用して、Verticaにストリーミングデータをロードする(7.2新機能)」で紹介しています。