
Tableauに接続しているBigQueryのViewに新しいカラムを追加した時に
「あれ?データ更新(抽出更新)したのにTableauに表示されない、、、」
という不具合に遭遇する時がたまにある。
なかなか原因の把握に時間が掛かることが多いので、本記事で原因と対処法を備忘録として記録しておこうと思う。
目次
原因と対処法
BigQueryのViewにカラムを追加したのにTableauに反映されない原因としては主に4つの可能性がある。
- 抽出更新でうまくViewの変更が取得できていない(修正前のViewを読み込んでいる)
- Tableauのデータソース接続の段階でカラムが非表示になっている
- BigQueryのViewのスキーマに該当のカラムが表示されていない
- Tableauで読み込めないデータ型のカラムをBigQueryのViewで追加している
1つずつみていこう。
抽出更新でうまくViewの変更が取得できていない(修正前のViewを読み込んでいる)
これは結構ありがちだ。
抽出更新しているが、修正前のViewを更新していて、修正後のViewのデータを取得できていない。
だから、新しいカラムが追加されないという状態だ。
裏側でキャッシュが残っていて、修正前のViewを読み込んでしまっているのかもしれない(詳細は把握できていない)
解決策は下記のようにワークブックのデータソースシートに移動し、現在のBigQueryの接続を編集して再度接続し直すことだ。
下記はTableau Desktopの例だが、左上の接続スペースにある BigQuery の↓矢印をクリック→表示される「接続の編集」から再度認証をし直せば、最新のViewのデータを取得できる。
上記のように、再度認証し直すことでViewの反映がされる場合がある。
まずは、これを試してみてほしい。
Tableauダッシュボード上でデータソース接続の段階でカラムが非表示になっている
もう1つ、Tableau側の問題でカラムが表示されない原因として、「データソースシートのカラムには表示されているのに、シートに移動するとカラムが表示されていない」という場合だ。
これは私も数年Tableauの経験があった状態で、思い切りハマったことがある(笑)
Tableauのデータソースシートに「フィールド」という欄があり、ここに接続したデータソースのカラム一覧が表示される。
この段階でカラムが非表示になっている場合があるので、それを下記のように表示させてみる。
もしここでBigQueryのViewに追加したカラムが表示された場合は、Viewの変更がTableau側で反映されている状態だ。
そのため、あとは「対象のカラムを右クリック」→「再表示」をクリックでOKだ。
これを実施することで今までデータペインに表示されてなかったカラム(上記例の場合はTitle)が表示されるようになる。
BigQueryのViewのスキーマに該当のカラムが表示されていない
もし上記2つの方法を試しても、BigQueryのViewに追加したカラムが表示されない場合はBigQuery側に原因があることを考えよう。
私自身が経験があるのは、BigQuery上でViewのスキーマに対象のカラムが反映していない場合だ。
これは恐らくBigQueryのバグだと思うのだが、BigQuery上でViewを実行すると実行結果に表示されるのに、Viewのスキーマ(下記)には追加したカラムが表示されていない場合だ。
Viewで追加したカラムは本来このスキーマに表示されるが、追加したカラムがこのスキーマに出てこない時がたまにあった。
Tableau側が抽出更新等をして、最新のViewのデータを取得する時、このスキーマにあるカラムを認識する。
そのため、BigQueryのViewのスキーマ上に表示されていないカラムはTableauでも認識できないのだ。
これの解決方法はすごく簡単で、Viewを改行して戻すなど少しだけ修正して、ビューを保存し直すだけだ。
恐らくこれが発生するのは「対象のViewが子Viewを読み込んでいる構成になっている場合に、子View側にカラムを追加した場合」だ。
親View(子Viewを読み込んでいるView)は変更していないから、カラムの変更が親Viewに反映していないのが原因と思われる。
Tableauで読み込めないデータ型のカラムをBigQueryのViewで追加している
最後は、Tableauで読み込めないデータ型のカラムをBigQueryのViewで追加している場合だ。
これは私も1回だけ実際に経験したことがある。
BigQueryでは下記のように4種類の日時に関するデータ型を使うことができる。
一方で、Tableauが対応しているのは下記2つだ。
- 日付
- 日付と時刻
そのため、時刻の情報しか持たない TIME型 のカラムをBigQueryで追加した場合に、Tableau側で認識できず、恐らくそのカラムだけ無視される。
それにより、Viewの変更がTableauに反映していないように見えるのだ(最新のViewを取得しているのに)
この場合の対処法は下記だ。
- TIME型のカラムをCAST関数等で文字列に変換し、文字列型のカラムにする
- TIME型に日付の情報を持たせて、DATETIME型やTIMESTAMP型に変換する
要はTableauが対応しているデータ型に変換してしまえばいい。
本来はTableau側で対応していないデータ型を取得する時にエラーを出してくれればいいのだが、、、
以上、4つの方法で対応すれば、どれかの方法で恐らくこの不具合は解消できるはずだ。
ぜひ参考にしてみてほしい。
次の章は余談なので、時間がある人だけ読んでもらえれば嬉しい。
原因調査の方法
私がこのようなBigQueryとTableauの接続関係の不具合で原因調査を行う際によく行う方法を簡単に整理する。
原因調査で大切なのは仮説思考と原因の切り分け。
最初に行うのは、Tableau側に原因があるのか、BigQuery側に原因があるのかを大きく切り分けることだ。
まず「Tableau側に原因があるのでは?」と仮説を立てて、下記3つを試す。
- 該当のTableauのデータソースシートでBigQueryの接続をし直してから、抽出更新する
- 新しいTableauワークブックで該当のViewを接続して、該当のカラムが表示されるかをチェック
- これを実行する理由は新規ワークブックでBigQueryに接続するとキャッシュ関係なく、最新のViewのデータを取得できるからだ。
- ワークブックのデータソースシートで非表示になっているカラムを表示させて、Viewに追加したカラムが表示されるかをチェック
- これで表示されれば、Tableau側にViewの変更は反映されているとわかる。
上記を実施することで、Tableau側のせいで、Viewに追加したカラムが表示されていないかどうかを判別できる。
もし上記で反映していなければ、「Tableau側に問題はなさそうだから、BigQuery側に原因がありそうだ。」と次の仮説が立つ。
そして、下記を1つずつチェックしていく。
- BigQueryのスキーマに追加したカラムが表示されているか?
- Tableauが対応していないデータ型をViewで使っていないか?
このような感じで順を追って1つ1つの原因の仮説を潰していくことが、不具合の原因を発見するコツだと個人的に思っている。
少しでも参考になれば幸いだ。