Virtual DataPort 7.0 の変更点

ここでは、Virtual DataPort 7.0 で Virtual DataPort 6.0 から変更された機能について紹介します。

権限

CONNECT 権限

Denodo 7.0 では、データベースのエレメントへのアクセスをユーザーに許可するためには、そのデータベースに対する CONNECT 権限をユーザーに付与する必要があります。CONNECT 権限がユーザー/ロールにないと、データベースまたはデータベースのエレメントに対するその他の権限は無視されます。

以前のバージョンでは、CONNECT 権限はコネクションの確立時にしか確認されていませんでした。

この変更に伴い、データベースに対してすでに他の権限を持っているユーザー/ロールには、そのデータベースに対する CONNECT 権限を付与してください。

ロール「serveradmin」を持つユーザーの権限

Denodo 6.0 では、「serveradmin」ロールを持つ LDAP/Kerberos ユーザーに、そのユーザー自身を含め、ユーザーおよびロールの権限の付与/取り消しを行うことを許可するオプションがありました。このオプションは、[Server configuration] の [Privileges] タブにありました。

このバージョンには、このオプションはありません。そのため、このようなユーザーは Active Directory の「assignprivileges」に追加する必要があります。

VQL 構文の変更点

ステートメント ALTER DATABASE がパラメーター I18N を受け入れなくなりました。


CONTEXT のパラメーター PASSWORD では、パスワードが暗号化されていることを示すために、トークン ENCRYPTED を追加することが必須になりました。以下に例を示します。

SELECT *
FROM view1
CONTEXT(USERNAME = 'admin', PASSWORD = 'd4GvpKA5BiwoGUFrnH92DNq5TTNKWw58I86PVH2tQIs/q1RH9CkCoJj57NnQUlmvgvvVnBvlaH8NFSDM0x5fWCJiAvyia70oxiUWbToKkHl3ztgH1hZLcQiqkpXT/oYd' ENCRYPTED)

この変更は次のビューに影響を与えます。

  • JDBC、Web サービス、BAPI、または多次元のデータソースからデータが取得されるもの。

  • データソースがオプション「with pass-through session credentials」を指定して作成されているもの。

  • これまでサーバーへの接続に使用していた資格情報とは別の資格情報を使用して、ソースに接続したいもの。

データ型の変更点

Denodo 7.0 では、日時の値を表す新しい型が導入されました。

  • localdate: タイムゾーンを考慮することなく、日付を年、月、日で表します。

  • time: 時刻を時間、分、秒、秒以下の端数で表します。

  • timestamp: タイムゾーンを考慮することなく、日付と時刻を表します。

  • timestamptz: 日付と時刻およびタイムゾーンを表します。

  • intervaldaysecond: 日数、時間数、分数、秒数を単位とする期間。

  • intervalyearmonth: 年数および月数を単位とする期間。

date 型は非推奨になりました。

関数 current_date() (および同等機能 CURRENT_DATE) は localdate 型の値を返すようになりました。

関数 now() (および同等の CURRENT_TIMESTAMP) は timestamptz 型の値を返すようになりました。

Denodo 7.0 では、Virtual DataPort が、 timestamptz データ型に対応していないデータベースに、この型の入力パラメーターを使用する関数を委任することはありません。 timestamptz 型の値を操作するほとんどの関数の結果は、クエリのタイムゾーン (つまり、クエリの i18n) に依存するからです。以下に例を示します。

SELECT gethour(TIMESTAMP WITH TIME ZONE '2020-01-01 00:00:00 +00:00')

このクエリに i18n rfc_restful (GMT) を指定した場合は 0 が返され、i18n us_pst を指定した場合は 15 が返されます。タイムゾーン付きのデータ型に対応していないデータベースには、タイムゾーン間で変換を行う関数がないので、予期される関数の結果との整合性を図るために Virtual DataPort はそのような関数を委任しません。

このルールの例外として、関数 now() (および同等の CURRENT_TIMESTAMP) は、次の理由により、7.0 のすべてのソースに委任されます。

  1. 下位互換性を確保するため

  2. 既存のプロジェクトに大きな影響があるため。つまり、この関数は多くのクエリで使用されているため、タイムゾーンの違いによってクエリが正しい結果を返さない場合があっても、この関数をすべてのデータベースに委任するほうが得策です。

    関数 now() からは timestamptz 値が返されるので、関数 now() に対して別の関数を適用する構造体は、timestamptz 型に対応していないデータベースに委任されないことに注意してください。


Denodo 7.0 では、SOAP Web サービスの [Date type mapping] 設定は、 date (非推奨) 型のフィールドにのみ作用し、 timestamptimestamptzlocaldate には作用しません。この影響の 1 つとして、[Date type mapping] を [date] に設定した Web サービスで、関数 now() を投影するフィールドがある場合、日付のみが返されていた Denodo 6.0 とは異なり、タイムゾーン付きのタイムスタンプが Web サービスの応答に含まれるようになります。今後も (時間の要素を含まない) 日付のみを返すようにするには、 now() の代わりに current_date() を使用してください。

これらの新しいデータ型については、セクション「 data types for dates and timestamps 」で詳しく説明しています。

新しい型のほうが動作が一貫しているうえに使いやすいので、新しい型を使用するようにビューの定義を変更することをお勧めします。デフォルトでは、「date」はタイムゾーン付きのタイムスタンプであるというのが主な理由です。

Administration Tool が実行されているコンピュータの言語設定にかかわらず、日時の値は次の形式で表示されます。

Administration Tool の日時の値の形式

データ型

形式

localdate

yyyy-MM-dd (<year>-<month>-<day>)

例: 「2018-12-31」

timestamp

yyyy-MM-dd HH:mm:ss.S (<date> <time>)

例: 「2018-12-31 23:58:05.15673」

timestamptz

yyyy-MM-dd HH:mm:ss.S XXX (<date> <time> <time zone>)

例: 「2018-12-31 23:59:05.15673 -08:00」

time

HH:mm:ss.S (<hour>:<minute>:<second>.<millisecond>)

例: 「23:15:05.15673」

サブタイプ DATE の date (非推奨)

yyyy-MM-dd (<year>-<month>-<day>)

例: 「2018-12-31」

サブタイプ TIMESTAMP またはサブタイプ TIMESTAMP WITH TZ の date (非推奨)

yyyy-MM-dd HH:mm:ss.S XXX (<date> <time> <time zone>)

例: 「2018-12-31 23:59:05.15673 -08:00」

サブタイプ TIME の date (非推奨)

HH:mm:ss.S (<hour>:<minute>:<second>.<millisecond>)

例: 「23:15:05.15673」

このツールでは、クエリの結果をファイルに保存するときにも、これらの形式が使用されます。

異なる形式の日時値をクエリで表示するには、関数 FORMATDATE を使用してください。

Date 型を使用する検索フィールド

Denodo 6.0 インストール環境からVQLをエクスポートする プロセスでは、次のプロパティを設定することをお勧めします。

SET 'com.denodo.exportMigrationCompatibility80' = 'true';
SET 'com.denodo.vdb.catalog.exportMigrationCompatibility.migrateDateTypes' = 'true';

このセクションで説明しているように、これらのプロパティを設定すると、Denodo サーバー 6.0 は date フィールドを解析して、新しい日時型のいずれかにエクスポートできるかどうかを調べます。

また、いつでも Denodo 7.0 の MIGRATE_DATE_TYPES プロシージャを使用して、自動的に型を移行することができます。

ここでは、まだ date 型のフィールドを持つビューを検索する方法と、そのようなビューの変更方法について説明します。

手順 #1

新しい Denodo 7.0 インストール環境で次の VQL ステートメントを実行します。

-- Materialized table that returns information about base views, interface views
-- and materialized tables, but not derived views.
CREATE MATERIALIZED TABLE view_summary AS
SELECT database_name
    ,name
    ,view_type
FROM GET_VIEWS()
WHERE view_type IN (0, 2, 3)
CONTEXT('queryTimeout' = '120000');

-- Materialized table that returns information about the columns of
-- type "date".
CREATE MATERIALIZED TABLE view_date_column_summary AS
SELECT database_name
    ,view_name
    ,column_name
    ,column_vdp_type
    ,column_sql_type
FROM GET_VIEW_COLUMNS()
WHERE column_vdp_type = 'date' CONTEXT('queryTimeout' = '120000');

手順 #2

次のクエリを実行します。基本ビュー、インターフェイスビュー、マテリアライズドビューの「date」型のフィールドが返されます。派生ビューの多くは基盤となるビューから型が継承されるため、派生ビューは含まれていません。

SELECT v.database_name
    ,v.name
    ,c.column_name
    ,c.column_vdp_type
    ,c.column_sql_type
FROM view_summary v
INNER JOIN view_date_column_summary c ON v.database_name = c.database_name
    AND v.name = c.view_name CONTEXT('queryTimeout' = '120000');

手順 #3

結果の各フィールドについて、新しいデータ型のいずれかに型を変更することをお勧めします。

  • 基本ビューの場合は、基盤となるデータベースのテーブルの列の型と一致する型を選択します。

  • インターフェイスビューの場合は、フィールドの定義を変更します。

  • マテリアライズドビューの場合は、「date」の代わりに新しい型のいずれかを使用してビューを再作成します。

手順 #4

次のクエリを実行します。派生ビューを含め、「date」型のフィールドが返されます。

SELECT database_name
    ,view_name
    ,column_name
    ,column_vdp_type
    ,column_sql_type
FROM GET_VIEW_COLUMNS()
WHERE column_vdp_type = 'date' CONTEXT('queryTimeout' = '120000');

手順 #5

次の場合、派生ビューのフィールドの型は date のままです。

  1. フィールドが、基盤となるビューのいずれかで「date」型として定義されている。

  2. フィールドが date を返す式の結果である。たとえば、フィールドが式 TO_DATE の結果である場合、そのフィールドの型は date になります。この場合は、代わりに新しい関数 (入力フィールドの型に応じて TO_LOCALDATETO_TIMETO_TIMESTAMP または TO_TIMESTAMPTZ) のいずれかを使用する必要があります。

「Date」の減算で Long が返されるようになった

date 型の 2 つの式の減算 (<expression 1> - <expression 2>) の結果は、<expression 1> と <expression 2> の間の日数です。<expression 1> のほうが <expression 2> より新しい日時であれば結果は正の数になります。そうでない場合は、負の数になります。

Denodo 6.0 では、この数は int 型になります。Denodo 7.0 では、この値は long 型になります。非常に稀なケースではありますが、この変更によってクエリが失敗する場合があります。失敗した場合は、そのビューまたはクエリを変更してください。

この変更の詳細については、『VQL ガイド』の「 日時値と間隔値の算術演算子 」セクションを参照してください。

下位互換性に関するプロパティ

ここでは、「date」型の値について、以前のバージョンの Denodo の動作に戻す方法を説明します。戻す方法はありますが、これらを使用するのではなく、代わりに新しい日時型に切り替えることをお勧めします。

  • 実行エンジンが暗黙的にテキストの値を日時の値に変換することがあります。以前のバージョンでは、このような変換の結果は「date」型の値でした。Denodo 7.0 では、「date」ではなく新しい日時型のいずれかにリテラルが変換される可能性があります。

    以前のバージョンの動作を維持するには、VQL Shell から次を実行してください。

    SET 'com.denodo.vdb.parser.datetime.literals.transformToOldToDateFunction' = 'true';
    
  • Denodo 7.0 では、Java ソースコードで入力パラメーターを使用するか、Java クラス java.util.Calendar のオブジェクトを返すカスタム関数が、「timestamptz」値を返すようになりました。以前のバージョンでは、「date」を返していました。

    以前のバージョンの動作を維持するには、VQL Shell から次を実行してください。

    SET 'com.denodo.vdb.compatibility.datetime.custom.mapCalendarToDateType' = 'true'
    
  • 一時テーブルでは新しい日時型が使用されます。以前のバージョンでは、「date」が使用されていました。以前のバージョンの動作を維持するには、VQL Shell から次を実行してください。

    SET 'com.denodo.vdb.parser.datetime.createsqltable.mapDateTimeToOldDateType' = 'true'
    

ストアドプロシージャの変更点

VIEW_DEPENDENCIES プロシージャ

このストアドプロシージャを呼び出し、ターゲットに storedprocedure 型の依存関係が存在している場合に、それが事前定義プロシージャであれば、値 Predefined Storedprocedure が返されるようになりました。

GET_CATALOG_METADATA_WS プロシージャ

このストアドプロシージャを呼び出して Web サービスに関する情報を取得できるようになりました。

GET_ELEMENTS および GET_VIEWS プロシージャ

これらのプロシージャでマテリアライズドテーブルと基本ビューが区別されるようになりました。以前のバージョンでは、これらのプロシージャはマテリアライズドビューを基本ビューと見なしていました。

これらのプロシージャの結果では、 subtype フィールドの値は materialized で、 view_type の値は 3 です。

コスト最適化の変更点

コスト最適化の計算に内部的な変更がいくつか加えられた結果、データ移動などの操作に関係するクエリプランが、以前のバージョンから変わる可能性があります。

DECIMAL フィールドのサブタイプ

DECIMAL フィールドを含む基本ビューを新規作成すると、フィールドのサイズに最も合うサブタイプ INTEGERBIGINT または DECIMAL が使用されることになります。

以前のバージョンの動作に戻すには、VQL Shell から次を実行してください。

SET 'com.denodo.vdb.admin.model.wrapper.convertExactDecimaltoIntegerSubtype' = 'false'

JDBC データソース

Oracle

Denodo 7.0 GA 以降、JDBC データソースで Oracle へのコネクションを開くと、ただちにそのコネクションで次のコマンドが実行されるようになりました。

ALTER SESSION SET NLS_DATE_FORMAT= 'YYYY-MM-DD';

こうすることで、日時値のパターンが Oracle の構成に依存しなくなります。以前のバージョンの Denodo で SQL クエリから基本ビューを作成していた場合は、その SQL クエリの日時フィールドに対する条件が不適切な形式となり、クエリが失敗する可能性があります。その場合は、パターン「YYYY-MM-DD」 (<year>-<month>-<day>) に従う日時値になるようにクエリを変更してください。たとえば hire_date >= DATE '2018-02-03' のように変更します。

Apache Hive

Apache Hive ドライバーは配布されなくなりました。

Apache Hive 0.7、0.10、0.11 および 0.12 のアダプターは廃止されました。これらを使用している場合は、代わりに Apache Hive 0.13 のアダプターを使用してください。

注釈

Cloudera または Hortonworks の Hive に接続している場合は、各 Hive に固有のアダプターを使用してください。汎用的な Apache Hive アダプターは使用しないでください。

Impala JDBC ドライバー

ライセンスの制約のために、Impala の JDBC ドライバーは配布されなくなりました。

DenodoConnect コンポーネント: Salesforce ラッパー

Denodo 7.0 以降、Denodo では Salesforce.com のネイティブデータソース を利用できます。 DenodoConnect コンポーネントは積極的には保守されなくなるので、Salesforce からデータを取得しているユーザーには、DenodoConnect コンポーネントの使用を止めて、新しいデータソースを使用することをお勧めします。

Java 8 でコンパイルされた Denodo JDBC ドライバー

Denodo 7.0 以降、Denodo JDBC ドライバーは Java 8、9、10 および 11 に対応しています。Denodo JDBC ドライバーを使用していて、これ以前のバージョンの Java で実行されているクライアントアプリケーションは更新する必要があります。

Denodo 6.0 のドライバーは Java 7 および Java 8 に対応しています。Denodo 5.5 のドライバーは Java 6 に対応しています。

以前のバージョンの Denodo の JDBC ドライバーを使用して Denodo 8.0 に接続することも、バージョン 8.0 の JDBC ドライバーを使用して以前のバージョンに接続することもできません。