USER MANUALS

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

Add feedback