Tableau Server: 抽出ファイル更新のタスク実行を実践してみる

2015.08.19

Tableau Serverには『抽出の更新』というタスクをスケジュール実行する機能があります。手元で作成した抽出ファイル(任意のサーバ等にあるデータソースの内容を圧縮・整頓し、ローカル端末にて実行参照可能形式として保存されたファイル)をTableau Serverにアップロード(Tableau用語では"パブリッシュ(Publish)"と呼びます)し、所定の設定を行う事でデータの中身のアップデートを適宜行なってくれるという代物です。

この機能ではリアルタイム接続せずに済ませる事が出来、また抽出ファイル自体リアルタイム接続で取得するデータソースよりも容量が少なく済みますので何かと便利なのですが、手順については些か面倒というか分かりづらい部分もあったりします。

そこで当エントリでは『抽出ファイルの更新』を実際に行なってみて、実施には何が必要なのか、どういう手順で進めれば実施出来るのかという点について解説してみたいと思います。

目次

事前準備

まずは『抽出ファイルの更新』を行うにあたっての環境・データ等を整えたいと思います。大きく2点、Tableau Serverとデータソースの準備です。データソースはAmazon Redshiftを使用する事としますが、基本的にはどのデータソースでも仕組みについては変わりありません。

Tableau Serverの用意

まずは抽出ファイルのパブリッシュ・スケジュール設定を行うためのTabelau Serverを用意します。既存の環境をお持ちであればそれを用いる形で問題ありません。環境が無いという場合であれば、任意のWindows環境を用意してその上にTableau Serverをインストールしておいてください。AWS EC2環境に於ける環境導入手順については以下エントリで解説していますので宜しければご参照ください。(基本的にはインストーラ入手→ほぼそのまま『次へ』指定で進められる内容となってますので難しい話では無いと思います)

tableau-server-schedule-extract_01

tableau-server-schedule-extract_02

Redshift環境の用意

次いでデータソース環境。Amazon Redshiftのクラスタを用います。こちらも既存環境がある場合、その環境を用いる形で差し支えありません。無い場合は別途環境を構築しておいてください。

クラスタ環境が準備出来たら、今回検証用で用いるデータを用意します。Tableau製品デモ実演時の御用達(?)サンプルデータ、Superstoreのデータをここでも使いたいと思います。

今回検証用のテーブルを作成し、データを投入。(検証環境内に以前活用していたテーブル・データがありましたので今回はそこからデータを引っ張ってきました)

# CREATE TABLE public.orders_ext_upd (
   order_id INT NOT NULL,
   order_date DATE NOT NULL,
   priority VARCHAR(12) NOT NULL,
   quantity SMALLINT NOT NULL,
   sales DOUBLE PRECISION,
   discount_rate DOUBLE PRECISION,
   ship_mode VARCHAR(20) NOT NULL,
   profit INT NOT NULL,
   unit_price INT NOT NULL,
   ad_expenses INT NOT NULL,
   shipping_cost INT NOT NULL,
   customer_name VARCHAR(50) NOT NULL,
   prefecture VARCHAR(12) NOT NULL,
   city VARCHAR(20) NOT NULL,
   area VARCHAR(12) NOT NULL,
   shop_name VARCHAR(20) NOT NULL,
   customer_segment VARCHAR(30) NOT NULL,
   product_category VARCHAR(30) NOT NULL,
   product_sub_category VARCHAR(100) NOT NULL,
   product_id VARCHAR(10) NOT NULL,
   product_name VARCHAR(100) NOT NULL,
   product_description VARCHAR(200) NOT NULL,
   product_container VARCHAR(100) NOT NULL,
   base_margin DOUBLE PRECISION,
   supplier VARCHAR(30) NOT NULL,
   deliver_date DATE NOT NULL,
   ship_date DATE NOT NULL
 );
CREATE TABLE
#
# INSERT INTO public.orders_ext_upd SELECT * FROM public.orders ORDER BY order_date;
INSERT 0 8369

サンプルで用いたデータについては2012年までしか無かったので、2013年/14年のデータを既存データから作成してINSERTしてみました。

INSERT INTO public.orders_ext_upd
SELECT
    order_id,
    DATEADD(year,4,order_date),
    priority, quantity, sales, discount_rate, ship_mode,
    profit, unit_price, ad_expenses, shipping_cost, customer_name, prefecture,
    city, area, shop_name, customer_segment, product_category, product_sub_category,
    product_id, product_name, product_description, product_container,base_margin,
    supplier, deliver_date, ship_date
FROM
    public.orders_ext_upd
WHERE
    order_date BETWEEN '2009/01/01' AND '2010/12/31'
ORDER BY
    order_date;
INSERT 0 4209

ここまでのデータ件数を確認してみます。2014年までのデータがある、という体(てい)の準備は整いました。

# SELECT
     DATE_PART(year,order_date) AS year,
     COUNT(DATE_PART(year,order_date))
 FROM
     public.orders_ext_upd
 GROUP BY
     DATE_PART(year,order_date)
 ORDER BY
     DATE_PART(year,order_date);
 year | count 
------+-------
 2009 |  2114
 2010 |  2095
 2011 |  2092
 2012 |  2068
 2013 |  2114
 2014 |  2095
(6 rows)

スケジュール作成・設定の実践

Tableau Server: スケジュールの作成

ではここから本題に取り掛かりたいと思います。まずはタスク実践の実行サイクルを決める『スケジュール』の作成です。管理者でログインし、[スケジュール]タブからスケジュール一覧に遷移、[新しいスケジュール]をクリック。

tableau-server-schedule-extract_03

タスク実行に関するスケジュールの実行サイクルに関する要素の作成を行います。ここでは検証用に『毎時00分、1時間おきに実行』するスケジュールを作ってみました。

tableau-server-schedule-extract_04

スケジュール作成完了。一覧に要素が追加されました。

tableau-server-schedule-extract_05

対象データソースへの接続・抽出ファイルの作成

次はデータソースの作成及び抽出ファイルの作成を行います。検証用のAmazon Redshiftでデータソースを作成します。Tableau Desktopを起動後、対象データソースの種類を選択し、任意の接続情報を用いて接続。

tableau-server-schedule-extract_06

上記でデータを作成したスキーマ、テーブルを選択し、

tableau-server-schedule-extract_07

Tableau Desktop編集画面に遷移したらデータソースを右クリックし、[データの抽出]を選択。

tableau-server-schedule-extract_08

抽出ファイル作成に関する情報の設定を行います。ここでは増分更新を選択、受注日(order_date)を増分更新の際の判断基準として設定しました。

tableau-server-schedule-extract_09

この流れで抽出ファイルを任意の名前で保存します。

tableau-server-schedule-extract_10

続けて、この抽出ファイルをTableau Serverにパブリッシュ(アップロード)します。メニューの[サーバー]からサインインを選択し、

tableau-server-schedule-extract_11

所定のURL、認証情報を用いてサインイン。

tableau-server-schedule-extract_12

サインイン後、データソース(抽出ファイル)を右クリックし、[サーバーにパブリッシュ]を選択します。

tableau-server-schedule-extract_13

パブリッシュの際の設定を行います。ここでのポイントは『抽出の更新』の部分。増分更新の際に用いるサイクルを、先程Tableau Server上で作成したスケジュールで指定しています。この部分の設定で、任意の抽出ファイルの更新を任意の実行サイクルで実行する、という紐付けが為される訳ですね。併せて完全更新の設定、また認証情報の埋め込みも行なっています。

tableau-server-schedule-extract_14

Tableau Serverの[データソース]欄に、パブリッシュしたデータソースを確認する事が出来ます。

tableau-server-schedule-extract_15

今回は実際に処理は行いませんが、データソースを選択した状態で[アクション]→[抽出の更新]を選択してみると、

tableau-server-schedule-extract_16

このような形でデータソースに実行スケジュールが紐付けられている事を確認する事が出来ます。

tableau-server-schedule-extract_16-2

Tableau Server上の抽出ファイルを使ったワークブックの作成

これで、Tableau Server上にAmazon Redshiftのデータソースから作った抽出ファイルが乗っかりました。このデータソースを元にしたTableauワークブックを作ってみたいと思います。

Tableau Desktopから接続先『TableaU Server』を選択。

tableau-server-schedule-extract_17

Tableau Serverのサインインを求められるので従います。

tableau-server-schedule-extract_18

サインインが完了するとサーバ内に展開されているデータソースの一覧が表示されます。先程パブリッシュしたデータソースを選択し、ワークシートに移動。

tableau-server-schedule-extract_19

すると、従来のデータソースと同様にTableau Serverにパブリッシュした抽出ファイルを使ってビューやダッシュボードを作成する事が出来ます。試しに年毎の売り上げ情報を棒グラフで表示ししてみました。この時点では2014年までのデータが存在しています。

tableau-server-schedule-extract_20

上記作成した内容をワークブックとして保存し、

tableau-server-schedule-extract_21

Tableau Serverにパブリッシュします。

tableau-server-schedule-extract_22

パブリッシュ時の内容は特に設定変更せず、そのままです。

tableau-server-schedule-extract_23

パブリッシュ完了。

tableau-server-schedule-extract_24

Amazon Redshiftデータの追加

ここからはデータ追記を行います。抽出ファイルの更新スケジュール実施前であればRedshiftのデータを追記しても抽出ファイルに影響は無い事を確認してみます。

追加するデータは以下の内容。2015/01/01付のデータを追加するイメージです。

# SELECT
     order_id,
     DATEADD(year,4,order_date),
     priority, quantity, sales, discount_rate, ship_mode,
     profit, unit_price, ad_expenses, shipping_cost, customer_name, prefecture,
     city, area, shop_name, customer_segment, product_category, product_sub_category,
     product_id, product_name, product_description, product_container,base_margin,
     supplier, deliver_date, ship_date
 FROM
     public.orders_ext_upd
 WHERE
     order_date = '2011/01/01'
 ORDER BY
     order_date;
 order_id |      date_add       | priority | quantity | sales  | discount_rate |  ship_mode   | profit | unit_price | ad_expenses | shipping_cost | customer_name | prefecture |  city  |  area  | shop_name | customer_segment | product_category |  product_sub_category  | product_id |               product_name                |                                      product_description                                      | product_container | base_margin |   supplier    | deliver_date | ship_date  
----------+---------------------+----------+----------+--------+---------------+--------------+--------+------------+-------------+---------------+---------------+------------+--------+--------+-----------+------------------+------------------+------------------------+------------+-------------------------------------------+-----------------------------------------------------------------------------------------------+-------------------+-------------+---------------+--------------+------------
    42887 | 2015-01-01 00:00:00 | 中       |        3 |  62311 |          0.01 | 配送トラック | -25141 |      14598 |      414084 |          5192 | 南井 由利     | 埼玉       | 和光   | 関東   | Gibson    | 消費者           | 家具             | テーブル               | P261       | Bevis Rectangular Conference テーブル     | This is the field which has product description for Bevis Rectangular Conference テーブル     | 特大ボックス      |        0.69 | Global Source | 2011-02-22   | 2011-02-25
    36455 | 2015-01-01 00:00:00 | 高       |       48 | 229773 |          0.03 | 通常航空便   |  56143 |       3948 |      443007 |           199 | 叶田 和英     | 福島       | 二本松 | 東北   | Palmer    | 消費者           | テクノロジー     | コンピューター周辺機器 | P64        | 80 Minute CD-R Spindle 100/Pack - Staples | This is the field which has product description for 80 Minute CD-R Spindle 100/Pack - Staples | 小型パック        |        0.54 | Elan          | 2011-01-29   | 2011-02-01
    15079 | 2015-01-01 00:00:00 | 中       |       23 | 141348 |          0.01 | 通常航空便   |  46819 |       4891 |      249412 |           597 | 野邉 秀二     | 徳島       | 徳島   | 四国   | Parker    | 小規模事業所     | 事務用品         | 紙                     | P1167      | Xerox 1917                                | This is the field which has product description for Xerox 1917                                | 小型ボックス      |        0.38 | Global Source | 2011-03-13   | 2011-03-12
    47011 | 2015-01-01 00:00:00 | 高       |       33 |  46641 |          0.05 | 通常航空便   |  -3526 |       1129 |      376729 |           503 | 堤 毅彦       | 宮城       | 栗原   | 東北   | Greene    | 企業             | 事務用品         | 保管と整理             | P1260      | X-Rack File for Hanging Folders           | This is the field which has product description for X-Rack File for Hanging Folders           | 小型ボックス      |        0.59 | Compu Point   | 2011-05-24   | 2011-05-24
    32164 | 2015-01-01 00:00:00 | 指定なし |       12 |   9626 |          0.02 | 通常航空便   |  -1904 |        578 |      111473 |           496 | 瀧本 真二     | 北海道     | 根室   | 北海道 | West      | 小規模事業所     | 事務用品         | 紙                     | P1155      | Xerox 1899                                | This is the field which has product description for Xerox 1899                                | 小型ボックス      |        0.36 | Consolidated  | 2011-01-24   | 2011-01-25
(5 rows)
#

データ投入実施。計5件のデータが追加されました。

# INSERT INTO public.orders_ext_upd
 SELECT
     order_id,
     DATEADD(year,4,order_date),
     priority, quantity, sales, discount_rate, ship_mode,
     profit, unit_price, ad_expenses, shipping_cost, customer_name, prefecture,
     city, area, shop_name, customer_segment, product_category, product_sub_category,
     product_id, product_name, product_description, product_container,base_margin,
     supplier, deliver_date, ship_date
 FROM
     public.orders_ext_upd
 WHERE
     order_date = '2011/01/01'
 ORDER BY
     order_date;
INSERT 0 5
#
# SELECT
      DATE_PART(year,order_date) AS year,
      COUNT(DATE_PART(year,order_date))
  FROM
      public.orders_ext_upd
  GROUP BY
      DATE_PART(year,order_date)
 ORDER BY
      DATE_PART(year,order_date);
 year | count 
------+-------
 2009 |  2114
 2010 |  2095
 2011 |  2092
 2012 |  2068
 2013 |  2114
 2014 |  2095
 2015 |     5
(7 rows)

この状態でTableau Server上でもコンテンツを確認してみます。更新ボタンを押下しても、抽出ファイルの中身が変わって居ないのでデータはそのままです。

tableau-server-schedule-extract_25

抽出ファイル更新スケジュールの実行確認

スケジュールでは毎時00分の1時間毎と設定していましたので、しばし待機。そして予定時刻が来ました。

tableau-server-schedule-extract_26

頃合いを見計らってTableau Serverのスケジュール状況を確認します。ちゃんと実施がされているようです。

tableau-server-schedule-extract_27

タスクの詳細内容を確認してみます。この情報については、管理者であれば『バックグラウンドタスク』としてその内容を確認する事が可能です。該当のリンクを選択。

tableau-server-schedule-extract_28

以下の様な内容で抽出ファイルの更新が実行され、成功している事を確認出来ました。

tableau-server-schedule-extract_29

併せて、ワークブックの内容も確認してみます。データ件数が少ないので若干見づらくはありますが、ちゃんと2015年のデータが抽出ファイルに追記され、ワークブックの内容にも反映されている事が確認出来ました。

tableau-server-schedule-extract_30

 

まとめ

以上、Tableau Serverの『スケジュール』機能を活用したTableau抽出ファイルの更新実践のご紹介でした。大人数のコンテンツアクセスがあるような場合だと、このような形で抽出ファイルを活用する方法はとても有用な手段となります。状況に応じてこの辺りは活用して行きたいところですね。こちらからは以上です。