9.2. 委譲トランストラクター


コアの Data Virtualization インストールで利用可能な 委譲 トランスレーターを使用して、既存のトランスレーターの機能を変更できます。デバッグの目的で多くの場合、または特別な状況では、トランスレーターの特定の機能をオンまたはオフにしたい場合があります。たとえば、最新バージョンの Hive データベースは ORDER BY コンストラクトをサポートしますが、Hive translator の現在の Data Virtualization バージョンはサポートされません。委譲トランスレーターを使用して、実際にコードを作成せずに ORDER BY 互換性を有効にできます。同様に、逆順を実行し、特定の機能をオフにして、より良いプランを作り出すことができます。

委譲トランスレーターを使用するには、DDL で定義する必要があります。以下の例は、"hive" translator を上書きし、ORDER BY 機能を無効にする方法を示しています。

CREATE DATABASE myvdb;
USE DATABASE myvdb;
CREATE FOREIGN DATA WRAPPER "hive-delegator" TYPE delegator OPTIONS (delegateName 'hive', supportsOrderBy 'false');
CREATE SERVER source FOREIGN DATA WRAPPER "hive-delegator" OPTIONS ("resource-name" 'java:hive-ds');
CREATE SCHEMA mymodel SERVER source;
SET SCHEMA mymodel;
IMPORT FROM SERVER source INTO mymodel;
Copy to Clipboard Toggle word wrap

実行プロパティーを使用して上書きできるトランスレーター機能の詳細は、『Translator Development Guide』 の「 Translator_Capabilities 」を参照してください。上記の例は、Hive translator のデフォルトの ORDER BY 互換性を変更する方法を示しています。

9.2.1. 委譲トランスレーターの拡張

org.teiid.translator.BaseDelegatingExecutionFactory を拡張してトランスレーターを作成できます。クラスがカスタムトランスレーターとしてパッケージ化された後に、別のトランスレーターインスタンスを実行時に委譲して、委譲へのすべての呼び出しをインターセプトできます。このベースクラスは委譲以外の独自の機能を提供しません。トランスレーターは、DDL 設定の一部として定義するのではなく、トランスレーターにハードコードすることができます。代替の動作を提供するためにメソッドを上書きすることもできます。

Expand
表9.2 実行プロパティー  

名前

説明

デフォルト

delegateName

委譲先となる Translator インスタンス名。

該当なし

cachePattern

トランスレーターキャッシュ API を使用してキャッシュされる必要があるクエリーの正規表現パターン。

該当なし

cacheTtl

キャッシュパターンに一致するクエリーの有効期間(ミリ秒単位)。

該当なし

 

たとえば、仮想データベースで oracle トランスレーターを使用し、トランスレーターを通過する呼び出しをインターセプトする場合は、以下の例のようにカスタム委譲のトランスレーターを作成できます。

@Translator(name="interceptor", description="interceptor")
public class InterceptorExecutionFactory extends org.teiid.translator.BaseDelegatingExecutionFactory{
    @Override
    public void getMetadata(MetadataFactory metadataFactory, C conn) throws TranslatorException {
        // do intercepting code here..

        // If you want call the original delegate, do not call if do not need to.
        // but if you did not call the delegate fullfill the method contract
        super.getMetadata(metadataFactory, conn);

        // do more intercepting code here..
    }
}
Copy to Clipboard Toggle word wrap

その後、このトランスレーターを Data Virtualization エンジンにデプロイできます。次に DDL ファイルで、以下の例のようにインターセプタートランスレーターを定義します。

CREATE DATABASE myvdb VERSION '1';
USE DATABASE myvdb VERSION '1';
CREATE FOREIGN DATA WRAPPER "oracle-interceptor" TYPE interceptor OPTIONS (delegateName 'oracle');
CREATE SERVER source FOREIGN DATA WRAPPER "oracle-interceptor" OPTIONS ("resource-name" 'java:oracle-ds');
CREATE SCHEMA mymodel SERVER source;
SET SCHEMA mymodel;
IMPORT FROM SERVER source INTO mymodel;
Copy to Clipboard Toggle word wrap

上記からのカスタムトランスレーター「 インターセプター 」に基づく「translator」オーバーライドを定義し、委譲名として「oracle」に委譲する必要があるトランスレーターを提供しました。次に、VDB でこのオーバーライド translator oracle-interceptor を使用しています。この VDB モデルのトランスレーターに今後の呼び出しは、コードによって傍受され、どのような操作を行うことができます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat