USER MANUALS

REFRESH_BASE_VIEW

説明

ストアドプロシージャ REFRESH_BASE_VIEW は、基本ビューとその基盤となるデータソースとのスキーマの違いを検出し、入力パラメータに従って違いを適用します。

たとえば、JDBC 基本ビューの場合、このプロシージャはデータベース内のテーブルのスキーマと基本ビューのスキーマとの違いを検出します。

構文

REFRESH_BASE_VIEW (
      db_name : text
    , table_name : text
    , apply_pk_changes : boolean
    , apply_type_changes : boolean
    , apply_nullability_changes : boolean
    , apply_field_description_changes : boolean
    , apply_view_description_changes : boolean
    , apply_when_affected_elements : boolean
    , apply_when_invalid_views : boolean
    , sample_size : integer
    , read_from : timestamp
    , propagate_views : array
    , propagate_ws_ops : array
)
  • db_name: table_name が属する Denodo データベースの名前。null の場合、プロシージャは現在のデータベースで table_name を検索します。

  • table_name: 基本ビューの名前。

  • apply_pk_changes: (デフォルトで true) プライマリキーに変更を適用します。

  • apply_type_changes: (デフォルトで true) 列タイプに変更を適用します。

  • apply_nullability_changes: (デフォルトで true) NULL 可能性フラグに変更を適用します。

  • apply_field_description_changes: (デフォルトで true) 列の説明に変更を適用します。

  • apply_view_description_changes: (デフォルトで true) ビューの説明に変更を適用します。

  • apply_when_affected_elements: (デフォルトで false) 影響を受ける (有効な状態の) エレメントがあっても変更を本適用します。

  • apply_when_invalid_views: (デフォルトで false) 一部の派生ビューが無効になると見なされる場合でも、変更を本適用します。

  • sample_size: (オプションParquet、Delta、Iceberg 形式のオブジェクトストレージデータ から作成されたビューにのみ適用) スキーマの進化 を処理するために分析するデータファイルの最大数を設定します。

  • read_from: (オプションParquet、Delta、Iceberg 形式のオブジェクトストレージデータ から作成されたビューにのみ適用) 目的のタイムスタンプ (UTC) 以降のファイルを分析できます。ソースファイルは、指定したタイムスタンプから古い順に、 sample_size パラメータで設定したファイル制限に達するまで分析されます。このパラメータに値が指定されない場合、ソースデータファイルは、新しい順に、前述のファイル制限に達するまで処理されます。

  • propagate_views: (オプション) 可能な場合は常に伝搬するビューのリスト。構文は {ROW('<db_name>.<view_name>')} です。たとえば、 p_internet_inc_1 および p_internet_inc_2 がデータベース admin 内の internet_inc の派生ビューであるとします。この場合、構文は {ROW('admin.p_internet_inc_1'), ROW('admin.p_internet_inc_2')} になります。

  • propagate_ws_ops: (オプション) 可能な場合は常に伝搬する Web サービスの操作のリスト。構文は {ROW('<db_name>.<web_service_name>/<operation_name>')} です。たとえば、 op_internet_inc がデータベース admin 内の Web サービス ws_internet_inc の操作であるとします。この場合、構文は {ROW('admin.ws_internet_inc/op_internet_inc')} になります。

このプロシージャの出力スキーマには以下のフィールドがあります。

  • detected_changes: 検出された変更のリスト。このプロシージャは、ビューのフィールドごとに 1 つの行と、ソースに存在しても、基本ビューには存在しないフィールドごとに 1 つの行を返します。フィールドが配列またはレジスターである場合、このプロシージャはそのサブフィールドごとに 1 つの行も返します。このフィールドの出力スキーマは次のようになります。

    • field: ビュー内のフィールドの名前。行が新しいフィールドを表している場合、これはソース内のフィールドの名前と同じです。

    • new_value: フィールドの変更の新しい値を表します。フィールドが変更されていないか、ソースから削除されている場合、この値は空になります。

    • new_value: フィールドの変更の古い値を表します。フィールドが変更されていないか、ソースから追加されている場合、この値は空になります。

    • modification: このフィールドの想定される値は以下のとおりです。

      • "" (空の文字列): フィールドは変更されていません。

      • 「New field」: 行はソースから追加されたフィールドを表しています。

      • 「Deleted field」: 行はソースから削除されたフィールドを表しています。

      • 「Type has changed」: フィールドの型が変更されました。

      • 「Property has changed」: フィールドの 1 つの「ソース型プロパティ」が変更されました。

      • 「Description has changed」: フィールドの説明が変更されました。

      • 「Compound structure has changed」: このフィールドのサブフィールドの 1 つが変更されました。

      • テーブルの記述が変更された場合、 field = Table description を含む新しい行が表示され、ラッパーとソースの記述の違いを比較します。

    • depth: 1 つ目の深さのフィールドの場合、この値は 1 です。

    • applied: 変更が適用されたかどうか。

  • affected_views: 変更の影響を受けるすべてのビューのリスト。このフィールドの出力スキーマは次のようになります。

    • database_name: view_name が属する Denodo データベースの名前。

    • view_name: 変更の影響を受けるビューの名前。

  • affected_ws_ops: 変更の影響を受けるすべての ws_ops のリスト。このフィールドの出力スキーマは次のようになります。

    • database_name: web_service_name が属する Denodo データベースの名前。

    • web_service_name: 変更の影響を受ける Web サービスの名前。

    • operation_name: 変更の影響を受ける操作の名前。

  • erroneous_views: 更新によって無効になるビューのリスト。このフィールドの出力スキーマは次のようになります。

    • database_name: view_name が属する Denodo データベースの名前。

    • view_name: 無効になるビューの名前。

注意

  • このプロシージャは、 table_name が基本ビューではない場合はエラーを返します。

  • このプロシージャは、 db_name または table_name が存在しない場合はエラーを返します。

必要な権限

以下のユーザーがこのプロシージャを実行できます。

  • 管理者またはこのデータベースの管理者。

  • このデータベースに対する Connect 権限と Create 権限、データソースに対する Execute 権限、および基本ビューに対する Metadata 権限と Write 権限を持っているユーザー。

タイプの変更の例

internet_inc はデータベース admin の JDBC 基本ビューであり、ソースデータベース内のそのソーステーブルの現在のスキーマが基本ビューの作成後に以下のように変更されたとします。

  • フィールド ttime の型が date から text に変更された。

デフォルトのパラメータを使用したクエリの例

SELECT detected_changes
FROM REFRESH_BASE_VIEW()
WHERE db_name = 'admin'
   AND table_name = 'internet_inc';

上記のクエリを呼び出した結果は以下のとおりです。

field

new_value

old_value

modification

depth

applied

iinc_id

long

long

1

false

summary

text

text

1

false

ttime

text

date

Type has changed

1

true

taxid

text

text

1

false

specific_field

text

text

1

false

この結果、ビュー internet_inc のフィールド ttime の型が text に変更されました。

apply_type_changes を無効にしたクエリの例

SELECT detected_changes
FROM REFRESH_BASE_VIEW()
WHERE db_name = 'admin'
   AND table_name = 'internet_inc'
   AND apply_type_changes = false;

上記のクエリを呼び出した結果は以下のとおりです。

field

new_value

old_value

modification

depth

applied

iinc_id

long

long

1

false

summary

text

text

1

false

ttime

text

date

Type has changed

1

false

taxid

text

text

1

false

specific_field

text

text

1

false

この結果、ビュー internet_inc は変更されませんでした。

派生ビューと新しいフィールドの場合の例

internet_inc はデータベース admin の JDBC 基本ビューであり、ソースデータベース内のそのソーステーブルの現在のスキーマが基本ビューの作成後に以下のように変更されたとします。

  • テーブルに新しいフィールド customer_id があります。

また、 p_internet_inc はデータベース admin 内の internet_inc からの派生ビューであり、その VQL は以下であるとします。

CREATE VIEW p_internet_inc AS SELECT iinc_id, summary FROM internet_inc;

デフォルトのパラメータを使用したクエリの例

SELECT detected_changes, affected_views
FROM REFRESH_BASE_VIEW()
WHERE db_name = 'admin'
   AND table_name = 'internet_inc';

上記のクエリを呼び出した detected_changes の結果は以下のとおりです。

field

new_value

old_value

modification

depth

applied

iinc_id

long

long

1

false

summary

text

text

1

false

ttime

date

date

1

false

taxid

text

text

1

false

specific_field

text

text

1

false

customer_id

long

New field

1

false

上記のクエリを呼び出した affected_views の結果は以下のとおりです。

affected_view_database

affected_view

admin

p_internet_inc

この結果、2 つのビューのどちらも変更されませんでした。

apply_when_affected_elements を有効にしたクエリの例

SELECT detected_changes, affected_views
FROM REFRESH_BASE_VIEW()
WHERE db_name = 'admin'
   AND table_name = 'internet_inc'
   AND apply_when_affected_elements = true;

上記のクエリを呼び出した detected_changes の結果は以下のとおりです。

field

new_value

old_value

modification

depth

applied

iinc_id

long

long

1

false

summary

text

text

1

false

ttime

date

date

1

false

taxid

text

text

1

false

specific_field

text

text

1

false

customer_id

long

New field

1

true

上記のクエリを呼び出した affected_views の結果は以下のとおりです。

affected_view_database

affected_view

admin

p_internet_inc

この結果、新しいフィールド customer_id がビュー internet_inc にのみ追加されました。

apply_when_affected_elements を有効にしたクエリと propagate_views のビューの例

SELECT detected_changes, affected_views
FROM REFRESH_BASE_VIEW()
WHERE db_name = 'admin'
   AND table_name = 'internet_inc'
   AND apply_when_affected_elements = true
   AND propagate_views = {ROW('admin.p_internet_inc')};

上記のクエリを呼び出した detected_changes の結果は以下のとおりです。

field

new_value

old_value

modification

depth

applied

iinc_id

long

long

1

false

summary

text

text

1

false

ttime

date

date

1

false

taxid

text

text

1

false

specific_field

text

text

1

false

customer_id

long

New field

1

true

上記のクエリを呼び出した affected_views の結果は以下のとおりです。

affected_view_database

affected_view

admin

p_internet_inc

この結果、新しいフィールド customer_id が両方のビューに追加されました。

ビュー p_internet_inc の新しい VQL は次のとおりです。

CREATE VIEW p_internet_inc AS SELECT iinc_id, summary, customer_id FROM internet_inc;

派生ビューとより少ないフィールドの場合の例

internet_inc はデータベース admin の JDBC 基本ビューであり、ソースデータベース内のそのソーステーブルの現在のスキーマが基本ビューの作成後に以下のように変更されたとします。

  • フィールド specific_field がテーブルから削除されました。

また、 p_internet_inc はデータベース admin 内の internet_inc からの派生ビューであり、その VQL は以下であるとします。

CREATE VIEW p_internet_inc AS SELECT iinc_id, specific_field FROM internet_inc;

デフォルトのパラメータを使用したクエリの例

SELECT detected_changes, erroneous_views
FROM REFRESH_BASE_VIEW()
WHERE db_name = 'admin'
   AND table_name = 'internet_inc';

上記のクエリを呼び出した detected_changes の結果は以下のとおりです。

field

new_value

old_value

modification

depth

applied

iinc_id

long

long

1

false

summary

text

text

1

false

ttime

date

date

1

false

taxid

text

text

1

false

specific_field

text

Deleted field

1

false

上記のクエリを呼び出した erroneous_views の結果は以下のとおりです。

erroneous_view_database

erroneous_view

admin

p_internet_inc

この結果、2 つのビューのどちらも変更されませんでした。

apply_when_invalid_views を有効にしたクエリの例

SELECT detected_changes, erroneous_views
FROM REFRESH_BASE_VIEW()
WHERE db_name = 'admin'
   AND table_name = 'internet_inc'
   AND apply_when_invalid_views = true;

上記のクエリを呼び出した detected_changes の結果は以下のとおりです。

field

new_value

old_value

modification

depth

applied

iinc_id

long

long

1

false

summary

text

text

1

false

ttime

date

date

1

false

taxid

text

text

1

false

specific_field

text

Deleted field

1

true

上記のクエリを呼び出した erroneous_views の結果は以下のとおりです。

erroneous_view_database

erroneous_view

admin

p_internet_inc

この結果、ビュー internet_inc 内のフィールド specific_field が削除され、ビュー p_internet_inc が無効化されました。

Add feedback