Tableau Desktop 使い方 データ接続(4) 〜PostgreSQLへの接続

Tableauではローカルのファイルだけでなく、サーバに存在する数多くのデータベースに接続して必要なデータを抽出することができます。

本ページでは、サーバーにPostgreSQLをインストールしてサンプルデータを格納し、Tableau Desktopから接続する方法を紹介します。

設定&接続環境と手順

今回PostgreSQLをインストールするサーバのスペックと接続するTableau Desktopは以下になります。

  • サーバ
    • HDD: 3T (RAID1)
    • メモリ: 32G
    • OS: ubuntu 18.04
    • DB: PostgreSQL 11.11
  • Tableau Desktop 2020.4.2

PostgreSQL12をサーバにインストールして、Tableau Desktop 2022.1.2からアクセスした場合にも同様の設定で問題ないことを確認しました(2022/6/24)。

また、以下の手順で設定します。

  • 手順1
    PostgreSQLのインストールと設定
    • インストール
    • 外部からの接続設定
  • 手順2
    注文データをPostgreSQLに格納
  • 手順3
    Tableau 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行を追加します。

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から接続する方法を紹介しました。

タイトルとURLをコピーしました