VIEW_DEPENDENCIES¶
説明
ストアドプロシージャ VIEW_DEPENDENCIES
は、ビューの系統、つまり、1 つのビューを構築するときに元となった別のビューとデータソースのリストを返します。
このプロシージャを使用すると、Administration Tool で派生ビューの [ツリービュー] ダイアログに表示されるものと同じ情報をプログラムによって取得できます。
構文
VIEW_DEPENDENCIES (
input_view_database_name : text
, input_view_name : text
, include_tags : boolean
)
input_view_database_name
: 依存関係の取得先ビューがあるデータベースの名前。input_view_name
: 依存関係の取得先ビューの名前。
パラメータはオプションです。
input_view_database_name
とinput_view_name
がnull
の場合、このプロシージャはすべてのデータベースにあるすべてのビューの依存関係を返します。input_view_database_name
がnull
で、input_view_name
がそうでない場合、このプロシージャはすべてのデータベースにある、この名前を持つすべてのビューの依存関係を返します。input_view_name
がnull
で、input_view_database_name
がそうでない場合、このプロシージャはそのデータベースにあるすべてのビューの依存関係を返します (ビューが別のデータベースのビューと依存関係を持つ場合は、それも表示されます)。include_tags
: ビューおよびその列とのタグ依存関係を結果に含める必要があるかどうかを指定します (デフォルトはfalse
)。
このプロシージャの結果の各行は、派生ビュー (「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 サーバーへの負荷が緩和されます。
たとえば、以下を実行してビューの依存関係を取得するとします。
SELECT *
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
実行エンジンは、「input_view_database_name」および「input_view_name」の値をストアドプロシージャに渡し、ストアドプロシージャは、「orders_of_european_customers」ビューの依存関係のみを計算します。次に実行エンジンは、このビューの依存関係を表す行に対して条件「position('Datasource' IN dependency_type) > 0」を評価します。
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';
便宜上、一部の列は表示されていません。

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
より大きいため、依存関係は推移的です。
注釈
VIEW_DEPENDENCIES の代わりにプロシージャ GET_PUBLIC_VIEW_DEPENDENCIES を使用することを検討してください。ほとんどのユースケースシナリオではこのプロシージャで十分です。また、このプロシージャは VIEW_DEPENDENCIES よりもはるかに高速で、より効率的です。