Dataiku DSSとpostgreSQLの接続


実務でデータ分析していると、どうしもデータベースを使いたくなる時がでてきます。
ということで今回は、Dataiku DSSとpostgreSQLの連携について書きます。
こちらの[チュートリアル](https://academy.dataiku.com/integration-with-sql-databases)を参考にやりました。

Dataiku DSSは様々なデータストレージと連携することができ、020/12月時点で10種類のストレージをフルサポートしているようです。サポートしているストレージに関する詳細は[こちら](https://doc.dataiku.com/dss/latest/connecting/sql.html#supported-databases)をご参照ください。


#環境
Ubuntu 18.04.4 LTS
postgreSQL 13.1
Dataiku ver 8.0.2

#postgreSQLインストール
公式の[ダウンロードサイト](https://www.postgresql.org/download/)からインストール。

#postgreSQLのpostgresユーザーのパスワード設定（必要に応じて）
最初、パスワード認証がうまくいかなかったので、力業でなんとかしました。
もっとスマートなやり方がきっとある、そんな気はしています。

まず、パスワード系の設定ファイルpg_hba.confを探します。

```
sudo find / -name pg_hba.conf
```

で、pg_hba.confの場所がわかるので、pg_hba.confの最初の行のpeerをtrustに書き換えて以下のようにします。(sudo vi)

```
host    all         all         127.0.0.1/32          trust
```

設定再読み込み。

```
sudo /etc/init.d/postgresql reload
```

これでpostgresユーザーでパスワード無しで入れるようになりますので、ここでパスワードを設定。

```
psql -U postgres
postgres=# \password
```

設定後、pg_hba.confの最初の行をtrustからmd5に変更して、postgresqlの設定を読み込みます(reload)。

#postgreSQLの初期設定
今回扱う内容に応じて、テーブルやロールを作ります。
CSVからデータを読み込みたいので、あらかじめ以下ののCSVを/home/dataiku/以下におきます。
https://downloads.dataiku.com/public/website-additional-assets/data/orders.csv

初期設定は大まかに以下のようなことをしました。

 - dku_tshirt_adminユーザーを作成
 - データベースとしてdkuを作成し、スキーマとしてdku_tshirtを作成
 - ordersテーブルを作成し、orders.csvからファイルを読み込む

```postgreSQL
psql -U postgres  
postgres=# CREATE DATABASE dku; -- dkuデータベース作成
postgres=# \c dku
dku=# CREATE SCHEMA dku_tshirt; -- dku_tshirtスキーマ作成
dku=# CREATE USER dku_tshirt_admin WITH PASSWORD 'password'; -- dku_tshirt_adminユーザー作成
dku=# GRANT ALL PRIVILEGES ON SCHEMA dku_tshirt TO dku_tshirt_admin; -- dku_tshirt_adminユーザーのdku_tshirtスキーマへの権限設定
dku=# \connect - dku_tshirt_admin -- dku_tshirt_adminにユーザー変更
dku=# CREATE TABLE dku_tshirt.orders( 
dku(# "order_date" DATE
dku(# ,"pages_visited" INT
dku(# ,"order_id" VARCHAR
dku(# ,"customer_id" VARCHAR
dku(# ,"tshirt_category" VARCHAR
dku(# ,"tshirt_price" FLOAT
dku(# ,"tshirt_quantity" INT
dku(# ); -- 空のordersテーブルを作成
dku=# \q
```

一度シェルに戻り、orders.csvファイルをordersテーブルへインポートします。

```
$ psql -U dku_tshirt_admin -c "copy dku_tshirt.orders from stdin ENCODING 'utf8' CSV HEADER DELIMITER E',';" dku < /home/dataiku/orders.csv
```

# Dataiku DSSとpostgreSQLの接続
Administrator権限を持ったユーザーで作業します。
[Applications]->[Administration]で、設定画面を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/9c9e54de-f8d5-d08f-fbe9-a2910459c918.png)

[Connections]クリックで接続設定画面になりますので、[+NEW CONNECTION]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/c29d4b41-5b0c-a2fd-7a53-03b4c3b458ee.png)

PostgreSQLをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/620a99af-74ae-0d95-919e-2d07c14e8592.png)

設定画面が出てきますので、以下のように入力して[TEST]をクリック。
これにより、接続がうまくいくか確認することができます。以下の画像のように「Connection OK」と出たら[CREATE]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/bff22c95-e084-993e-b672-8514c90c4e9f.png)

これで、Dataiku DSSからpostgreSQL内のデータを呼び出す準備ができました。

# postgreSQL上のテーブルを、Dataiku DSSのデータセットとしてインポート
実際にプロジェクトからPostgreSQL上のデータにアクセスしてみます。
PostgreSQL上のテーブルを、Dataiku DSSのデータセットとしてインポートすることでPostgreSQL上のデータにアクセスできます。

SQL connectionという名前のプロジェクトを作成し、[+IMPORT YOUR FIRST DATASET]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/fe2db6a6-2666-3cc0-49e7-b3ef45e2d87d.png)

New dataset画面で[PostgreSQL]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/8e4ab17d-30d0-618f-7ed0-d44a8b10977b.png)

Connectionとして、先ほど設定したPostgreSQL_tshirtが選択できるようになっています。以下のように入力して[TEST TABLE]をクリックして読み込めそうか確認。postgreSQL側で権限がないとうまくいかないのでご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/ae07504f-c59c-1608-0b26-3dcc0ba07aba.png)

Previewが出ればOK。
右上に[CREATE]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/906042b5-8536-ef80-7f01-a7c1134b8bf1.png)


データが読み込めています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/03666dad-210a-298d-98c3-dddb8aa5c07d.png)


フロー画面からもordersデータセットを確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/538f8398-6e5d-fecb-9f81-97b26703da75.png)

これで、Dataiku DSSとpostgreSQLの基本的な設定ができました。