Tableauではローカルのファイルだけでなく、サーバに存在する数多くのデータベースに接続して必要なデータを抽出することができます。
本ページでは、サーバーにPostgreSQLをインストールしてサンプルデータを格納し、Tableau Desktopから接続する方法を紹介します。
設定&接続環境と手順
今回PostgreSQLをインストールするサーバのスペックと接続するTableau Desktopは以下になります。
- サーバ
- HDD: 3T (RAID1)
- メモリ: 32G
- OS: ubuntu 18.04
- DB: PostgreSQL 11.11
- Tableau Desktop 2020.4.2
また、以下の手順で設定します。
- 手順1PostgreSQLのインストールと設定
- インストール
- 外部からの接続設定
- 手順2注文データをPostgreSQLに格納
- 手順3Tableau Desktopから接続
PostgreSQLのインストールや設定情報は必要なく、Tableau DesktopからPostgreSQLに接続する方法を知りたい方はTableau Desktopから接続を参照ください。
PostgreSQLのインストールと設定
インストール
Ubuntu18.04のコードネームを確認して、パッケージのダウンロード一覧にリポジトリのパスを記載します。
$ lsb_release -cs
bionic
$ sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
公開鍵をキーリストに追加します。
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
OK
念のため追加されたかどうかを確認します。
$ apt-key list
/etc/apt/trusted.gpg
--------------------
pub dsa1024 2005-05-24 [SC]
3B59 3C7B E6DB 6A89 FB7C BFFD 058A 05E9 0C4E CFEC
uid [ 不明 ] Ubuntu-ja Archive Automatic Signing Key <archive@ubuntulinux.jp>
sub elg2048 2005-05-24 [E]
pub rsa1024 2009-04-05 [SC]
5967 6CBC F5DF D8C1 CEFE 375B 68B5 F60D CDC1 D865
uid [ 不明 ] Launchpad PPA for Ubuntu Japanese Team
pub rsa4096 2011-10-13 [SC]
B97B 0AFC AA1A 47F0 44F2 44A0 7FCC 7D46 ACCC 4CF8
uid [ 不明 ] PostgreSQL Debian Repository
/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-archive.gpg
------------------------------------------------------
ちゃんと追加されています。okです。
パッケージリストを更新、アップグレードします。
$ sudo apt update
ヒット:1 http://archive.ubuntulinux.jp/ubuntu bionic InRelease
ヒット:2 http://archive.ubuntulinux.jp/ubuntu-ja-non-free bionic InRelease
ヒット:3 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
取得:4 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
ヒット:6 http://security.ubuntu.com/ubuntu bionic-security InRelease
取得:7 http://apt.postgresql.org/pub/repos/apt bionic-pgdg InRelease [104 kB]
取得:8 http://apt.postgresql.org/pub/repos/apt bionic-pgdg/main amd64 Packages [231 kB]
取得:9 http://apt.postgresql.org/pub/repos/apt bionic-pgdg/main i386 Packages [230 kB]
728 kB を 4秒 で取得しました (184 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードできるパッケージが 28 個あります。表示するには 'apt list --upgradable' を実行してください。
$ sudo apt upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
(中略)
アップグレード: 28 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
9,994 kB のアーカイブを取得する必要があります。
この操作後に 206 kB のディスク容量が解放されます。
続行しますか? [Y/n] Y
(中略)
initramfs-tools (0.130ubuntu3.11) のトリガを処理しています ...
update-initramfs: Generating /boot/initrd.img-5.4.0-65-generic
libc-bin (2.27-3ubuntu1.4) のトリガを処理しています ...
PostgreSQL ver.11をインストールします。
$ sudo apt install postgresql-11
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
(中略)
成功しました。以下のようにしてデータベースサーバを起動することができます:
pg_ctlcluster 11 main start
Ver Cluster Port Status Owner Data directory Log file
11 main 5432 down postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log
update-alternatives: /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) を提供するために自動モードで /usr/share/postgresql/11/man/man1/postmaster.1.gz を使います
libc-bin (2.27-3ubuntu1.4) のトリガを処理しています ...
systemd (237-3ubuntu10.45) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
ureadahead (0.100.0-21) のトリガを処理しています ...
無事完了しました。
自動起動されているはずなのでプロセスを確認します。
$ ps aux | grep postgres | grep -v grep
postgres 92243 0.0 0.0 322376 28436 ? S 16:29 0:00 /usr/lib/postgresql/11/bin/postgres -D /var/lib/postgresql/11/main -c config_file=/etc/postgresql/11/main/postgresql.conf
postgres 92245 0.0 0.0 322376 4232 ? Ss 16:29 0:00 postgres: 11/main: checkpointer
postgres 92246 0.0 0.0 322512 4232 ? Ss 16:29 0:00 postgres: 11/main: background writer
postgres 92247 0.0 0.0 322376 9152 ? Ss 16:29 0:00 postgres: 11/main: walwriter
postgres 92248 0.0 0.0 322804 6708 ? Ss 16:29 0:00 postgres: 11/main: autovacuum launcher
postgres 92249 0.0 0.0 177428 3592 ? Ss 16:29 0:00 postgres: 11/main: stats collector
postgres 92250 0.0 0.0 322800 5216 ? Ss 16:29 0:00 postgres: 11/main: logical replication launcher
動作しています。
バージョンを確認してみます。
$ psql -V
psql (PostgreSQL) 11.11 (Ubuntu 11.11-1.pgdg18.04+1)
ver.11.11がインストールされました。
外部からの接続設定
外部からの接続を許可するための設定をします。
/etc/postgresql/11/main/postgresql.conf を編集します。
$ sudo nano /etc/postgresql/11/main/postgresql.conf
listen_addresses = 'localhost'
の部分をlisten_addresses = '*'
に変更します。
続いて/etc/postgresql/11/main/pg_hba.conf を編集します。
$ sudo nano /etc/postgresql/11/main/pg_hba.conf
特定のIPアドレスからのアクセスをパスワード認証で許可するように、以下の1行を追加します。(アドレスxxx.yyy.zzz.0/24は環境に応じて適宜変更して下さい。)
host all all xxx.yyy.zzz.0/24 md5
編集を終えたらPostgreSQLを再起動します。
$ sudo service postgresql restart
注文データをPostgreSQLに格納
新たにPostgreSQLのユーザpgadminを作成して、スーパーユーザ権限を与えます。
$ sudo su - postgres
$ createuser --pwprompt --interactive pgadmin
新しいロールのためのパスワード:
もう一度入力してください:
新しいロールをスーパユーザにしますか? (y/n)y
ユーザ「pgadmin」で接続して、データベース「superstore」を作成します。
$ psql -h localhost -U pgadmin -d postgres
ユーザ pgadmin のパスワード:
psql (13.1 (Ubuntu 13.1-1.pgdg18.04+1))
SSL 接続 (プロトコル: TLSv1.3、暗号化方式: TLS_AES_256_GCM_SHA384、ビット長: 256、圧縮: オフ)
"help"でヘルプを表示します。
postgres=# create database superstore;
CREATE DATABASE
ユーザ「pgadmin」で、データベース「superstore」に接続し直します。
$ psql -h localhost -U pgadmin -d superstore
ユーザ pgadmin のパスワード:
psql (13.2 (Ubuntu 13.2-1.pgdg18.04+1))
SSL 接続 (プロトコル: TLSv1.3、暗号化方式: TLS_AES_256_GCM_SHA384、ビット長: 256、圧縮: オフ)
"help"でヘルプを表示します。
スーパーストアの注文データのヘッダを引用して、新たにテーブル「store_order」を以下のように定義します。
superstore=# CREATE TABLE store_order
(ID INTEGER PRIMARY KEY,
オーダーID char(15),
オーダー日 char(10),
出荷日 char(10),
出荷モード char(20),
顧客ID varchar(15),
顧客名 varchar(20),
顧客区分 char(10),
市区町村 varchar(16),
都道府県 varchar(10),
国 char(10),
地域 varchar(10),
製品ID varchar(30),
カテゴリ char(10),
サブカテゴリ varchar(30),
製品名 varchar(40),
売上 REAL,
数量 INTEGER,
割引率 REAL,
利益 REAL
);
CREATE TABLE
スーパーストアの注文データには、「オーダー␣ID」のようにスペースが入っているカラム名がいくつか存在します。スペースが入っているカラム名はPostgreSQLではエラーになったので、スペースは除外して定義しました。
select文で読み出すとテーブルが作成されたことが確認できます。
superstore=# select * from store_order;
id | オーダーid | オーダー日 | 出荷日 | 出荷モード | 顧客id | 顧客名 | 顧客区分 | 市区町村 | 都道府県 | 国 | 地域 | 製
品id | カテゴリ | サブカテゴリ | 製品名 | 売上 | 数量 | 割引率 | 利益
----+------------+------------+--------+------------+--------+--------+----------+----------+----------+----+------+--------+----------+--------------+--------+------+------+--------+------
(0 行)
準備が整ったので、実際に注文データをテーブルに格納します。
事前にスーパーストアの注文データをcsv形式のファイル(order.csv)に保存して、それを指定して読み込みます。
superstore=# COPY store_order FROM '/home/order.csv' WITH CSV HEADER;
COPY 10000
確認のため最初の5行を表示してみます。
superstore=# select * from store_order LIMIT 5;
id | オーダーid | オーダー日 | 出荷日 | 出荷モード | 顧客id | 顧客名 | 顧客区分 | 市区町村 | 都道府県 | 国 | 地域 | 製品id | カテゴリ | サブカテゴリ | 製品名 | 売上 | 数量 | 割引率 | 利益
----+-----------------+------------+------------+------------------------------+------------+-----------+------------------+------------+----------+--------------+----------+----------------------+----------------+----------------+-------------------------------------+--------+------+--------+-------
1 | JP-2019-1000099 | 2019/11/8 | 2019/11/8 | 即日配送 | 谷大-14605 | 谷奥 大地 | 消費者 | 千歳市 | 北海道 | 日本 | 北海道 | 家具-本棚-10004817 | 家具 | 本棚 | Dania キャビネット, 従来型 | 16974 | 3 | 0.4 | -1986
2 | JP-2020-1001016 | 2020/10/7 | 2020/10/10 | ファースト クラス | 飯真-14980 | 飯沼 真 | 消費者 | 豊田市 | 愛知県 | 日本 | 中部地方 | 事務用-アプ-10001193 | 事務用品 | アプライアンス | フーバー ミキサー, シルバー | 52224 | 8 | 0 | 25584
3 | JP-2018-1001113 | 2018/8/18 | 2018/8/21 | ファースト クラス | 笹大-16015 | 笹淵 大輔 | 消費者 | 浜松市中区 | 静岡県 | 日本 | 中部地方 | 事務用-バイ-10002621 | 事務用品 | バインダー | カーディナル バインダー, エコノミー | 3319.2 | 6 | 0.4 | 211.2
4 | JP-2018-1001177 | 2018/11/25 | 2018/11/27 | ファースト クラス | 柿海-18790 | 柿下 海斗 | 小規模事業所 | 千歳市 | 北海道 | 日本 | 北海道 | 家具-椅子-10000770 | 家具 | 椅子 | Novimex 折り畳み式の椅子, 赤 | 16446 | 5 | 0.4 | 2466
5 | JP-2018-1001177 | 2018/11/25 | 2018/11/27 | ファースト クラス | 柿海-18790 | 柿下 海斗 | 小規模事業所 | 千歳市 | 北海道 | 日本 | 北海道 | 家具-家具-10000840 | 家具 | 家具 | Eldon フレーム, 黒 | 18600 | 4 | 0.4 | -3720
(5 行)
ちゃんと格納されているようです。
Tableau Desktopから接続
PostgreSQL側のデータが準備できたので、Tableau Desktopから接続してみます。
Tableau Desktopを開いて、接続ペインで「サーバーへ」の中の「その他」をクリック、リストから「PostgreSQL」を選択します。
接続設定画面に移るので、サーバーに接続先サーバ名またはIPアドレス、ポート番号、接続先データベース名を設定します。
データベースへのアクセス形式がパスワード認証の場合には、認証に「ユーザ名とパスワードを」設定の上、ユーザ名とパスワードを入力します。
無事接続してテーブルにアクセスできました!
【追加】接続エラーへの対応
今回、ワークシートで実際にチャートを作成しようとした際に、以下のようなエラーが出ました。
Error Code: 8D4946CF
調べたところ、PostgreSQLのJDBCドライバをMacにインストールしておく必要があるとのことでしたので、Tableauのサイトからダウンロードしました。
ダウンロードしたjarファイルを「~/ライブラリ/Tableau/Drivers」にコピーして、再度Tableau Desktopで実行してみたところ、今度はエラーが出ずにチャートを作成できました!
本ページでは、サーバーにPostgreSQLをインストールしてサンプルデータを格納し、Tableau Desktopから接続する方法を紹介しました。
PostgreSQL12をサーバにインストールして、Tableau Desktop 2022.1.2からアクセスした場合にも同様の設定で問題ないことを確認しました(2022/6/24)。