Cassandra のデータを Yellowfin で可視化 with CData

## はじめに
NoSQL データベースの一種で、KVS (Key-Value Store) 構造を持つ分散型データベースの代表格 Cassandra に、Yellowfin からアクセスして、データを可視化してみようと思います。と、知ったかぶりして書いてみましたが、生まれて初めて Cassandra を取り扱ってみました。
ちなみに、NoSQL データベースの仲間である MongoDB へのアクセスは[こちら](https://qiita.com/ExtremeCarvFJ/items/d9a22480a66634e41caa)で紹介しています。

## 環境準備
### Cassandra のインストール
##### Linux
Linux へのインストール手順は、[こちら](https://qiita.com/kaburankattara/items/ebc78d78e49b661e886f)の記事が参考になります。
Cassandra をインストールするためには、Java 実行環境と Python 環境が前提条件となります。Linux OS に標準で Python がインストールされていない場合は、Python のインストールが必要です。その場合、Pythonはバージョン 2.xx のインストールが望まれます。3.xx だと [Python プログラムを修正する必要](https://stackoverflow.com/questions/48219304/cassandra-cqlsh-line-145-except-importerror-e-syntaxerror-invalid-syntax)があるからです。
その後、[こちら](https://cassandra.apache.org/_/download.html)から Cassandra を入手し、インストールします。

##### Windows
Windows へのインストール手順は、[こちら](https://www.youtube.com/watch?v=ruAYl1aVM7s)の動画がとても参考になります。英語の動画ですが、すごく丁寧に手順が説明されています。なお、バージョン 4.xx 以降は、Windows 用の実行ファイルが準備されていないため、Windows 環境にインストールする場合は、[アーカイブサイト](https://archive.apache.org/dist/cassandra/3.11.4/)から 3.11 のバージョンまで遡ってインストールする必要があります。

##### Docker
一番楽なのは Docker イメージを入手することです。
```powershell:pull
docker pull cassandra:latest
```

入手後は、下記を参考に、イメージからコンテナを立ち上げます。

https://hub.docker.com/_/cassandra

```powershell:run
docker network create cassandra
docker run --rm -d --name cassandra --hostname Cassandra -p 9042:9042 --network cassandra cassandra
```

コンテナを立ち上げたら、コンテナにログインします。
```powershell:exec
Docker exec -it cassandra /bin/bash
```

### データ準備
コンテナにログインした後、`cqlsh`コマンドを実行します。cqlsh とは、PostgreSql や SQL Server でいうところの、SQL 文を発行するもので、同コマンドを実行すると、cqlsh> プロンプトに切り替わります。

##### keyspace
Cassandra では database に該当するものが keyspace です。
既存 keyspace を確認した後、test という名前の keyspace を作成します。
```powershell:keyspace
cqlsh> describe kyespaces;
cqlsh> create keyspace test with replication = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
```
replication 内のオプションは必須で指定する必要があります。1 つのデータセンター内で運用する場合は、`Class = SimpleStrategy` で大丈夫です。SimpleStrategy を指定した場合、`replication_factor = 1` のように、レプリカのノード数を指定する必要があります。大規模展開に必要なオプションなどは[こちら](https://docs.datastax.com/en/archived/cql/3.1/cql/cql_reference/create_keyspace_r.html)ご確認ください。

##### table
keyspace に入ったのち、テーブルを作成します。create table のシンタックスは、通常のデータベースとほぼ同様です。
```powershell:table
cqlsh> use test;
cqlsh:test> create table test.fruits (
         ... id text primary key,
         ... name text,
         ... price int);
```

テーブルにデータを投入します。insert 文も通常のデータベースとほぼ同じシンタックスです。
```powershell:insert
cqlsh:test> insert into fruits (id, name, price) values ('001', 'banana', 100);
cqlsh:test> insert into fruits (id, name, price) values ('002', 'apple', 150);
cqlsh:test> insert into fruits (id, name, price) values ('003', 'durian', 980);
```

テーブルを参照します。
```powershell:insert
select * from fruits;

 id  | name   | price
-----+--------+-------
 002 |  apple |   150
 001 | banana |   100
 003 | durian |   980
```

## JDBC コネクタ
### JDBC コネクタの入手
今回は CData の Cassandra JDBC コネクタ評価版を利用します。下記は Windows 環境を前提としたコネクタのインストール手順です。

まずは下記 URL にアクセスし、対応データソースから Cassandra を選択します。

https://www.cdata.com/drivers/

その後、[ダウンロード] > [ダウンロード評価版] > [ダウンロード Windows Setup (.exe)] の順に進み、CassandraJDBCDriver.exe をダウンロードします。

CassandraJDBCDriver.exe を実行すると、デフォルトで以下にファイルが解凍されます。
`C:\Program Files\CData\CData JDBC Driver for Cassandra 2024`
lib フォルダに以下のようなファイルが存在します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/20494f7f-be0e-64ea-5e24-e1e2a955effd.png)

### コネクタのインストール

ライセンスファイル cdata.jdbc.cassandra.lic を zip ファイルに圧縮した後、cdata.jdbc.cassandra.lic.zip を cdata.jdbc.cassandra.lic.jar に名称変更します。Yellowfin プラグイン管理画面で .jar か .yfp ファイルしか登録できないことへの対応です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/a42cc7b8-b9e6-fbbb-5959-1e5942097df6.png)

Yellowfin 画面から [管理] > [プラグイン管理] > [追加] と進み、cdata.jdbc.cassandra.jar をドロップして追加した後、「さらに追加」を選択して、cdata.jdbc.cassandra.lic.jar を追加します。結果、以下のように、実行ファイルとライセンスファイルの両者を合わせて登録します。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/652d7545-9028-e296-1eb1-79255c478d56.png)

## データソース
Yellowfin からは一般 JDBC データソースを利用して Cassandra に接続します。一般 JDBC データソースを利用するための接続文字列は、CData の機能を使って生成すると便利です。cdata.jdbc.cassandra.jar をダブルクリックすると、下記の画面が表示されます。こちらで接続テストをした後、接続文字列をコピーして利用すると良いかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/9f22dca9-adb2-5636-863b-563d3f887879.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/b79967cd-2e40-c6b8-1139-149b223d4590.png)

Yellowfin 画面から [管理] > [プラグイン管理] > [追加] と進み、[新規データ接続] で [データソースを選択] から [データベース] を選択します。
新規接続の設定画面から、以下を参照に新規接続を作成します。
|項目|設定値|
|---|---|
|名前|Cassandra|
|データベースタイプ|一般 JDBC データソース|
|JDBC ドライバー|cdata.jdbc.Cassandra.CassandraDriver(Cassandra)|
|接続文字| jdbc:cassandra:User=cassandra;Password=cassandra;Database=test;|

[テスト接続] ボタンを押下し、テスト接続が成功すればひとまず大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/d8890d98-4e12-266b-f978-16757e18eca8.png)


## ビュー作成
[こちら](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2294284)を参考に、ビューを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/1edb7726-6110-1d4f-4e77-8d88890734d5.png)

## レポートの作成
[こちら](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2294086)を参考に、レポートを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/0c6d0975-afcd-312a-f30a-9eb4afd26a0e.png)

## 最後に
一般的な KVS の利点として、分散型データベースとしてのスケーラビリティや可用性に加え、パフォーマンスなんかも述べられています。
ただ、KVS が具体的にどのような用途に適しているのかや、KVS 内のデータを BI ツールで可視化する用途があるのかなど、まだまだ分かっていないことがたくさんあります。
このあたりに知見のある人がいれば、是非ご教授ください。

では皆様、良いデータ分析を! See you then!