JavaとSQLのエンジンを使ってカラム分析を実行した場合の異なるプロファイリング結果
週頻度と週低頻度インジケーターを使うカラム分析のプロファイリング結果は、JavaエンジンとSQLエンジンの間で異なる場合があります。
JavaまたはSQLのエンジンを使って週頻度と週低頻度インジケーターによるカラム分析を実行すると、異なる結果が得られる場合があります。
これは、異なるデータベースシステム(DBMS)の間で、または同じDBMSシステムの異なるインストールの間ですら、日付ファンクションが異なる場合があるためです。
MySQLのWEEK(date [,mode]) ファンクションを例に挙げてみましょう。詳細は、日付と時刻のファンクションをご覧ください。このファンクションはdateの週番号を返します。以下を指定できる2引数形式が必要です。
- 週が日曜と月曜のどちらで始まるか
- 戻り値の範囲を0から53または1から53のどちらにするか
SQLエンジンの場合、Talend StudioはファンクションWEEK(date) を使います。mode引数が省略されるため、Talend StudioはDBMS設定で指定されているデフォルトのmode値(一般にはmode=0)を使います。ただし、これはMySQLのインストールによって異なります。
しかし、このデフォルト動作を変更する必要がある場合は、UDI (ユーザー定義インジケーター)を作成し、使用するモードをSQLクエリーテンプレートで指定できます。
Javaエンジンの場合、Talend StudioはパラメーターLocale.getDefault() を使って上記の2つの引数を確認し、Java APIから結果を取得します。つまり、Talend Studioのロケールを使い、DBMSのロケールは使いません。
(低)週頻度インジケーターおよびその他の日付ファンクションを使って、JavaとSQLのエンジンの間でプロファイリング結果が異なる場合があるのは、このためです。