SQL操作を使用して、ソーステーブル、ビュー、またはDataFrameからターゲットDeltaテーブルにデータを更新/挿入できます。Lakeは、MERGEでの挿入、更新、削除をサポートしており、高度なユースケースを容易にするためにSQL標準を超える拡張構文をサポートしています。people10mupdatesという名前のソーステーブル、または/tmp/delta/people-10m-updatesのソースパスがあり、people10mという名前のターゲットテーブル、または/tmp/delta/people-10mのターゲットパスの新しいデータが含まれているとします。これらの新しいレコードの一部は、対象データにすでに存在している可能性があります。新しいデータをマージするには、その人のidが既に存在する行を更新し、一致するidが存在しない新しい行を挿入します。つのローのみが、ターゲット・テーブルの特定のローに一致します。句で指定された条件を評価して、重複する一致を判断します。句で指定された条件のみが考慮されます。マージ先」を参照してください。テーブル内のレコードをUPDATEまたはDELETEできます。テーブルが完全に書き換えられるのを避けるために、オプションの条件句を追加することをお勧めします。テーブル内の一致しないレコードを削除する基本的な構文を示しています。テーブルをソースと増分同期する」を参照してください。SOURCE句に条件を追加し、一致しないターゲット行で更新する値を指定します。プログラム操作のセマンティクスの詳細である。whenMatched句とwhenNotMatched句はいくつでも指定できます。句は、一致条件に基づいてソース行がターゲットテーブルの行と一致する場合に実行されます。これらの句には、次のセマンティクスがあります。アクションを含めることができます。アクションは、一致した行を削除します。各whenMatched句には、省略可能な条件を設定できます。この句条件が存在する場合、句条件がtrueの場合にのみ、一致するソース行とターゲット行のペアに対してupdateまたはdeleteアクションが実行されます。複数のwhenMatched句がある場合、それらは指定された順序で評価されます。最後の句を除くすべてのwhenMatched句には条件が必要です。マージ条件に一致するソース行とターゲット行のペアについて、どのwhenMatched条件もtrueと評価されない場合、ターゲット行は変更されないままになります。ターゲットデルタテーブルのすべての列をソースデータセットの対応する列で更新するには、whenMatched(...).updateAll()を使用します。...))ターゲットDeltaテーブルのすべての列に対して。したがって、このアクションでは、ソーステーブルにターゲットテーブルの列と同じ列があることが前提となっています。ない場合、クエリは分析エラーをスローします。自動スキーマ進化が有効になっている場合、この動作は変更されます。自動スキーマ進化を参照してください。句は、一致条件に基づいてソース行がターゲット行と一致しない場合に実行されます。これらの句には、次のセマンティクスがあります。句には、insertアクションのみを含めることができます。新しい行は、指定された列と対応する式に基づいて生成されます。ターゲットテーブルのすべての列を指定する必要はありません。指定されていないターゲット列の場合は、NULLが挿入されます。各whenNotMatched句には、省略可能な条件を設定できます。句条件が存在する場合、その行に対してその条件がtrueの場合にのみソース行が挿入されます。それ以外の場合、ソース列は無視されます。複数のwhenNotMatched句がある場合、それらは指定された順序で評価されます。最後の句を除くすべてのwhenNotMatched句には条件が必要です。ターゲットデルタテーブルのすべての列を、ソースデータセットの対応する列とともに挿入するには、whenNotMatched(...).insertAll()を使用します。...))ターゲットDeltaテーブルのすべての列に対して。したがって、このアクションでは、ソーステーブルにターゲットテーブルの列と同じ列があることが前提となっています。ない場合、クエリは分析エラーをスローします。自動スキーマ進化が有効になっている場合、この動作は変更されます。自動スキーマ進化を参照してください。句は、マージ条件に基づいてターゲット行がソース行と一致しない場合に実行されます。これらの句には、次のセマンティクスがあります。節はdeleteとupdateのアクションを指定できる。各whenNotMatchedBySource句には、省略可能な条件を設定できます。句条件が存在する場合、ターゲット行は、その行に対してその条件がtrueである場合にのみ変更されます。それ以外の場合、ターゲット行は変更されません。複数のwhenNotMatchedBySource句がある場合、それらは指定された順序で評価されます。最後の句を除くすべてのwhenNotMatchedBySource句には条件が必要です。定義上、whenNotMatchedBySource句には列値を取得するソース行がないため、ソース列を参照できません。1など)を実行できます。操作が失敗する可能性があります。セマンティクスに従い、一致したターゲット行を更新するためにどのソース行を使用する必要があるかが不明瞭である場合、このような更新操作はあいまいとなります。ソーステーブルを前処理することで、複数一致が発生しないようにすることができます。deltaTableとして定義されている場合のみです。一般的なETLの使用例は、ログをテーブルに追加してデルタテーブルにログを収集することです。多くの場合、ソースは重複したログレコードを生成する可能性があり、それらに対処するためにダウンストリームの重複排除手順が必要になります。mergeを使用すると、重複するレコードの挿入を回避できます。新しいログを含むデータセットは、それ自体内で重複排除する必要があります。マージのSQLセマンティクスにより、新しいデータをテーブル内の既存のデータと照合して重複を排除しますが、新しいデータセット内に重複データがある場合は、そのデータが挿入されます。したがって、テーブルにマージする前に、新しいデータの重複を排除してください。重複レコードが数日間しか取得されないことがわかっている場合は、テーブルを日付でパーティション分割し、照合するターゲットテーブルの日付範囲を指定することで、クエリーをさらに最適化できます。.execute();これは、テーブル全体ではなく、過去7日間のログのみで重複を検索するため、前のコマンドよりも効率的です。この挿入専用マージを構造化ストリーミングと使用して、ログの継続的な重複排除を実行できます。テーブルに継続的に書き込むことができます。別のストリーミングクエリーでは、この|Delatテーブルから重複排除されたデータを継続的に読み込むことができる。挿入のみのマージは、Deltaテーブルに新しいデータを追加するだけであるため、このようなことが可能である。追跡と適用をネイティブでサポートしています。フィードを処理するときに順序が正しくないレコードが正しく処理されるようにします。Tablesを使用してチェンジデータキャプチャを簡素化します。SOURCEを使用して任意の条件を作成し、テーブルの一部をアトミックに削除および置換できます。テーブルがある場合に特に役立ちます。次のクエリは、このパターンを使用して、ソースから5日分のレコードを選択し、ターゲットの一致するレコードを更新し、ソースからターゲットに新しいレコードを挿入し、ターゲットの過去5日間の一致しないレコードをすべて削除することを示しています。DELETEソーステーブルとターゲットテーブルに同じブールフィルタを提供することにより、削除を含む変更をソーステーブルからターゲットテーブルに動的に伝播することができます。注このパターンは条件句なしで使用できますが、ターゲットテーブルを完全に書き換えることになり、コストがかかる可能性があります。