12.2. リレーショナルビューのモデリング


12.2.1. マテリアライズドビューの作成

リレーショナルビューテーブルでは、以下のように Materialized プロパティーを TRUE に設定し、Materialized Table 参照を設定するとマテリアライズドビューオプションを有効にできます。リレーショナルテーブルがすでに作成済みである必要があります。

図12.11 Materialized テーブルプロパティー

Teiid Designer には、既存のビューテーブルを基にしたマテリアライズドリレーショナルテーブルを即座に作成できる機能が含まれています。
マテリアライズドビューを作成するには、以下を実行します。
  1. マテリアライズプロセスは一度に 1 つのビューで実行されます。マテリアライズするビューを選択してから、Model Explorer View のビューテーブルを右クリックし、Modeling > Create Materialized Views と選択します。(2 つ以上のテーブルを選択しないと、別のコンテキストメニューとウィザードが表示されることに留意してください。)
  2. Create Materialized View Model ダイアログで、生成されたリレーショナルテーブルの目的のリレーショナルモデルを指定または選択します。
  3. Browse ... ボタンを選択すると Relational Model Selector ダイアログが表示されます。このダイアログでは、既存のリレーショナルモデルを選択したり、新しいモデルの一意名を指定したりできます。
  4. OK をクリックして、選択したビューテーブルに対応するリレーショナルテーブルを作成します。Materialized プロパティーを自動的に TRUE に設定し、Materialized Table 参照値を新たに生成されたテーブルに設定します。
終了後、ビューテーブルが新しい materialized プロパティーで設定され、対応するリレーショナルテーブルがパッケージ図に表示されます。

図12.15 Materialized テーブルプロパティー

12.2.2. JDG マテリアライズ

クライアント/サーバーモードで実行中の JDG キャッシュは、Red Hat JBoss Data Virtualization 固有の JCA コネクターをアクセス用のデータソースとして使用することができ、これはインストール中に WildFly 10.0.0 にデプロイされます。このコネクターは、Hot Rod クライアントを使用してリモートの JDG キャッシュにアクセスできるように設定可能です。
アクセスする先のキャッシュに "get(key)" を実行することで参照 pojo オブジェクトがある各 JDG キャッシュは、異なる設定のリソースアダプターを必要とします。
コネクターにおける JDG スキーマの設定には、protobuf 注釈またはマーシャラーのある protobuf (.proto) ファイルという 2 つのオプションがあります。以下は要件になります。
  • 最小限 JDG 6.2 - この場合、pojo が JDG スキーマを設定するために、protobuf の定義ファイルと pojo マーシャラーを指定する必要があります。
  • 最小限 JDG 6.6 - これは、JDG スキーマの定義に使用する、定義済み protobuf 注釈が pojo にある場合に使用できます。
JDG キャッシュおよびアクセスする pojo へのマッピングを提供する以下のプロパティーが必要になります。
Expand
表12.1 マッピング
プロパティー名プロパティーテンプレート説明
CacheTypeMapcacheName:className[;pkFieldName[:cacheKeyJavaType]]指定した cacheName で、ルート Java オブジェクト (pojo) クラス名をマップします。また、キャッシュに対するプライマリーキーとなるクラス属性を指定します。これはオプションではあるものの更新には必須となります。クラス属性タイプが異なる場合は、プラマリーキーの Java タイプを指定するオプションもあります。
JDG スキーマの設定に protobuf 定義ファイル (.proto) と pojo マーシャラーを使用する場合は、以下のプロパティーが必要になります。
Expand
表12.2 ベース実行プロパティー
プロパティー名必要性プロパティーテンプレート説明
ProtobufDefinitionFileはいjar にパッケージ化された Google Protobuf ファイルへのパス (/quickstart/addressbook.proto など)該当なし
MessageMarshallersはいmarshaller \[,marshaller,..\]各メッセージマーシャラーがマップされたクラス名を含みます (class:marshaller,\[class:marshaller,..\])。シリアル化のために登録されます。
MessageDescriptorはい該当なしキャッシュ内のルートオブジェクトに対するメッセージ記述子クラス名
pojo クラスは、キャッシュにデータ保存する際に使用するオブジェクトです。
スキーマの定義に pojo を使用する場合は、protobuf 注釈を使用してください。
protobuf 定義とマーシャラーを使用する場合は、これらを jar にパッケージ化してください (または、classpath に含まれる別個の jar)。
クラスは jar にパッケージ化して、モジュールとしてデプロイできるようにします。
public class Person {

   @ProtoField(number = 2, required = true)
   public String name;
   @ProtoField(number = 1, required = true)
   public int id;
   @ProtoField(number = 3)
   public String email;
   private List<PhoneNumber> phones;

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }

   public String getEmail() {
      return email;
   }

   public void setEmail(String email) {
      this.email = email;
   }

   public List<PhoneNumber> getPhones() {
      return phones;
   }

   public void setPhones(List<PhoneNumber> phones) {
      this.phones = phones;
   }
   }
Copy to Clipboard Toggle word wrap
リソースアダプターが pojo を使用するように設定するには、pojo jar をモジュールとして JBOSS EAP サーバーにデプロイします。
RemoteCacheManager の作成およびアクセス方法を定義するには、以下のいずれかのプロパティーが必要になります。
Expand
表12.3 設定
プロパティー名必要性プロパティーテンプレート説明
CacheTypeMapはいcacheName:className[;pkFieldName[:cacheKeyJavaType]]ルート Java オブジェクトクラス名をキャッシュにマップします。また、キャッシュに対するプライマリーキーとなるクラス属性を指定します。これはオプションではあるものの更新には必須となります。クラス属性タイプが異なる場合は、プラマリーキーの Java タイプを指定します。
ProtobinFileはい該当なしjar にパッケージ化された Google Protobin ファイルへのパス (/quickstart/addressbook.protobin など)
MessageMarshallersはいmarshaller [,marshaller,..]各メッセージマーシャラーがマップされたクラス名を含みます (class:marshaller,[class:marshaller,..])。シリアル化のために登録されます。
MessageDescriptorはい該当なしキャッシュ内のルートオブジェクトに対するメッセージ記述子クラス名
モジュールなし該当なしロードする必要があるキャッシュクラスを含む JBoss EAP モジュールを指定します。
CacheJndiNameなし該当なしCacheContainer を見つけるための JNDI 名
RemoteServerListなしhost:port[;host:port….]キャッシュにアクセスするために一緒にクラスタ化するホストおよびポートを指定します。
HotRodClientPropertiesFileなし該当なしリモートキャッシュに対する接続を設定するための HotRod プロパティーファイル。
protobuf 定義ファイルおよびマーシャラーを使用する場合は、以下のプロパティーを定義します。
Expand
表12.4 プロパティー
プロパティー名必要性プロパティーテンプレート説明
モジュールなし該当なしロードする必要があるキャッシュクラスを含む WildFly モジュールを指定します。
外部マテリアライズにリモートキャッシュを使用する場合は、以下のプロパティーの設定が必要になります。
Expand
表12.5 マッピング
プロパティー名必要性説明
StagingCacheNameはいマテリアライズに使用するステージングキャッシュのキャッシュ名
AliasCacheNameはいマテリアライズに使用するキャッシュのエイリアス追跡に使用するエイリアスキャッシュのキャッシュ名。このキャッシュは、他の設定済みマテリアライズと共有できます。
データソースを作成するには多くの方法があります (CLI、AdminShell、管理コンソールなどを使用)。最初の例は、Protobuf 定義およびマーシャラーを定義する JDG remote-query quick start:me Sample Resource Adapter への接続に使用されるリソースアダプターの XML スニペットです。
               <resource-adapter id="infinispanRemQS">
                    <module slot="main" id="org.jboss.teiid.resource-adapter.infinispan.hotrod"/>
                    <connection-definitions>
                        <connection-definition class-name="org.teiid.resource.adapter.infinispan.hotrod.InfinispanManagedConnectionFactory" jndi-name="java:/infinispanRemote" enabled="true" use-java-context="true" pool-name="infinispanDS">
                            <config-property name="CacheTypeMap">
                                addressbook:org.jboss.as.quickstarts.datagrid.hotrod.query.domain.Person;id
                            </config-property>
                            <config-property name="ProtobufDefinitionFile">
                                 /quickstart/addressbook.proto
                            </config-property>
                            <config-property name="MessageDescriptor">
                                quickstart.Person
                            </config-property>
                            <config-property name="Module">
                                com.client.quickstart.pojos
                            </config-property>
                            <config-property name="MessageMarshallers">                              org.jboss.as.quickstarts.datagrid.hotrod.query.domain.Person:org.jboss.as.quickstarts.datagrid.hotrod.query.marshallers.PersonMarshaller,org.jboss.as.quickstarts.datagrid.hotrod.query.domain.PhoneNumber:org.jboss.as.quickstarts.datagrid.hotrod.query.marshallers.PhoneNumberMarshaller,org.jboss.as.quickstarts.datagrid.hotrod.query.domain.PhoneType:org.jboss.as.quickstarts.datagrid.hotrod.query.marshallers.PhoneTypeMarshaller
                            </config-property>
                            <config-property name="RemoteServerList">
                                127.0.0.1:11322
                            </config-property>
                        </connection-definition>
                    </connection-definitions>
                </resource-adapter>
                
Copy to Clipboard Toggle word wrap
以下は、注釈付き Pojo を使用したリソースアダプターのサンプルです。
               <resource-adapter id="infinispanRemQSDSL">
                    <module slot="main" id="org.jboss.teiid.resource-adapter.infinispan.dsl"/>
                    <connection-definitions>
                        <connection-definition class-name="org.teiid.resource.adapter.infinispan.dsl.InfinispanManagedConnectionFactory" jndi-name="java:/infinispanRemoteDSL" enabled="true" use-java-context="true" pool-name="infinispanRemoteDSL">
                            <config-property name="RemoteServerList">
                                127.0.0.1:11322
                            </config-property>
                            <config-property name="CacheTypeMap">
                                addressbook_indexed:org.jboss.as.quickstarts.datagrid.hotrod.query.domain.Person;id
                            </config-property>
                        </connection-definition>
                    </connection-definitions>
                </resource-adapter>
                
Copy to Clipboard Toggle word wrap
以下は、外部マテリアライズ向けのリソースアダプターのサンプルです。
                <resource-adapter id="infinispanRemQSDSL">
                    <module slot="main" id="org.jboss.teiid.resource-adapter.infinispan.hotrod"/>
                    <connection-definitions>
                        <connection-definition class-name="org.teiid.resource.adapter.infinispan.hotrod.InfinispanManagedConnectionFactory" jndi-name="java:/infinispanRemoteDSL" enabled="true" use-java-context="true" pool-name="infinispanRemoteDSL">
                            <config-property name="CacheTypeMap">
                                addressbook_indexed:org.jboss.as.quickstarts.datagrid.hotrod.query.domain.Person;id
                            </config-property>
                            <config-property name="StagingCacheName">
                                addressbook_indexed_mat
                            </config-property>
                            <config-property name="AliasCacheName">
                                aliasCache
                            </config-property>
                            <config-property name="Module">
                                com.client.quickstart.addressbook.pojos
                            </config-property>
                            <config-property name="RemoteServerList">
                                127.0.0.1:11322
                            </config-property>
                        </connection-definition>
                    </connection-definitions>
                </resource-adapter>
                
Copy to Clipboard Toggle word wrap
HotRod トランスレーターはタイプ ispn-hotrod で知られており、java オブジェクトをリモートの JDG Cache からシリアル化のために Google Protobuf を使用して Hot Rod クライアント経由で読み取ることができます。これにより Teiid が JDG DSL を使用してリモートキャッシュにクエリできるようになります。このトランスレーターは Object Translator を拡張し、オブジェクトの読み取りおよび書き込みのコアプロセスにこれを使用します。また、以下のことが実行可能です。
  • キャッシュからオブジェクトを取得し、行と列に変換します。
  • キャッシュへの書き込みをサポートします。
  • 外部マテリアライズを使用してクエリパフォーマンスを改善します。
コネクターには以下のケイパビリティーがあります。
  • Compare Criteria - EQ
  • Compare Criteria Ordered - LT, GT, LE, GE - SupportsComapareCriteriaOrdered のサポートはアクセスしている JDG のバージョンで制御されます。JDG バージョン 6.5 およびそれ以前は、JDG の問題のためにこれが false に設定されます。
  • And/Or Criteria
  • In Criteria
  • Like Criteria
  • Order By
  • INSERT, UPDATE, DELETE (トランザクション以外)
以下のものは処理向けに JDG へプッシュされませんが、Red Hat JBoss Data Virtualization 内で実行されます。
  • Not (NE)
  • IsNull
以下の制限があります。
  • 'Not' のサポートは無効になっています。
  • boolean data type: 挿入の値が指定されていない場合、または protobuf 定義ファイルでデフォルト値が定義されていない場合は JDG が例外をスローします。
  • char data type: Protobuf データタイプでサポートされているタイプではありません (https://developers.google.com/protocol-buffers/docs/proto#scalar)。protobuf マーシャラーで変換を処理するか、char のデータタイプで Teiid ビューを作成する必要があります。
  • 1-to-Many が現在サポートしているのは Collection または Array のみで、Maps はサポートされていません。
  • 書き込みトランザクションは、Hot Rod クライアント使用時には JDG でサポートされません。
キャッシュ内のオブジェクトを表すメタデータの定義には、いくつかのオプションがあります。Red Hat では、Teiid Designer 内の Teiid Connection Importer を使用して、オブジェクトキャッシュに基づく物理ソースモデルを作成することを推奨しています。テーブル列は、登録済みクラスに対応する google protobuf 定義から作成されます。
Teiid Designer を使用してオブジェクトキャッシュに基づく物理ソースモデルを手動で作成するには、以下の定義要件を使用します。
    <model name="People" type="Physical">
        <property name="importer.useFullSchemaName" value="false"/>

        <source name="infinispan-hotrod-connector" translator-name="ispn-hotrod" connection-jndi-name="java:/infinispanRemoteDSL" />
    </model>
    
Copy to Clipboard Toggle word wrap
メタデータは、キャンセル内の定義済みオブジェクトのリバースエンジニアリングで解決されます。これは物理ソースモデル構築で Teiid Designer Teiid Connection Importer を使用している場合に便利です。
DDL を使用してメタデータを定義することもできます。Object Translator の例を参照してください。
ベースの定義要件については、Object Translator Metadata セクションを参照してください。
列の protobuf 定義がインデックス化されている、または pojo クラスが属性/メソッドの注釈付きの場合は、列は SEARCHABLE として特定されます。
1-to-* 関係クラスには root クラス/表にマッピングする外部キーが必要になります。ここでは、外部キーのソース内の名前は、それらの子オブジェクトにアクセスするための root クラスメソッド名になります。これはクラスメソッドであって、Google protobuf 定義の参照ではないことに注意してください。
コンテナー/子クラスは、NIS にピリオドが含まれる属性を持つことになります。これは、これが Google protobuf 定義と DSL クエリで使用されることが予想されるものにマッピングするためです。
このトランスレーターは、外部実体化のためのキャッシュ使用をサポートします。ただし、[Infinispan-HotRod resource-adapter] とトランスレーターで特定の設定変更が必要になります。
外部実体化は、BEFORE_LOAD_SCRIPT と AFTER_LOAD_SCRIPT でのネイティブクエリの使用で有効になります。トランスレーターの上書きは、ネイティブクエリ SupportsNativeQueries=true を有効に設定する必要があります。
以下のマテリアライズプロパティーを定義する必要があります。
Expand
表12.6 マッピング
スクリプトネイティブクエリ説明
teiid_rel:MATVIEW_BEFORE_LOAD_SCRIPTtruncate cachestaging cache として特定されたキャッシュを切り詰めます。
teiid_rel:MATVIEW_AFTER_LOAD_SCRIPTswap cache namesキャッシュのエイリアスをスワップし、プラマリーキャッシュが最近読み込まれたキャッシュをポイントするようにします。
以下の例は、DDL の読み込みスクリプトを定義します。
..
"teiid_rel:MATVIEW_BEFORE_LOAD_SCRIPT" 'execute StockMatCache.native(''truncate cache'');',
"teiid_rel:MATVIEW_LOAD_SCRIPT" 'insert into StockMatCache.Stock (productId, symbol, price, companyName) SELECT  A.ID, S.symbol, S.price, A.COMPANY_NAME FROM Stocks.StockPrices AS S, Accounts.PRODUCT AS A WHERE S.symbol = A.SYMBOL',
"teiid_rel:MATVIEW_AFTER_LOAD_SCRIPT"  'execute StockMatCache.native(''swap cache names'');',
Copy to Clipboard Toggle word wrap
RDBMS を使用して表の名前を変更する方法をシミュレートするためにネイティブクエリが使用されます。これは、JDG が現在キャッシュの名前変更をサポートしていないためです。このため、ネイティブクエリが "staging" キャッシュのクリーンアップと、キャッシュエイリアスのスワップを開始します。
また、ネイティブクエリの実行は直接クエリ手順のサポートを通じて行われます。実行される手順は、ネイティブと呼ばれます。

警告

この機能は、ソースに対してコマンドを実行するというセキュリティーリスクがあるため、デフォルトではオフになっています。この機能を有効にするには、SupportsDirectQueryProcedure と呼ばれる実行プロパティー [Override Execution Properties] を true に上書きします。
Teiid Designer 内のキャッシュテーブルを手動でモデル化する場合は、プロパティー "primary_table" の定義のためにプロパティー拡張子を追加する必要があります。
SET NAMESPACE 'http://www.teiid.org/translator/object/2016' AS n0;

CREATE FOREIGN TABLE Trade (
         ....
	CONSTRAINT PK_TRADEID PRIMARY KEY(tradeId)
) OPTIONS (UPDATABLE TRUE);

CREATE FOREIGN TABLE ST_Trade (
        ....
) OPTIONS (NAMEINSOURCE 'Trade', UPDATABLE TRUE, "n0:primary_table" 'ObjectSchema.Trade');
Copy to Clipboard Toggle word wrap

注記

手動でのモデリングを行う場合は、列名が POJO のものと一致する必要があります。
このトランスレーターの JDG HotRod Data Sources リソースアダプターを参照してください。JNDI、server list、または Hot Rod プロパティーでキャッシュコンテナーをルックアップするように設定できます。

重要

テーブルおよび列名の作成には、(Teiid Connection Importer や Materialize といった) Teiid Designer ツーリングウィザードの使用が強く推奨されます。これではなく、JDG リソースアダプターをポイントする VDB XML フォームを使用する場合は、DDL メタデータを定義するのではなく、トランスレーターがメタデータを公開するようにしてください。
これを行う理由は、JDG スキーマが大文字と小文字を区別するためです。JDG へのクエリに使用される 'name' は、使用されたプロパティーの名前 (methodName) に一致する必要があります。
  1. 注釈の使用において、pojo メソッド名はクラスを設定ビルダーに渡すことで、JDG スキーマの設定に使用されます。
  2. protobuf/mashallers の使用において、は、JDG スキーマは protobuf ファイルを使用して設定されます。
この両方の設定方法で、JDG キャッシュが記述子を提供するようになります。列名 (および複雑なオブジェクトの使用時には nameInSources ) はこれより派生します。モデルで使用する必要があるのは、これらの名前です。

12.2.3. リレーショナルビューテーブルウィザードの作成

New Child > Table... とクリックすると、リレーショナルビューテーブルを作成できます。またこのアクションには、目的の列および SQL トランスフォーメーションでのビューテーブルの作成が含まれます。

図12.16 新しいビューテーブルウィザード

このように選択すると、Create Relational View Table ウィザードが表示されます。ウィザードのページには、リレーショナルビューテーブルの可能な定義を構成するさまざまなプロパティーやコンポーネントを表す、タブ付きのパネルが含まれます。テーブル名の入力、列の定義、および SQL トランスフォーメーションの指定を行った後、OK をクリックします。
このウィザードは、リレーショナルビューテーブルの完全性や、テーブルおよびそのコンポーネントの検証状態を提供するのが目的です。ウィザードでは、編集中にエラーや警告が表示されることがありますが、テーブルの定義が不完全でも終了できるよう設計されています。
Properties というラベルが付いた最初のタブはシステムテーブルプロパティーで、名前および「supports update」が含まれる簡単なテーブルプロパティーの入力が含まれます。

図12.17 Properties タブ

Columns タブでは、基本的なリレーショナル列を作成および編集できます。これには、列の追加、削除、または移動が含まれ、名前、データタイプ、および長さプロパティーの変更も含まれます。

図12.18 Columns タブ

Transformation SQL タブでは、リレーショナルビューの SQL トランスフォーメーションの編集ができます。希望の SQL を直接テキストエリアに入力することができます。または、Select SQL Template ボタンをクリックして SQL テンプレートを選択することもできます。

図12.19 Transformation SQL タブ

Transformation SQL タブで Select SQL Template ボタンが選択されると、Choose a SQL Template ダイアログが表示されます。

図12.20 SQL Templates ダイアログ

ダイアログを使用して一般的な SQL テンプレートを選択できる可能性があります。使用コンテキストによっては、SELECT クエリータブの他に PROCEDURES タブも使用できることがあります。Transformation Editor にて、右クリックで表示されるコンテキストメニューから SQL Template ダイアログにアクセスすることもできます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat