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
が無効化されました。