9.5. JDBC 翻訳者
JDBC Translators は、SQL セマンティクスと、Data Virtualization とターゲット TEMPLATES のデータ型の違いをブリッジします。Data Virtualization には、最も一般的なオープンソースおよびプロプライエタリーリレーショナルデータベースを対象とする特定のトランストラクターの範囲があります。
用途
JDBC ソースの使用は簡単です。Data Virtualization SQL を使用すると、テーブルと手順が Data Virtualization システムのローカルであるかのようにソースをクエリーできます。
リレーショナルデータベースソース、または JDBC ドライバーを持つデータソースを使用している場合で、そのデータソースタイプで利用可能な特定のトランスレーターが見つからない場合は、JDBC ANSI トランスレーター から始めます。JDBC ANSI トランスレーターにより、SQL の基本が実行できるようになります。利用できる特定のデータソース機能がある場合は、必要な操作を行うカスタムトランスレーターを定義できます。詳細は、「 Translator Development 」を参照してください。
タイプの規則
UUID、GUID、または UNIQUEIDENTIFIER を含む UID タイプは、通常 Data Virtualization 文字列タイプにマッピングされます。JDBC データソースは、UID 文字列を小文字ではないものとして処理しますが、Data Virtualization で大文字と小文字が区別されます。ソースが文字列タイプへの暗黙的な変換をサポートしていない場合、文字列の値を想定する関数の使用がソースで失敗する可能性があります。
以下の表は、すべての JDBC 翻訳者によって共有される実行プロパティーを示しています。
名前 | 説明 | デフォルト |
---|---|---|
DatabaseTimeZone | データベースのタイムゾーン。date、time、または timestamp の値を取得する場合に使用されます。 | システムのデフォルトタイムゾーン |
DatabaseVersion | 特定のデータベースバージョン。プッシュダウン操作の使用をさらに調整するために使用されます。 |
ベースと互換性のあるバージョン、または DatabaseMetadata.getDatabaseProductVersion 文字列から派生するバージョン。自動検出には接続が必要です。機能が利用できないために例外が発生する状況(例: 接続は利用できません)がある場合は、 |
TrimStrings |
| false |
RemovePushdownCharacters |
ソースの許可できない文字や望ましくない文字を削除するには、正規表現に設定します。たとえば、 | |
UseBindVariables |
| true |
UseCommentsInSourceQuery | これにより、情報提供の目的で、ソース SQL に session/request id の先頭のコメントが埋め込まれます。CommentFormat プロパティーでカスタマイズできます。 | false |
CommentFormat |
|
|
MaxPreparedInsertBatchSize | 準備済み挿入バッチの最大サイズ。 | 2048 |
StructRetrieval | 以下の Struct 取得モードのいずれかを指定します。
| OBJECT |
EnableDependentJoins | 一時テーブル(DB2、Derby、H2、HSQL 2.0+、MySQL 5.0+、Oracle、PostgreSQL、SQLServer、SQP IQ、Sybase)を使用するソースに依存のプッシュダウンを許可します。 | false |
インポータープロパティーですべての JDBC 翻訳者によるインポーターの使用
インポータープロパティーを指定する場合は、importer のプレフィックスを指定する必要があり ます
。例: importer.tableTypes
名前 | 説明 | デフォルト |
---|---|---|
catalog | See DatabaseMetaData.getTables [1] | null |
schemaName | 単一のスキーマからインポートするために推奨される設定。スキーマ名は、エスケープされたパターン(設定されている場合は schemaPattern の上書き)に変換されます。 | null |
schemaPattern | See DatabaseMetaData.getTables [1] | null |
tableNamePattern | See DatabaseMetaData.getTables [1] | null |
procedureNamePattern | See DatabaseMetaData.getProcedures [1] | null |
tableTypes |
登録済みのテーブルタイプでスペースを区切られずに、スペースを区切ったリストを使用。See | null |
excludeTables | 完全修飾テーブル名に対して一致する、大文字と小文字を区別しない正規表現 [2] はインポートから除外します。テーブル名の取得後に適用されます。 負の先読み(?!<inclusion pattern>)を使用して、包含フィルターとして機能します。 | null |
excludeProcedures | 完全修飾手順名に対して一致する、大文字と小文字を区別しない正規表現 [2] はインポートから除外します。 手順名の取得後に適用されます。 負の先読み(?!<inclusion pattern>)を使用して、包含フィルターとして機能します。 | null |
importKeys |
注記: インポートされていないテーブルにキーを配置すると無視されます。 | true |
autoCreateUniqueConstraints |
| true |
importIndexes |
インデックス/一意キー/カーディナリティー情報をインポートする場合は | false |
importApproximateIndexes |
警告: | true |
importProcedures |
True | false |
importSequences |
シーケンス | false |
sequenceNamePattern |
シーケンスをインポートするときに使用する LIKE パターン文字列。Null または | null |
useFullSchemaName |
| false(複数の外部スキーマからのインポートする場合のみ変更)。 |
useQualifiedName |
警告: このオプションを | True(必須の変更) |
useCatalogName |
| True(必須の変更) |
widenUnsignedTypes |
| true |
useIntegralTypes |
| false |
quoteNameInSource |
| true |
useAnyIndexCardinality |
True | false |
importStatistics |
True | false |
importRowIdAsBinary |
| false |
importLargeAsLob |
| false |
[1] DatabaseMetaData
[2] 除外の完全修飾名は、トランスレーターの設定とデータベースの特定に基づいています。トランスレーターの設定で使用される適用可能な名前の部分すべて( useQualifiedName
および useCatalogName
を参照)には、カタログ、スキーマ、テーブルを含む catalogName.schemaName.tableName が引用なしの catalogName.schemaName.tableName
として組み合わされます。たとえば、Oracle はカタログを報告しないため、比較用のデフォルト設定で使用される名前は schemaName.tableName
のみです。
デフォルトのインポート設定により、利用可能なすべてのメタデータが取り消されます。このインポートプロセスには時間がかかるため、ほとんどの状況では完全なメタデータのインポートは必要ありません。最も一般的なものは、少なくとも schemaName
または schemaPattern
、および tableTypes
でインポートを制限します。
例: my-schema からテーブルとビューのみをインポートする Importer 設定。
SET SCHEMA ora; IMPORT FOREIGN SCHEMA "my-schema" FROM SERVER ora INTO ora OPTIONS ("importer.tableTypes" 'TABLE,VIEW');
SET SCHEMA ora;
IMPORT FOREIGN SCHEMA "my-schema" FROM SERVER ora INTO ora OPTIONS ("importer.tableTypes" 'TABLE,VIEW');
インポーターの設定に関する詳細は、「 仮想データベース」を参照して ください。
ネイティブクエリー
物理テーブル、機能、および手順には、任意でネイティブクエリーが関連付けられています。 ネイティブクエリーの検証は実行されません。ソース SQL を生成するためのシンプルな方法で使用されます。 teiid_rel:native-query
拡張メタデータを設定すると、ソースクエリーのインラインビューとしてネイティブクエリーが実行されます。 この機能は、インラインビューを提供するソースでのみ使用する必要があります。 ネイティブクエリーはそのまま使用され、パラメーター化された文字列として処理されません。たとえば、nameInSource="x"'
と teiid_rel:native-query="select c from g"
の物理テーブル y
では、Data Virtualization ソースクエリー "SELECT c FROM y"
は SQL クエリー "SELECT c FROM(select c FROM(select c from g)を x" と
して生成します。 ネイティブクエリーの列名は、SQL が有効になるように、物理テーブル列の nameInSource
と一致する必要があります。
物理手順の場合は、teiid_rel:native-query
拡張メタデータを、位置的参照の IN パラメーターを追加する機能が追加されたクエリー文字列に設定することもできます。詳細は「 Translators でパラメーター化 可能なネイティブクエリー 」を参照してください。 teiid_rel:non-prepared
拡張メタデータプロパティーは false
に設定して、パラメーターバインディングをオフにすることができます。
適切に検証されていない場合に受信は SQL インジェクション攻撃を許容するため、このオプションの設定は注意して行ってください。 ネイティブクエリーはストアドプロシージャーを呼び出す必要はありません。 物理ストアドプロシージャーメタデータによって想定される結果セットに位置的に一致する結果セットを返す SQL はすべて機能します。 たとえば、teiid_rel:native-query="select c from g from g where c1 = $1 and c2 = '$$1"'
のあるストアドプロシージャ x
の場合、Data Virtualization source query '"CALL x(?)"'
は SQL クエリー '"select c from g where c1 = ? and c2 = '$1"''
を生成します。 この例の ?
は、パラメーター 1 にバインドされている実際の値に置き換えられます。
直接クエリーの手順
この機能は、ソースに対して任意のコマンドを実行できるようにする固有のセキュリティーリスクがあるため、デフォルトでオフになっています。この機能を有効にするには、SupportsDirectQueryProcedure と呼ばれる実行プロパティーを上書きし、true
に設定します。詳細は「 Translators での 実行プロパティーの上書き 」を参照してください。
デフォルトでは、クエリーを直接実行する手順の名前は native です。名前を変更するには、実行プロパティー DirectQueryProcedureName を上書きします。
JDBC トランスレーターは、Data Virtualization の解析または解決を行わずに、アドホック SQL クエリーをソースに対して直接実行する手順を提供します。この手順の結果のメタデータは Data Virtualization には認識されないため、オブジェクト配列として返されます。ARRAYTABLE は、クライアントアプリケーションが使用するための表形式出力です。詳細は、arraytable を参照してください。
SELECT の例
SELECT x.* FROM (call jdbc_source.native('select * from g1')) w, ARRAYTABLE(w.tuple COLUMNS "e1" integer , "e2" string) AS x
SELECT x.* FROM (call jdbc_source.native('select * from g1')) w,
ARRAYTABLE(w.tuple COLUMNS "e1" integer , "e2" string) AS x
INSERT の例
SELECT x.* FROM (call jdbc_source.native('insert into g1 (e1,e2) values (?, ?)', 112, 'foo')) w, ARRAYTABLE(w.tuple COLUMNS "update_count" integer) AS x
SELECT x.* FROM (call jdbc_source.native('insert into g1 (e1,e2) values (?, ?)', 112, 'foo')) w,
ARRAYTABLE(w.tuple COLUMNS "update_count" integer) AS x
UPDATE の例
SELECT x.* FROM (call jdbc_source.native('update g1 set e2=? where e1 = ?','blah', 112)) w, ARRAYTABLE(w.tuple COLUMNS "update_count" integer) AS x
SELECT x.* FROM (call jdbc_source.native('update g1 set e2=? where e1 = ?','blah', 112)) w,
ARRAYTABLE(w.tuple COLUMNS "update_count" integer) AS x
DELETE の例
SELECT x.* FROM (call jdbc_source.native('delete from g1 where e1 = ?', 112)) w, ARRAYTABLE(w.tuple COLUMNS "update_count" integer) AS x
SELECT x.* FROM (call jdbc_source.native('delete from g1 where e1 = ?', 112)) w,
ARRAYTABLE(w.tuple COLUMNS "update_count" integer) AS x
9.5.1. Actian Vector translator(actian-vector) リンクのコピーリンクがクリップボードにコピーされました!
また、一般的な JDBC 翻訳の 情報も併せて参照してください。
タイプが actian-vector によって認識されるアクチェンベクタートランスレーターは Actor の Actian Vector 用です。
JDBC ドライバーを http://esd.actian.com/platform からダウンロードします。接続 URL のポート番号は 16967 にマップする AH7 です。