受信データに対するデフォルトのタイムゾーンの設定

日付に関するタイムゾーン情報が受信データにないときに使用するデフォルトのタイムゾーンを指定できます。

デフォルトのタイムゾーンを設定することによって、データベースから日時の値を読み取る際に、次のシナリオを回避できます。データベース内の値は、様々な日付の午前0時を示している場合も考えられます。ただし、Dgraphで (たとえば、Studioを通じて)値を見ると、同じ日付に4amのタイムスタンプが付いて表示されている場合も考えられます。この時刻の差が、アプリケーションのロジックおよびEQL文に影響を与えることが考えられます。

Integrator ETLが時刻の値を解析する際、その値に明示的なタイムゾーン指定子が含まれている場合を除き、デフォルトで現在の時刻を使用することがその理由です。Information Discoveryコンポーネントは、時刻の値を正しくDgraphに送信しており、DgraphはそれらをUTCの値として内部的に格納していました。Dgraphの問合せサービスは値をUTCでのみ返すため、Studioが4amの値を表示するようになります。

このユースケースで重要な要因は、タイムスタンプにおけるエンドツーエンドの一貫性です。したがって、解決方法は、これらのタイムスタンプをUTCとして解釈することです。それには3通りの方法があります。

方法1: ソース・データを変更する

最初の方法は、タイムスタンプを含むようにソース・データを変更し、それを反映するようにIntegrator ETLの書式文字列を(たとえば、dd.MM.yyyy HH:mm:ssからdd.MM.yyyy HH:mm:ss zに)変更することです。

この方法のメリットは、既存のグラフにコンポーネントを追加する必要がないということです。ただし、このアプローチは、次の2つほど訴求力のあるものではありません。この方法では、データはデータベースから取得されるものであり、変更はデータベースで行う必要があるからです。

方法2: Reformatコンポーネントを使用する

2番目の方法は、Integrator ETLにおいて、タイムスタンプを文字列として扱い(つまり、メタデータ定義の変更)、(Reformatコンポーネント内などで) CTL式を記述して、明示的なタイムゾーン(「UTC」)を付加し、それを日付の値に構文解析することです。

CTLコードのサンプルは次のようになります。
$0.OrderDate = str2date($0.OrderDate + " UTC", "dd.MM.yyyy HH:mm:ss Z");

方法3: JVMを構成する

3番目の方法は、Integrator ETLグラフを実行しているJVMでのデフォルトのタイムゾーンをUTCに変更することです。これは、次の引数を指定することによって実現できます(引用符が重要です)。
"-Duser.timezone=UTC"

この引数を、「実行」 > 「実行構成」 > launch-config > 「引数」タブ > 「VM引数」に追加します(launch-configは、変更する構成の名前です)。

注意: このオプションを選択した場合、Integrator ETL Serverで構成を実装する必要もあります。WebLogic ServerコンテナにIntegrator ETL Serverをインストールする際のJVM構成追加の詳細は、『Oracle Endeca Information Discovery Integrator ETLインストレーション・ガイド』のIntegrator ETL ServerのWebLogicへのインストールに関する説明を参照してください。TomcatコンテナにIntegrator ETL Serverをインストールする際のJVM構成追加の詳細は、『Oracle Endeca Information Discovery Integrator ETLインストレーション・ガイド』のTomcat構成の推奨事項に関する説明を参照してください。