Data Transmission Service (DTS) でデータ同期タスクまたは移行タスクを作成する際に、移行先テーブルに追加の列を追加し、値を割り当てることができます。データが移行先に格納された後、これらの列の値でフィルターして、メタデータ管理、重複排除、ソートを実行できます。
サポートされているシナリオ
追加列は、次のソースとターゲットの組み合わせでサポートされています:
ソースデータベースのタイプ | ターゲットデータベースのタイプ |
任意 | DataHub、Lindorm、Kafka、または ClickHouse |
DB2 for LUW、または DB2 for iSeries (AS/400) | MySQL、または PolarDB for MySQL |
MySQL、MariaDB、または PolarDB for MySQL | MySQL、MariaDB、または PolarDB for MySQL |
MySQL | Tair/Redis、AnalyticDB for PostgreSQL、または AnalyticDB for MySQL 3.0 |
PolarDB for PostgreSQL | AnalyticDB for PostgreSQL |
SQL Server | MySQL |
注意事項
同期インスタンスでは、[同期タイプ] を [スキーマ同期] に設定します。 移行インスタンスでは、[移行タイプ] を [スキーマ移行] に設定します。
実行中の同期タスクで追加列ルールを修正する前に、列名がターゲットテーブルの既存の列と競合しないか確認してください。
ソースデータベースが MongoDB の場合、ターゲットコレクションに _id または _value という名前のフィールドが含まれていると、同期は失敗します。
[選択したオブジェクト] 内のデータベースを右クリックすると、設定済みの追加列が、そのターゲットデータベース内のすべてのテーブルに適用されます。
同期タスクで抽出、変換、ロード (ETL) が設定されている場合、まず追加列ルールが実行されて値が生成され、その後、ETL スクリプトがターゲットに同期される最終的な値を計算します。
同期タスクへの列の追加
以下の手順では、データ同期インスタンスを例として使用します。同じ手順が移行インスタンスにも適用されます。
前提条件
開始する前に、以下が準備できていることを確認してください:
サポートされているシナリオ の DTS 同期インスタンスまたは移行インスタンス
Data Management (DMS) コンソール または DTS コンソール へのアクセス権
追加列の設定
データ同期タスクページに移動します。 新しい DTS コンソールのデータ同期タスクページ
Data Management (DMS) コンソール にログインします。
上部メニューで、[Data + AI] をクリックします。
左側のナビゲーションペインで、[DTS (DTS)] > [データ同期] を選択します。
DMS コンソールモードによってナビゲーションパスが異なる場合があります。 詳細については、「シンプルモードコンソール」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。 また、新しい DTS コンソールのデータ同期タスクページ に直接移動することもできます。
[タスクの作成] をクリックし、ソースデータベースとターゲットデータベースを設定します。
実行中 の同期インスタンスに列を追加するには、代わりに [オブジェクトを再選択] をクリックします。
プロンプトに従って、[オブジェクトの設定] 手順に進みます。
[同期タイプ] を [スキーマ同期] に設定します。
[ソースオブジェクト] で、同期するデータベースまたはテーブルを選択し、
をクリックして [選択したオブジェクト] に移動させます。[選択したオブジェクト] で、データベースまたはテーブルを右クリックします。
ダイアログボックスで、[追加列] セクションに移動し、 [列を追加] をクリックします。
新しい列の [列名]、[タイプ]、[値の割り当て] を入力します。
[列名] と [タイプ] は、 ターゲットテーブルに追加される列を定義します。
[値の割り当て] は、 ソーステーブルの列または組み込み変数を参照する式です。
アイコンをクリックして式エディターを開きます。 構文の詳細については、「式の参照」をご参照ください。
[OK] をクリックします。
プロンプトに従って、タスクの残りの設定を完了します。
式のリファレンス
追加列の値は、定数、変数、演算子、式、関数で構成されます。その構文は、ETL で使用されるデータ処理 DSL (ドメイン固有言語) と互換性があります。
式では、列名を単一引用符 ('col') ではなく、バッククォート (`col`) で囲みます。
一般的なユースケース
詳細なリファレンスに進む前に、最も一般的なパターンを以下に示します。
目的 | 式パターン |
各行にソーステーブル名をタグ付けする |
|
各行にソースデータベース名をタグ付けする |
|
操作タイプ (挿入、更新、削除) を記録する |
|
トランザクションがコミットされた日時を記録する |
|
ソースカラムから複合キーを構築する |
|
挿入操作と他の操作をフラグで区別する |
|
列内の機密データをマスクする |
|
定数
タイプ | 例 |
int |
|
float |
|
string |
|
boolean |
|
datetime |
|
変数
これらの組み込み変数を使用して、レプリケートされた各行のメタデータを取得します。
変数 | 説明 | データ型 | 値の例 |
| ソーステーブル名 | 文字列 |
|
| ソースデータベース名 | 文字列 |
|
| DML 操作のタイプ | 文字列 |
|
| トランザクションのコミット時刻 | 日時 |
|
| ソース列の名前。指定すると、現在の行の対応する列の値が返されます。 | ソース列のデータ型 |
|
| システム変更番号 (SCN):トランザクションコミットのバージョンと時刻を一意に識別します。 | 文字列 |
|
| データレコードのアドレス ID:行の位置を一意に特定します。 MySQL ソースではサポートされていません。 | 文字列 |
|
式関数
数値演算
関数 | 構文 | パラメーター | 戻り値 | 例 |
加算 |
|
| 両方の入力が整数の場合は整数、それ以外は float |
|
減算 |
|
| 両方の入力が整数の場合は整数、それ以外は float |
|
乗算 |
|
| 両方の入力が整数の場合は整数、それ以外は float |
|
除算 |
|
| float |
|
剰余 |
|
| 両方の入力が整数の場合は整数、それ以外は float |
|
論理演算
関数 | 構文 | パラメーター | 戻り値 | 例 |
等しい |
| 整数、float、または文字列 | ブール値 |
|
より大きい |
| 整数、float、または文字列 | ブール値 |
|
より小さい |
| 整数、float、または文字列 | ブール値 |
|
以上 |
| 整数、float、または文字列 | ブール値 |
|
以下 |
| 整数、float、または文字列 | ブール値 |
|
AND |
| ブール値 | ブール値 |
|
OR |
| ブール値 | ブール値 |
|
IN |
|
| ブール値 |
|
null である |
| 任意の型 | ブール値 |
|
null でない |
| 任意の型 | ブール値 |
|
文字列関数
関数 | 構文 | パラメーター | 戻り値 | 例 |
文字列の連結 |
| 文字列 | 連結された文字列 |
|
フォーマットと連結 |
|
| フォーマットされた文字列 |
|
部分文字列の置換 |
|
| 置換後の文字列 |
|
すべての文字列フィールドで置換 |
|
| 置換後の文字列 |
|
文字の除去 |
|
| 先頭/末尾の文字が削除された文字列 |
|
小文字に変換 |
| 文字列の列または定数 | 小文字の文字列 |
|
大文字に変換 |
| 文字列の列または定数 | 大文字の文字列 |
|
文字列から整数へ |
| 文字列 | 整数 |
|
整数から文字列へ |
| 整数 | 文字列 |
|
出現回数のカウント |
|
| 出現回数 |
|
部分文字列の検索 |
|
| 最初の一致位置。見つからない場合は |
|
すべてが英字かどうかのチェック |
| 文字列の列または定数 | ブール値 |
|
すべてが数字かどうかのチェック |
| 文字列の列または定数 | ブール値 |
|
正規表現マッチ |
|
| ブール値 |
|
文字列の一部のマスク |
|
| マスクされた文字列 |
|
文字列の後にある部分文字列の取得 |
|
|
|
|
文字列の前にある部分文字列の取得 |
|
|
|
|
2つの文字列の間にある部分文字列の取得 |
|
|
|
|
値が文字列かどうかのチェック |
| 文字列または列名 | ブール値 |
|
MongoDB ドキュメントからのフィールド取得 |
| ネストされたフィールドパス | フィールド値 |
|
条件式
構文 | パラメーター | 戻り値 | 例 |
|
|
|
|
日時関数
関数 | 構文 | パラメーター | 戻り値 | 例 |
現在時刻 (秒精度) |
| なし | DATETIME、秒単位の精度 |
|
現在時刻 (ミリ秒精度) |
| なし | DATETIME、ミリ秒単位の精度 |
|
UTC タイムスタンプ (秒) から DATETIME へ |
|
| DATETIME、秒単位の精度 |
|
UTC タイムスタンプ (ミリ秒) から DATETIME へ |
|
| DATETIME、ミリ秒単位の精度 |
|
DATETIME から UTC タイムスタンプ (秒) へ |
|
| 整数 |
|
DATETIME から UTC タイムスタンプ (ミリ秒) へ |
|
| 整数 |
|
DATETIME から文字列へ |
|
| 文字列 |
|
文字列から DATETIME へ |
|
| DATETIME |
|
DATETIME の調整 |
|
| DATETIME |
|
グローバル機能
フロー制御関数
関数
構文
パラメーター
例
if 文
e_if(bool_expr, func_invoke)
bool_expr:ブール値の定数または関数呼び出し。定数:true または false。関数呼び出しの例:op_gt(`id`, 10)。
func_invoke:関数呼び出し。サポート対象:e_drop, e_keep, e_set, e_if, e_compose
e_if(op_gt(`id`, 10), e_drop()); ID > 10 の場合、レコードを破棄します。
if-else 文
e_if_else(bool_expr, func_invoke1, func_invoke2)
bool_expr:ブール値の定数または関数呼び出し。定数:true または false。関数呼び出しの例:op_gt(`id`, 10)。
func_invoke1:条件が true の場合に実行される関数呼び出し。
func_invoke2:条件が false の場合に実行される関数呼び出し。
e_if_else(op_gt(`id`, 10), e_set(`tag`, 'large'), e_set(`tag`, 'small')); ID > 10 の場合、tag を "large" に設定し、それ以外の場合は "small" に設定します。
複数の条件を評価し、最初に一致した操作を実行する switch のような文。どの条件にも一致しない場合は、デフォルトの操作を実行します。
s_switch(condition1, func1, condition2, func2, ..., default=default_func)
condition1:ブール値の定数または関数呼び出し。定数:true または false。関数呼び出しの例:op_gt(`id`, 10)。
func_invoke:関数呼び出し。condition1 をチェックし、true の場合はこの関数を実行して switch を終了します。false の場合は次の条件をチェックします。
default_func:すべての条件が false の場合に実行される関数呼び出し。
e_switch(op_gt(`id`, 100), e_set(`str_col`, '>100'), op_gt(`id`, 90), e_set(`str_col`, '>90'), default=e_set(`str_col`, '<=90'))。
複数の操作を組み合わせる
e_compose(func1, func2, func3, ...)
func1:関数呼び出し。e_set, e_drop, e_if が可能です。
func2:関数呼び出し。e_set, e_drop, e_if が可能です。
e_compose(e_set(`str_col`, 'test'), e_set(`dt_col`, dt_now())); str_col を "test" に、dt_col を現在の時刻に設定します。
データ操作関数
関数
構文
パラメーター
例
このレコードを破棄する (同期しない)
e_drop()
なし
e_if(op_gt(`id`, 10), e_drop()); ID > 10 のレコードを破棄します。
このレコードを保持する (ターゲットに同期する)
e_keep(condition)
condition:ブール式
e_keep(op_gt(id, 1)); ID > 1 のレコードのみを同期します。
列の値を設定
e_set(`col`, val, NEW)
col:列名
val:定数または関数呼び出し。col のデータ型と一致する必要があります。
NEW:col を val のデータ型に変換します (オプション)
重要NEW を省略する場合は、前のカンマを含めないでください。タスクエラーを避けるために、データ型の互換性を確認してください。
e_set(`dt_col`, dt_now()); dt_col を現在の時刻に設定します。
e_set(`col1`, `col2` + 1); col1 を col2 + 1 に設定します。
e_set(`col1`, 1, NEW); col1 を数値型に変換し、1 に設定します。
MongoDB のフィールド保持、フィールド破棄、およびフィールド名マッピング
e_expand_bson_value('*', 'fieldA',{"fieldB":"fieldC"})
*:保持するフィールド名。* はすべてのフィールドを意味します。
fieldA:破棄するフィールド名。
{"fieldB":"fieldC"}:フィールド名マッピング。fieldB はソースフィールド名、fieldC はターゲットフィールド名です。
説明フィールド名マッピングはオプションです。
e_expand_bson_value("*", "_id,name"); _id と name を除くすべてのフィールドをターゲットに書き込みます。
よくある質問
MySQL から Redis への DTS タスクでカスタムキーと値を設定するにはどうすればよいですか?
デフォルトでは、DTS は 3 つの[キャッシュマッピングモード] オプションのいずれかを使用してソース行全体をマッピングします。特定の列を抽出してカスタムのキーと値のペアを構築するには、代わりに 2 つの特別な追加列 __DTS_TP_TO_REDIS_KEY__ と __DTS_TP_TO_REDIS_VALUE__ を追加する必要があります。
3 つのキャッシュデータマッピングモードは以下の通りです:
KV モデル (データベース-テーブル-主キー)
ハッシュモデル (データベース-テーブル-主キー)
ハッシュモデル (データベース-テーブル)
また、[値データの分割方式] (オプション:[JSON 形式]、[キーと値のカンマ区切り]、または[値のカンマ区切り]) を設定し、同期する DML 操作タイプ (INSERT、UPDATE、DELETE) を選択する必要があります。
設定手順:
オブジェクトを設定する際、データベースとテーブルを右側のペインに移動し、宛先 Redis DB の編集ボタンをクリックします。
列
__DTS_TP_TO_REDIS_KEY__と__DTS_TP_TO_REDIS_VALUE__を追加します。DSL 構文を使用して[値の割り当て] 式を設定します。たとえば、以下の MySQL の
aesテーブルを考えてみましょう:CREATE TABLE `aes` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自動インクリメント主キー', `login_time` INT(10) NOT NULL DEFAULT '0' COMMENT 'ログイン時刻', `pay_time` INT(10) NOT NULL DEFAULT '0' COMMENT '支払い時刻', `gid` INT(10) NOT NULL DEFAULT '0' COMMENT 'ゲーム ID', `cid` INT(10) NOT NULL DEFAULT '0' COMMENT 'チャネル ID', `gcp_code` VARCHAR(40) NOT NULL DEFAULT '' COMMENT 'チャネルパッケージ番号。空の値は gid の新しいエントリを示します。', `uname` VARCHAR(120) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'アカウント', PRIMARY KEY (`id`), UNIQUE KEY `idx_uq` (`gid`, `gcp_code`, `uname`), KEY `idx_uname` (`uname`) )ENGINE=InnoDB AUTO_INCREMENT=48022 DEFAULT CHARSET=utf8 COMMENT='ゲームアカウントの有効化時刻情報テーブル';ビジネス要件:
キー:
stat_create_day:{gcp_code}:{uname}— 2 つのソース列から構築値:
{login_time}— datetime 形式に変換された UNIX タイムスタンプ
値の割り当て式:
__DTS_TP_TO_REDIS_KEY__:'stat_create_day'+':'+gcp_code+':'+uname__DTS_TP_TO_REDIS_VALUE__:dt_fromtimestamp(cast_string_to_long(login_time))
同期または移行が完了すると、Redis 内のキーと値のペアは次のようになります:
データ同期が完了したら、DMS を介してターゲット Redis インスタンスに接続します。DB0 で、
stat_create_day:{gcp_code}:{uname}タイプのキーにgetコマンドを実行します。返される値は datetime 形式 (例:2025-11-18 23:49:29) となり、dt_fromtimestamp関数が UNIX タイムスタンプを datetime 値に正しく変換したことを確認できます。