次の例を考えてみましょう:

id (主キー) と orderDate (チェック式として使用) の列を持つソース・テーブルがあります。 この最初の例では、identityExpression、NULLです。

1. 最初の状況

source.table Materialization前

id

orderDate

description

1

2010/01/01

descr_1

2

2011/01/01

descr_2

3

2012/01/01

descr_3

2. 最適化ジョブの実行(フルコピー):

source.table は、まずdwh.table に完全にコピーされます:

id

orderDate

description

1

2010/01/01

descr_1

2

2011/01/01

descr_2

3

2012/01/01

descr_3

3. Source テーブルが成長し、いくつかの行が更新されます(青色でハイライトされます)

id

orderDate

description

1

2010/01/01

descr_1

2

2011/01/01

descr_2_changed

3

2012/01/01

descr_3_changed

3.1

2012/01/01

descr_3.1

4

2012/06/01

descr_4

5

2013/02/01

descr_5

(idが3と3.1の行はorderDateが同じであることに注意してください)

4. インクリメンタル最適化ジョブの実行 (newRowCheckExpression = "orderDate")

4.1 Materialized Table にすでにあるデータの検索

すでにdwh.table に存在する最後の行を推定するために、インクリメンタルジョブは、最初に以下を発行し

SELECT MAX(orderDate) as checkExprValue FROM dwh.table

そして以下を取得します

checkExprValue = '2012/01/01'

4.2 DELTA テーブル作成と入力

DELTAは以下のように計算されます:

4.2.1 deleteOldData = false

SELECT * INTO dwh.delta FROM source.table WHERE orderDate > '2012/01/01'

4.2.2 deleteOldData = true

SELECT * INTO dwh.delta FROM source.table WHERE orderDate >= '2012/01/01'

dwh.delta (deleteOldData = false)

id

orderDate

description

4

2012/06/01

descr_4

5

2013/02/01

descr_5

dwh.delta (deleteOldData = true)

id

orderDate

description

3

2012/01/01

descr_3_changed

3.1

2012/01/01

descr_3.1

4

2012/06/01

descr_4

5

2013/02/01

descr_5

4.3 元のマテリアライズドテーブルから更新する行を削除します。 

このステップは、deleteOldDataをtrueに設定してインクリメンタル更新を実行した場合にのみ実行されます。

DELETE FROM dwh.table WHERE orderDate >= '2012/01/01'

その後、Materialized Tableには以下の行が含まれます:

dwh.table (deleteOldData = true)

id

orderDate

description

1

2010/01/01

descr_1

2

2011/01/01

descr_2

4.4 元のマテリアライズドテーブルにDELTA を追加します。 

次のように計算され

INSERT INTO dwh.table SELECT * FROM dwh.delta

以下の結果になります

dwh.table (deleteOldData = false)

id

orderDate

description

1

2010/01/01

descr_1

2

2011/01/01

descr_2

3

2012/01/01

descr_3

4

2012/06/01

descr_4

5

2013/02/01

descr_5

dwh.table (deleteOldData = true)

id

orderDate

description

1

2010/01/01

descr_1

2

2011/01/01

descr_2

3

2012/01/01

descr_3_changed

3.1

2012/01/01

descr_3.1

4

2012/06/01

descr_4

5

2013/02/01

descr_5

It is important to note how the row with id = 2 was not updated (its description value is "descr_2" instead of "descr_2_changed") since this row does not match the criteria provided by the newRowCheckExpression parameter.