CognosからPrestogres経由でPrestoにつないだ話

先週いろいろとやっていてfrsyukiさんのおかげで動くようになったのでメモっておきます。

CognosはBIツールです。Prestoはみんな知ってるよね。

Prestogresが何かはこちらを参照。

http://www.slideshare.net/frsyuki/presto-meetup

要はBIツールからPrestoにつなぐ際のゲートウェイです。枯れたPostgreSQLJDBC/ODBCツールを使ってPrestoにつなごうという話。

https://github.com/treasure-data/prestogres の「How it works?」のところを見ればなんとなく動きが想像できると思います。

PrestogresはメインがRubyで後はCとPythonの合作になっています。Cが出てくるのはpgpool-IIをいじっているため。Pythonが出てくるのはPL/Pythonを使うため。

で、このPythonが微妙にくせ者で当初はPython2.7以降じゃないとPrestogresが動かない状態でした。

僕が試していたCentOS 6.5ではPython2.6がデフォルトなのでそのままでは動きません。

xbuildでpython2.7を入れてそっちを使うようにとか出来れば良いんでしょうがやり方が分からなかったのでPython2.6でも動くようにしたpatchを作ってpull requestしたのがこちら

https://github.com/treasure-data/prestogres/pull/8

このpull requestはmergeされたのですが、それだけではCognosとつながらずpatchを何回か出してもらってやっと動くようになった経緯がこのpull requestにあります。

それにしてもfrsyukiさんの対応が早すぎてビビりましたw

Cognosはエラー情報が少なくて困るのですが、そんなもんらしいです。例えば以下ぐらいしか情報がありません。他にもIEでしか動かない部分があるとか、動きがもっさりしているとか(一部Swingで実装されている?)、まあ若干アレなのですが、他のBIツールに比べれば遥かに良いらしいです。

RQP-DEF-0177 'sqlOpen' 処理中にエラーが発生しました。ステータス ='-9'。
UDA-SQL-0107 "AOpen" 処理中に一般例外が発生しました。
Error while executing the query

Prestoとの接続で注意する点を上げるとPrestoはcatalog,schema,tableの3階層です。なので以下のようにクエリを実行できます。

presto:default> select * from hive.default.building limit 10;
 buildingid | buildingmgr | buildingage | hvacproduct |   country
------------+-------------+-------------+-------------+--------------
 1          | M1          | 25          | AC1000      | USA
 2          | M2          | 27          | FN39TG      | France
 3          | M3          | 28          | JDNS77      | Brazil
 4          | M4          | 17          | GG1919      | Finland
 5          | M5          | 3           | ACMAX22     | Hong Kong
 6          | M6          | 9           | AC1000      | Singapore
 7          | M7          | 13          | FN39TG      | South Africa
 8          | M8          | 25          | JDNS77      | Australia
 9          | M9          | 11          | GG1919      | Mexico
 10         | M10         | 23          | ACMAX22     | China
(10 rows)

ちなみにこのbuildingテーブルはInteractive Query for Hadoop with Apache Hive on Apache Tez - Hortonworksから取ってます。
hiveと接続する場合はcatalogはhiveになります。schemaがhiveのdatabaseつまりdefaultとかになります。hiveとかMySQLとかだとdatabase,tableの2階層なのでそこは注意。

これがなんで注意なのかというとODBCの設定でDatabaseの設定ではPrestoのcatalogを指定する必要があるからです。
なお今回はPostgreSQLODBCドライバではなくPrestogresのODBCドライバを使いました。install · treasure-data/prestogres-odbc Wiki · GitHub

ここをhiveのdatabaseだと思ってdefaultを指定すると、Cosnosからは「 select * from default.default.building 」のようにクエリが発行されてうまくいきません。

ちゃんと設定するとCognosからは以下のようにPrestoのcatalog,schema,tableの3階層が見えます。

そしてレポートもちゃんと表示されます。めでたしめでたし。