データ書込In-DBツール
データ書込In-DBを使用して、テーブルをデータベース内で直接作成または更新します。
インデータベースは、データベースからデータを移動することなく大きなデータセットに対してブレンディングと分析を可能にし、従来の分析メソッドに比べて大幅なパフォーマンス向上を実現します。インデータベースツールカテゴリの詳細については、インデータベースの概要を参照してください。
ツールの設定
出力モード: データを書き込むための適切なオプションを選択します。選択肢には、次のものが含まれます。
既存のものを付加する: 既存のテーブルにすべてのデータを追加します。出力は、前レコードと後レコードで構成されます。
データを削除して付加: テーブルから元のレコードをすべて削除し、既存のテーブルにデータを追加します。このモードは、書き込み先のデータベースによって異なります。
Oracleデータベース: DELETEステートメントを使用します。
SQL Serverデータベース: TRUNCATE TABLEステートメントを使用します。こちらのほうが より効率的な方法 です。テーブルの ALTER TABLE 権限または TRUNCATE 権限のいずれかが必要です。
テーブルを上書きする (ドロップ): 既存のテーブルを完全に削除し、新しいテーブルを作成します。
新しいテーブルを作成する: 新しいテーブルを作成します。既存のテーブルは上書きされません。
一時テーブルを作成する: セッションの終了まで使用可能な一時テーブルに書き込みます。このオプションは、メタデータを所定の位置に一時的に保持するため、In-DB 予測マクロを作成する場合に便利です。このオプションを選択すると、テーブル名フィールドは無効になり、[各実行時に固有の一時テーブル名が生成されます] と表示されます。
行の更新: 入力レコードに基づいてテーブルの既存の行を更新します。
行の削除: 入力レコードに基づいてテーブルの既存の行を削除します。
テーブル名: 作成または更新するデータベーステーブルの名前を入力します。
フィールドマッピングを付加 (または [行の更新] が選択された 出力モード の場合は、[フィールドマップの設定]): この領域は、[既存のものを追加する] または [データを削除して付加する] が上で選択されている場合に有効になります。
設定モードを選択します。
名前による自動設定: フィールド名でフィールドを整列します。
位置による自動設定: ストリーム内のフィールドの順序でフィールドを整列します。
フィールドが異なる場合: ドロップダウンメニューのオプションから、不適合データフィールドを処理する方法を選択します。
エラー - 処理の停止: 結果ウィンドウにエラーをスローし、処理を終了します。
適用可能なフィールドの出力: 適用可能なフィールドが含まれます。Null値は空のフィールドに表示されます。
オプション: この領域は、出力モード として 行の更新 または 行の削除 が選択されるとアクティブになります。
WHEREフィールドマップ: これは、行の更新と行の削除出力モードの条件ステートメントを形成します。
制限事項
現在、出力オプションの更新/削除は列のエイリアスをサポートしていません。
[出力を更新] オプションでは、[名前による自動設定] のフィールドマッピングオプション、およびターゲットテーブルのフィールド数に一致するフィールドの数について、[位置による自動設定] のフィールドマッピングオプションで、すべてのフィールド名がターゲットテーブルのフィールド名と一致する必要があります。
更新/削除は、現時点で SQL Server ODBC接続でのみサポートされています。
更新/削除出力オプションは現在、Null値の更新または削除をサポートしていません。Alteryxの更新と削除のクエリに使用されている比較演算子(
=
や!=
など)は、Null値に対してエラーを返します。詳細については、Microsoft SQL Serverのドキュメント を参照してください。書き込みInDBツールを使用してデータを付加する場合、INSERTを有効にするには、ターゲットテーブルのすべての列がINSERTステートメントに含まれている必要があります。欠落している列はNull値が付けられます。
クエリ構造
出力モードの [行の更新と削除] オプションのサンプルクエリ:
行の更新
WITH upstream AS ( ... ) UPDATE t SET t.col2 = (SELECT col2 FROM upstream u WHERE u.col1 = t.col1 AND ...), ... FROM target_ t WHERE EXISTS ( SELECT * FROM upstream u WHERE u.col1 = t.col1 AND ... )
行の削除
WITH upstream AS ( ... ) DELETE t from target_ t WHERE EXISTS ( SELECT * FROM upstream u WHERE u.col1 = t.col1 AND ... )