COLUMN_DEPENDENCIES

説明

ストアドプロシージャ COLUMN_DEPENDENCIES は、ビューの列の「系統」、つまり、フィールドの値の取得先であるデータソースおよびビューのリストを返します。列の系統と「ツリービュー」の違いは、「ツリービュー」ではビューに関する情報のみが提供されることです。列の系統では、より深いレベルである列にまでさかのぼって情報が提供されます。

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

ビュー間の依存関係を取得する必要があっても、フィールド間の依存関係は必要ない場合は、このプロシージャの代わりに、より単純な出力を得られる VIEW_DEPENDENCIES プロシージャを使用することをお勧めします。

構文

COLUMN_DEPENDENCIES (
      input_view_database_name : text
    , input_view_name : text
    , input_column_name : text
)
  • input_view_database_name: ビューのデータベースの名前。

  • input_view_name: ビューの名前。

  • input_column_name (オプション): 依存関係の取得先フィールドの名前。 null の場合、このプロシージャはビューのすべてのフィールドの依存関係を返します。

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

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

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

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

  • column_name: 列の名前。

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

  • 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 つ以上のビューの結合/差結合/積結合ビューが実行される順序を知ることができます。

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

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

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

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

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

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

  • dependency_column_name: 「column_name」フィールドが依存するフィールドの名前。「column_name」が複数のフィールドを含む式の評価の結果である 場合 、このフィールドの値はフィールドのコンマ区切りリストです。同じ行の「expression」フィールドには、この式が含まれます。

  • dependency_identifier: 「view_name」フィールドのビューが依存するエレメント (ビューまたはデータソース) の内部 ID。この番号は、派生ビューと別のエレメント間の依存関係を特定します。したがって、ビュー V1 とビュー V2 のフィールド間の依存関係を表すすべての行には、同じ「dependency_identifier」が設定されます。

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

  • dependency_type: 依存関係エレメントのタイプ。

  • expression: null ではない場合は、ビューのフィールド (column_name) に割り当てられている式。

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

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

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

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

例 1

「orders_of_european_customers」(データベース「tpc_h」) というビューがあり、以下を実行してこのビューのフィールドの系統を取得するとします。

SELECT *
FROM COLUMN_DEPENDENCIES()
WHERE input_view_database_name = 'tpc_h'
    AND input_view_name = 'orders_of_european_customers';

例 2

「orders_of_european_customers」(データベース「tpc_h」) というビューがあり、以下を実行して「total_amount」列のデータの取得先であるデータソースを取得するとします。フィールドは複数のソースにトレースできます。たとえば、フィールドが 2 つのソースの 2 つのフィールドを結合したものである場合などです。

SELECT *
FROM COLUMN_DEPENDENCIES()
WHERE input_view_database_name = 'tpc_h'
    AND input_view_name = 'orders_of_european_customers'
    AND input_column_name = 'total_amount'
    AND position('Datasource' IN dependency_type) > 0
    AND depth = 1;

例 3

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

(client_df LEFT OUTER JOIN invoice) INNER JOIN product

次に、 client_df テーブルの first_name フィールドと last_name フィールドを結合する式により生成されるフィールドを customer_invoicing に追加したとします。

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

SELECT *
FROM COLUMN_DEPENDENCIES ()
WHERE input_view_database_name = 'customer360'
    AND input_view_name = 'customer_invoicing'
    AND input_column_name = 'date';

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

Sample result of executing the procedure COLUMN_DEPENDENCIES

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

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

  • 行 2 および 3 は、プライベートビューの依存関係を表しています (これらの行の [private] フィールドは true になっています)。このプライベートビューは、従業員と注文間の左外部結合です。

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

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

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

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

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

  • 行 4 の「expression」フィールドの値は、「customer_invoicing」ビューの「full_name」フィールドに割り当てられている式です。

必要な権限

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

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

  • データベースの管理者: ユーザーが入力パラメーター「database name」のデータベースの管理者である場合、このプロシージャはそのデータベースのすべてのビューのフィールドに関する情報を返します。

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

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