
Omniで参照先のスキーマ名を変更してしまった際の検知・修正をContent Validatorを用いてやってみた
さがらです。
Omniでは参照先のテーブル名やフィールドの名称変更があったときにまとめて検知・修正できる「Content Validator」という機能が備わっています。
この機能を試しながら、参照先のスキーマ名を変更してしまった際の対処を行ってみたので、本記事で内容をまとめてみます。
やること
Omniが参照しているdbtで作られたスキーマについて、generate_schema_nameのマクロの仕様を変更して出力先のスキーマが全く異なってしまった、という状況であるとします。
こうすると、Omniで定義していたダッシュボードにおいて下図のようにエラーとなってしまいます。この状況を、Content Validatorを使って解決していきます。

注意点
本来のOmniの機能をフル活用するのであれば、OmniのWorkbookでブランチを切った際にdbtの開発スキーマを動的に参照できるDynamic Schemaという機能があるため、これを使ってOmniで公開されているダッシュボードに影響与えずに対処すべき事案です。
ただ、このDynamic Schemaについてのブログは近日中に書こうと思っておりますので、一旦本記事では「本番環境のスキーマの参照先を急に変えてしまったらOmniのダッシュボードも見れなくなってしまった、という状況をどうContent Validatorで解決するか」という観点で見て頂けますと幸いです。
やってみた
スキーマ情報のリフレッシュ
まず、Content Validatorを使うには、Shared ModelのIDEを開く必要があります。メニューのDevelopから対象のModelを選択すればOKです。

Shared ModelのIDEを開いたら、今回はスキーマレベルの変更を行ったため、古いスキーマ情報が残っていることがあると思います。そのため、スキーマ情報をリフレッシュする必要があります。
Shared ModelのIDE上部のModelからRefresh schemaを押します。

その後、特に入力はせずにRefresh schemaを押します。

すると、Shared ModelのIDE下部で、下図のようにエラーが起きると思います。

Content Validatorの起動と修正
Shared ModelのIDEで、画面左のContent Validatorを押します。

すると、下図のようにContent Validatorの画面が表示され、このShared Modelを参照していてエラーとなっているModelの一覧が表示されると思います。エラーを見ると、Table 'prod__orders' not foundとなっていますね。

修正するため、エラーの横にあるReplaceを押します。

表示された画面で、VIEW to replaceには<変更前のスキーマ名>_<view名>を入れて、Replace withには<変更後のスキーマ名>_<view名>を入れればOKです。この後で、Replaceを押します。

これでダッシュボード側の参照は正しくなったのですが、まだエラーがあるためShared Modelの定義自体を修正していきます。(フィールド名の修正などであれば、このタイミングで修正が終わっているはずです…。)

Content Validatorだけで修正できなかった箇所をブランチを切って修正
今回は参照するスキーマを変更するというちょっと劇的なことを行ってしまったため、Content Validatorだけで修復を終えることができませんでした。
そのため、新しいブランチを切って修正を行っていきます。(事前にOmniとGitHubの連携は済んでいるとします。)
- 新しいブランチを作成


- SCHEMAS欄の一番上にスキーマの参照先の変更により行き場を見失ったカスタムのdimensionとmeasureが定義されたviewがあるため、これをコピーして参照先のスキーマを変更した上で正しいviewファイルの適切な位置に貼り付け・修正



- relationshipsのview名も誤っているため、修正

- topicsのview名も誤っているため、修正

- 最後に不要となった以前のviewファイルを削除

- ブランチを切った状態で実際にWorkbookを見て問題なく、エラーもすべて消えたことを確認したら、プルリクエストを発行し、マージする


この一連の作業を行ったことで、エラーとなっていたダッシュボードを無事復旧できました!

最後に
Omniで参照先のスキーマ名を変更してしまった際の検知・修正をContent Validatorを用いてやってみたので、その内容をまとめてみました。
スキーマを変更してしまうとContent Validatorの修正だけでは済まなかったのですが、コードの修正時はブランチを切りながら対処することでコンテンツの動作確認も行えるのはとても良いなと思いました!(ただ、ダッシュボード1つでも大変だったので、参照するスキーマの変更はなるべく避けたいですね…)
修正手順はもう少しスマートなやり方があるかもしれませんが、この記事の内容が1つの参考となれば幸いです。










