GET_SOURCE_CHANGES¶
説明
ストアドプロシージャ GET_SOURCE_CHANGES
は、基本ビューとその基盤となるデータソースとのスキーマの違いを検出します。
たとえば、JDBC 基本ビューの場合、このプロシージャはデータベース内のテーブルのスキーマと基本ビューのスキーマとの違いを検出します。
構文
GET_SOURCE_CHANGES (
db_name : text
, table_name : text
, sample_size : integer
, read_from : timestamp
)
db_name
:table_name
が属す Denodo データベースの名前。null
の場合、現在のデータベースのtable_name
を検索します。table_name
: 基本ビューの名前sample_size
: (オプション、 Parquet 形式のオブジェクトストレージデータ から作成されたビューにのみ適用) スキーマの進化 を処理するために分析するデータファイルの最大数を設定します。read_from
: (オプション、 Parquet 形式のオブジェクトストレージデータ から作成されたビューにのみ適用) 目的のタイムスタンプ (UTC) 以降のファイルを分析できます。ソースファイルは、指定したタイムスタンプから古い順に、sample_size
パラメータで設定したファイル制限に達するまで分析されます。このパラメータに値が指定されない場合、ソースデータファイルは、新しい順に、前述のファイル制限に達するまで処理されます。
このプロシージャは、ビューのフィールドごとに 1 つの行と、ソースに存在しても、基本ビューには存在しないフィールドごとに 1 つの行を返します。
フィールドが配列またはレジスターである場合、このプロシージャはそのサブフィールドごとに 1 つの行も返します。
このプロシージャの出力スキーマには以下のフィールドがあります。
field
: ビュー内のフィールドの名前。行が新しいフィールドを表している場合、これはソース内のフィールドの名前と同じです。type
: フィールドの新しい型。フィールドが変更されない場合、この値は「old_type」と同じです。フィールドがソースから削除された場合、この値は空です。old_type
: フィールドの古い型。フィールドの型が変更されない場合、この値は「type」と同じです。行が新しいフィールドを表している場合、この値は空です。modification
: このフィールドの想定される値は以下のとおりです。"" (空の文字列): フィールドは変更されていません。
「New field」: 行はソースに追加されたフィールドを表しています。
「Deleted field」: 行はソースから削除されたフィールドを表しています。
「Type has changed」: フィールドの型が変更されました。
「Properties have changed」: フィールドの 1 つ以上の「ソース型プロパティ」が変更されました。
「Compound structure has changed」: このフィールドのサブフィールドの 1 つが変更されました。
注釈
バージョン 8.0u20240306 以降、テーブルの記述が変更された場合、 field = Table description
を含む新しい行が表示され、ラッパーとソースの記述の違いを比較します。
level
: 第 1 レベルのフィールドの場合、この値は1
です。
注意
デフォルトでは、ソースを検出しなかった場合、このプロシージャはエラーを返します。たとえば、
table_name
が JDBC 基本ビューであり、基盤となるデータベースからテーブル/ビューが削除された場合、このプロシージャはエラーを返します。また、table_name
が JSON 基本ビューであり、JSON ファイルが存在しない場合も同様です。ソースが存在しない場合にこのプロシージャが失敗しないようにするには、VQL シェルから以下のステートメントを実行します (管理者である必要があります)。
SET 'com.denodo.vdb.contrib.storedprocedure.SourceChangesProcedure.errorsAsResults'='true'
Virtual DataPort サーバーを再起動して変更を適用します。
この変更により、このプロシージャはフィールドごとに 1 つではなく、1 つの行のみを返すようになり、
modification
フィールドにエラーが保持されます。このプロシージャは、
table_name
が基本ビューではない場合はエラーを返します。このプロシージャは、
db_name
またはtable_name
が存在しない場合はエラーを返します。
必要な権限
このプロシージャを実行できるのは、基本ビューに対する Metadata 権限を持ち、データソースに対する Execute 権限を持つユーザーのみです。つまり、以下のユーザーはこのプロシージャを実行できます。
管理者またはこのデータベースの管理者
このデータベースに対する Connect 権限、基本ビューに対する Metadata 権限、およびデータソースに対する Execute 権限を持つユーザー
例
internet_inc
はデータベース customer360
の JDBC 基本ビューであり、そのソーステーブルの現在のスキーマが基本ビューの作成後に以下のように変更されたとします。
テーブルに新しいフィールド
CUSTOMER_ID
が追加されたフィールド
SPECIFIC_FIELD1
がテーブルから削除されたフィールド
TTIME
の型が text に変更されたフィールド
SUMMARY
の型は同じであるが、そのプロパティが変更された
SELECT field, type, old_type, modification, depth
FROM GET_SOURCE_CHANGES()
WHERE db_name = 'customer360'
AND table_name = 'incident';
上記のクエリを呼び出した結果は以下のとおりです。
field |
type |
old_type |
modification |
depth |
---|---|---|---|---|
IINC_ID |
long |
long |
1 |
|
SUMMARY |
text |
text |
Properties have changed |
1 |
TTIME |
text |
date |
Type has changed |
1 |
TAXID |
text |
text |
1 |
|
SPECIFIC_FIEL D1 |
text |
Deleted Field |
1 |
|
CUSTOMER_ID |
long |
New Field |
1 |