3.7. DDL コマンド


Data Virtualization は、一時テーブルを作成または破棄し、実行時に手順および定義を表示する DDL コマンドのサブセットと互換性があります。現在、一時的なメタデータエントリーを任意にドロップしたり、作成したりすることはできません。  仮想データベースでスキーマを定義するのに使用できる DDL ステートメントの詳細は、「 DDL メタデータ 」を参照してください。

3.7.1. 一時的なテーブル

Data Virtualization で一時(一時)テーブルを作成して使用できます。一時的なテーブルは動的に作成されますが、他の物理テーブルとして扱われます。

3.7.1.1. ローカルの一時テーブル

ローカルの一時テーブルは、INSERT ステートメントで参照するか、CREATE TABLE ステートメントで明示的に定義することで定義できます。暗黙的に作成された一時テーブルには、# で始まる名前が必要です。

注記

Data Virtualization は、一時テーブルが作成される仮想手順のセッションまたはブロックに一時テーブルがスコープされることを意味します。この解釈は SQL 仕様とは異なり、他のデータベースベンダーが実装する解釈とは異なります。ブロックを終了するか、セッションを終了すると、テーブルが破棄されます。呼び出し手順が作成するセッションテーブルおよびその他の一時テーブルは、呼び出された手順には表示されません。同じ名前の一時的なテーブルが呼び出された手順で作成されると、新規インスタンスが作成されます。

作成構文

ローカルの一時テーブルを明示的に作成することも、暗黙的に作成することもできます。

明示的な作成構文

ローカル一時テーブルは、以下の例のように CREATE TABLE ステートメントで明示的に定義できます。

CREATE LOCAL TEMPORARY TABLE name (column type [NOT NULL], ... [PRIMARY KEY (column, ...)]) [ON COMMIT PRESERVE ROWS]
Copy to Clipboard Toggle word wrap
  • SERIAL データ型を使用して NOT NULL および auto-incrementing INTEGER 列を指定します。SERIAL 列の開始値は 1 です。
暗黙的な作成構文

ローカルの一時テーブルは、INSERT ステートメントで参照することで暗黙的に定義できます。

INSERT INTO #name (column, ...) VALUES (value, ...)
INSERT INTO #name [(column, ...)] select c1, c2 from t
Copy to Clipboard Toggle word wrap
注記

#name が存在しない場合は、値式の指定の列名とタイプを使用して定義されます。

INSERT INTO #name (column, ...) VALUES (value, ...)
INSERT INTO #name [(column, ...)] select c1, c2 from t
Copy to Clipboard Toggle word wrap
注記

#name が存在しない場合は、ターゲット列名とクエリーベースの列の型を使用して定義されます。ターゲット列が指定されていない場合、列名はクエリーから派生した列名と一致します。

ドロップの構文

DROP TABLE name
Copy to Clipboard Toggle word wrap

+ 以下の例では、一連のステートメントが 2 つのソースからの一時テーブルを読み込み、レコードを手動で挿入してから、SELECT クエリーで一時テーブルを使用します。

例: ローカルの一時テーブル

CREATE LOCAL TEMPORARY TABLE TEMP (a integer, b integer, c integer);
SELECT * INTO temp FROM Src1;
SELECT * INTO temp FROM Src2;
INSERT INTO temp VALUES (1,2,3);
SELECT a,b,c FROM Src3, temp WHERE Src3.a = temp.b;
Copy to Clipboard Toggle word wrap

ローカルの一時テーブルの使用の詳細は、「 仮想手順」を参照し てください。

3.7.1.2. グローバルな一時テーブル

グローバルな一時テーブルは、デプロイ時に Data Virtualization に提供するメタデータから作成されます。ローカルの一時テーブルとは異なり、実行時にグローバル一時テーブルを作成することはできません。グローバル一時テーブルは、スキーマエントリーで共通の定義を共有します。ただし、各セッションに一時テーブルの新しいインスタンスが作成されます。セッションが終了すると、テーブルが破棄されます。明示的なドロップサポートはありません。グローバル一時テーブルの一般的な用途は、結果を手順から除外することです。

作成構文

CREATE GLOBAL TEMPORARY TABLE name (column type [NOT NULL], ... [PRIMARY KEY (column, ...)]) OPTIONS (UPDATABLE 'true')
Copy to Clipboard Toggle word wrap

SERIAL データ型を使用する場合、グローバル一時テーブルの各セッションのインスタンスには独自のシーケンスが設定されます。

一時テーブルを更新する場合は、UPDATABLE を明示的に指定する必要があります。

構文オプションの詳細は、スキーマオブジェクトの DDL メタデータ の CREATE TABLE DDL ステートメントを参照してください。

3.7.1.3. グローバルおよびローカルの一時テーブルの一般的な機能

グローバルおよびローカルの一時テーブルは、一般的な機能の一部を共有します。

プライマリーキーの使用

  • すべてのキー列は比較する必要があります。
  • プライマリーキーを使用する場合は、SQL 比較演算子および IN、LIKE、および ORDER BY 演算子の検索の改善を可能にするクラスター化されたインデックスを作成します。
  • Null はプライマリーキーの値として使用できますが、すべての null キーを持つ 1 行のみが必要になります。

トランザクション

  • READ_UNCOMMITED トランザクション分離レベルがあります。分離レベルを高くすることのできるロックメカニズムはありません。また、ロールバックの結果は複数のトランザクション間で一貫性がなくなる可能性があります。同時トランザクションが同じローカル一時テーブルまたはセッションに関連付けられていない場合、トランザクションの分離レベルは効果的にシリアライズ可能です。ローカルの一時テーブルと完全な一貫性が必要な場合は、1 度に 1 つのトランザクションとの接続のみを使用します。この操作のモードは、トランザクションによる接続を追跡する接続プールにより保証されます。

制限事項

  • CREATE TABLE 構文では、基本的なテーブル定義(列名、タイプ、および null 可能な情報)と任意のプライマリーキーのみを指定できます。グローバル一時テーブルの場合、ephemeral ステートメントの追加メタデータは、一時テーブルインスタンスの作成時に事実上無視されます。ただし、他のテーブルエントリーと同様の計画でメタデータが使用される可能性があります。
  • ON COMMIT PRESERVE ROWS を使用できます。他の ON COMMIT アクションを使用することはできません。
  • DROP ステートメントに「drop behavior」オプションを使用することはできません。
  • 一時テーブルは、フェイルオーバーセーフではありません。
  • インラインではない LOB 値(XML、CLOB、BLOB、JSON、ジオメトリー)は、一時的なテーブルの値ではなく、参照によって追跡されます。一時テーブルに外部ソースからの LOB 値を挿入すると、関連するステートメントまたは接続が閉じられると読み取れない場合があります。

3.7.1.4. 外部一時テーブル

ローカルまたはグローバルな一時テーブルとは異なり、外部一時テーブルは、メタデータの負荷ではなく、ランタイム時に作成される実際のソーステーブルへの参照となります。

外部一時テーブルには、明示的な作成構文が必要です。

CREATE FOREIGN TEMPORARY TABLE name ... ON schema
Copy to Clipboard Toggle word wrap

テーブル作成ボディー構文は標準の CREATE FOREIGN TABLE DDL ステートメントと同じです。詳細は、DDL メタデータ を参照してください。通常、ソースの名前の設定、最新の状態、ネイティブタイプなど、ソーステーブルに適切にアクセスするには DDL OPTION 句の使用が必要になる場合があります。

スキーマ名は、VDB に既存のスキーマ/モデルを指定する必要があります。テーブルには、そのソースにあるかのようにアクセスされます。ただし、Data Virtualization 内では、一時的なテーブルのスコープは、フォレンジではない一時テーブルと同じスコープになります。つまり、外部一時テーブルは Data Virtualization スキーマに属しず、作成先のセッションまたは手順ブロックにスコープ指定されます。

外部一時テーブルの DROP 構文は、foreign 以外の一時テーブルの場合と同じです。

外部一時テーブルの CREATE や対応する DROP はいずれも、pushdown コマンドを発行しません。このメカニズムは、Data Virtualization 内での一時的なソーステーブルを公開します。

FOREIGN TEMPORARY TABLE には 2 つの使用シナリオがあります。1 つ目は、ソースの追加テーブルに動的にアクセスすることです。もう 1 つは、パフォーマンス上の理由から、Data Virtualization のローカル一時テーブルの使用を置き換えます。後者の場合の使用方法パターンは次のようになります。

//- create the source table
source.native("CREATE GLOBAL TEMPORARY TABLE name IF NOT EXISTS ... ON COMMIT DELETE ROWS");
//- bring the table into Data Virtualization
CREATE FOREIGN TEMPORARY TABLE name ... OPTIONS (UPDATABLE true)
//- use the table
...
//- forget the table
DROP TABLE name
Copy to Clipboard Toggle word wrap

ネイティブ手順を使用してソース固有の CREATE DDL をソースに渡すことに注意してください。Data Virtualization は現在、CREATE ステートメントに基づいて一時的なテーブルのソース作成のプッシュを試行しません。上記のネイティブ手順などの他のメカニズムでは、最初にテーブルを作成しておく必要があります。また、DDL の定義テーブルはデフォルトでデータ可能ではないので、テーブルは明示的に updatable とマークされることに注意してください。

ソースの一時テーブルの処理は、これを意図した通りに機能させるためにも理解しておく必要があります。すべてのセッションに同じ GLOBAL テーブル定義を使用するソース(Oracle など)、またはセッションスコープの一時テーブルを使用するソース(PostgreSQL など)はトランザクションでアクセスされると機能します。以下の理由によりトランザクションが必要です。

  • コミットの動作(DELETE ROWS または DROP など)のソースによってクリーンアップが行われます。Data Virtualization ドロップはソースコマンドを実行せず、保証されていないことに注意してください(例外が発生した場合、データベース接続の損失、ハードシャットダウンなど)。
  • トランザクションによる接続を追跡する場合、Data Virtualization によるそのソースの複数の使用が同じ接続/セッションを使用するようにし、同じ一時テーブルとデータを使用します。
ヒント

Data Virtualization では ON COMMIT 句を使用することはできません。その結果、ローカルの一時テーブルでは、ソーステーブルの ON COMMIT 動作がデフォルトの PRESERVE ROWS とは異なる可能性があります。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat