VIEW_DEPENDENCIES

説明

ストアドプロシージャ VIEW_DEPENDENCIES は、ビューの系統、つまり、1 つのビューを構築するときに元となった別のビューとデータソースのリストを返します。

このプロシージャを使用すると、Administration Tool で派生ビューの [ツリービュー] ダイアログに表示されるものと同じ情報をプログラムによって取得できます。

構文

VIEW_DEPENDENCIES (
      input_view_database_name : text
    , input_view_name : text
)
  • input_view_database_name: 依存関係の取得先ビューがあるデータベースの名前。

  • input_view_name: 依存関係の取得先ビューの名前。

どちらのパラメーターもオプションです。

  • 両方のパラメーターが null の場合、このプロシージャはすべてのデータベースにあるすべてのビューの依存関係を返します。

  • input_view_database_namenull で、 input_view_name がそうでない場合、このプロシージャはすべてのデータベースにある、この名前を持つすべてのビューの依存関係を返します。

  • input_view_namenull で、 input_view_database_name がそうでない場合、このプロシージャはそのデータベースにあるすべてのビューの依存関係を返します (ビューが別のデータベースのビューと依存関係を持つ場合は、それも表示されます)。

このプロシージャの結果の各行は、派生ビュー (「view_name」フィールド) と別のエレメント (「dependency_name」) の間の依存関係を表します。別のエレメントとは、派生ビュー、基本ビュー、またはデータソースのいずれかのことです。

出力スキーマには以下のフィールドがあります。

  • view_database_name: 「view_name」フィールドのビューが属すデータベースの名前。

  • view_name: 派生ビューの名前。

  • view_identifier: ビューの ID。このストアドプロシージャによって自動生成され、このプロシージャの実行ごとに変わる場合があります。この値の使用方法については、以下の例を参照してください。

  • view_type: ビューのタイプ。ベースビュー、選択、結合、インターフェイスなどです。ビューのタイプが結合の場合、このフィールドの値には以下の情報がその順番どおりに含まれます。

    • 結合のタイプ: 「Inner」、「Left outer」、「Right outer」、または「Full outer」のいずれか。

    • 結合方法: 「Any」、「Hash」、「Nested」、「Nested parallel」、または「Merge」のいずれかです。「Any」は、ビューの作成時にユーザーが結合の実行方法を選択しなかったため、実行エンジンが実行時にその方法を自動的に選択することを意味します。

    • 結合の順序: 「Any」、「Ordered」、または「Reverseorder」のいずれかです。「Any」は、ビューの作成時にユーザーが結合の実行順序を選択しなかったため、実行エンジンが実行時にその順序を選択することを意味します。

  • private_view: 「view_name」フィールドのビューがプライベートの場合は true 、そうでない場合は false

    「view_name」が別の結合/差結合/積結合ビューの結合、差結合、積結合ビューを表しており、そのビューがユーザーではなく Virtual DataPort によって内部で作成された場合、そのビューはプライベートです。

    たとえば、(V1 JOIN V2) JOIN V3 という構文で、3 つのビューを結合した J_V という派生ビューを作成する場合、Virtual DataPort は V1 と V2 の結合ビューを内部で作成します。この内部ビューと V3 を結合すると、J_V が生成されます。この例では、V1 と V2 を結合するとプライベートビューが作成され、J_V はパブリックビューです。

    プライベートビューに関する情報から、3 つ以上のビューの結合/差結合/積結合ビューが実行される順序を知ることができます。

  • dependency_database_name: 依存関係が属すデータベースの名前。

    このフィールドの値は、常に「view_database_name」と同じです。

  • dependency_name: 「view_name」フィールドのビューが依存するエレメント (ビューまたはデータソース) の名前。

  • dependency_identifier: 「view_name」フィールドのビューが依存するエレメント (ビューまたはデータソース) の内部 ID。

    このストアドプロシージャによって自動生成され、このプロシージャが実行されるたびに変わる場合があります。

  • dependency_type: 「view_name」フィールドのビューが依存するエレメントのタイプ。

  • depth: 「view_name」フィールドのビューと、依存関係のあるエレメントとの距離。

    行が直接的な依存関係を表している場合、このフィールドの値は 1 です。直接的な依存関係とは、相互に直接依存しているビュー間の依存関係のことです。たとえば、基本ビューと、この基本ビューから作成された投影ビューには、直接的な依存関係があります。

    行が推移的な依存関係を表している場合、このフィールドの値は 1 より大きくなります。推移的な依存関係とは、相互に依存しているものの、間に他のビューが存在するビュー間の依存関係のことです。たとえば、基本ビュー BV1 に基づいて P_V という選択ビューを作成したとします。この例では、P_V とビュー BV1 のデータソースの間には推移的な依存関係があります。


このプロシージャ、または他の Denodo ストアドプロシージャを呼び出す場合は、可能であれば常に入力パラメーターでフィルターしてください。クエリがより早く完了し、Denodo サーバーへの負荷が緩和されます。

たとえば、以下を実行してビューの依存関係を取得するとします。

「VIEW_DEPENDENCIES」プロシージャの正しい呼び出し方法
SELECT *
FROM VIEW_DEPENDENCIES()
WHERE input_database_name = 'tpc_h'
    AND input_view_name = 'orders_of_european_customers'
    AND position('Datasource' IN dependency_type) > 0

実行エンジンは、「input_database_name」および「input_view_name」の値をストアドプロシージャに渡し、ストアドプロシージャは、「orders_of_european_customers」ビューの依存関係のみを計算します。次に実行エンジンは、このビューの依存関係を表す行に対して条件「position('Datasource' IN dependency_type) > 0」を評価します。

「VIEW_DEPENDENCIES」プロシージャの誤った呼び出し方法
SELECT *
FROM VIEW_DEPENDENCIES()
WHERE view_database_name = 'tpc_h'
    AND view_name = 'orders_of_european_customers'
    AND position('Datasource' IN dependency_type) > 0

このクエリは、最初の例と同じ結果を返します。ただし、このストアドプロシージャは入力パラメーターの値を受け取っていないため、すべてのデータベースのすべてのビューの依存関係を計算します。このストアドプロシージャがすべてのビューのすべての依存関係を返した後に、実行エンジンは WHERE 条件を満たすものを選択します。

Denodo の「実際の」デプロイでは、最初のクエリには数百ミリ秒かかり、2 番目のクエリには数分かかる場合があります。

必要な権限

このプロシージャによって返される情報は、このプロシージャを実行するユーザーのタイプによって異なります。

  • 管理者: このプロシージャは、すべての依存関係に関する情報を返します。

  • データベースの管理者: このプロシージャは、そのデータベースのすべてのビューに関する情報を返します。ただし、他のデータベースのビューの依存関係に関する情報は返しません。

  • データベースに対する METADATA 権限を持っているユーザー: このプロシージャは、そのデータベースのすべてのビューの依存関係に関する情報を返します。ただし、ビューとデータソース間の依存関係は返しません。

  • データベースの一部のビューに対する METADATA 権限を持っているユーザー: このプロシージャは、そのユーザーに METADATA 権限が付与されているビューのフィールドの依存関係に関する情報を返します。依存関係に対する METADATA 権限が付与されていない場合、「dependency_type」フィールドの値は「No Privileges」になります。このプロシージャは、ビューとデータソース間の依存関係を返しません。

以下の例では、これらのクエリを実行するユーザーが、管理者であるか、各例に示されているビューのデータベースの管理者であることを前提としています。そうでない場合、このプロシージャはデータソースに関する情報を返しません。

例 1

「orders_of_european_customers」(データベース「tpc_h」) というビューがあり、以下を実行してこのビューの依存関係を取得するとします。

SELECT DISTINCT dependency_type
    , dependency_database_name
    , dependency_name
FROM view_dependencies()
WHERE input_view_database_name = 'tpc_h'
    AND input_view_name = 'orders_of_european_customers'
    AND private_view = false

    -- The views whose name start with "_" are private views.
    AND substr(dependency_name FROM 1 FOR 1) <> '_';

例 2

「orders_of_european_customers」(データベース「tpc_h」) というビューがあり、以下を実行してこのビューのデータの取得先であるデータソースを取得するとします。

SELECT DISTINCT dependency_database_name AS data_source_database
    , dependency_name AS data_source
FROM VIEW_DEPENDENCIES()
WHERE input_view_database_name = 'tpc_h'
    AND input_view_name = 'orders_of_european_customers'
    AND position('Datasource' IN dependency_type) > 0
    AND depth = 1;

例 3

以下のように customer_invoicing というビューを作成したとします。

(client_df LEFT OUTER JOIN invoice) INNER JOIN product

下の図は、次のクエリの実行結果のスナップショットです。

SELECT view_name, view_identifier, view_type, private_view, dependency_name,
dependency_identifier, dependency_type, depth
FROM VIEW_DEPENDENCIES()
WHERE input_view_database_name = 'customer360'
    AND input_view_name = 'customer_invoicing';

便宜上、一部の列は表示されていません。

Sample result of executing the procedure VIEW_DEPENDENCIES

VIEW_DEPENDENCIES プロシージャの実行結果の例

この結果について理解するには、以下の説明を参考にしてください。

  • 行 5 から 9 までは、プライベートビューの依存関係を表しています (これらの行の [private] フィールドは true になっています)。このプライベートビューは、クライアントとインボイス間の左外部結合です。

  • 行 11 および 12 から最後までは、 product ビューの依存関係を表しています。それらすべてが同じ「view_identifier」を持つことに注意してください。ビューのすべての依存関係は同じ「view_identifier」を持ちます。

  • 「dependency_identifier」の値が 9 である行は、XML データソース invoicing との直接的または推移的な依存関係を表しています。

    • 行 2 は、基本ビュー invoicing と XML データソース間の直接的な依存関係を表しています。「depth」フィールドの値が 1 であるため、依存関係は直接的です。

    • 行 4 は、ビュー invoicing と XML データソース間の推移的な依存関係を表しています。「depth」が 2 であるため、この依存関係は推移的です。

    • 行 9 は、プライベートビューと XML データソース間の推移的な依存関係を表しています。「depth」が 1 より大きいため、依存関係は推移的です。