すべてのプロダクト
Search
ドキュメントセンター

Data Transmission Service:追加の列

最終更新日:Sep 01, 2026

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 スクリプトがターゲットに同期される最終的な値を計算します。

同期タスクへの列の追加

以下の手順では、データ同期インスタンスを例として使用します。同じ手順が移行インスタンスにも適用されます。

前提条件

開始する前に、以下が準備できていることを確認してください:

追加列の設定

  1. データ同期タスクページに移動します。 新しい DTS コンソールのデータ同期タスクページ

    1. Data Management (DMS) コンソール にログインします。

    2. 上部メニューで、[Data + AI] をクリックします。

    3. 左側のナビゲーションペインで、[DTS (DTS)] > [データ同期] を選択します。

    DMS コンソールモードによってナビゲーションパスが異なる場合があります。 詳細については、「シンプルモードコンソール」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。 また、新しい DTS コンソールのデータ同期タスクページ に直接移動することもできます。
  2. [タスクの作成] をクリックし、ソースデータベースとターゲットデータベースを設定します。

    実行中 の同期インスタンスに列を追加するには、代わりに [オブジェクトを再選択] をクリックします。
  3. プロンプトに従って、[オブジェクトの設定] 手順に進みます。

  4. [同期タイプ][スキーマ同期] に設定します。

  5. [ソースオブジェクト] で、同期するデータベースまたはテーブルを選択し、 image.png をクリックして [選択したオブジェクト] に移動させます。

  6. [選択したオブジェクト] で、データベースまたはテーブルを右クリックします。

  7. ダイアログボックスで、[追加列] セクションに移動し、 [列を追加] をクリックします。

  8. 新しい列の [列名][タイプ][値の割り当て] を入力します。

    • [列名][タイプ] は、 ターゲットテーブルに追加される列を定義します。

    • [値の割り当て] は、 ソーステーブルの列または組み込み変数を参照する式です。 ... アイコンをクリックして式エディターを開きます。 構文の詳細については、「式の参照」をご参照ください。

  9. [OK] をクリックします。

  10. プロンプトに従って、タスクの残りの設定を完了します。

式のリファレンス

追加列の値は、定数、変数、演算子、式、関数で構成されます。その構文は、ETL で使用されるデータ処理 DSL (ドメイン固有言語) と互換性があります。

式では、列名を単一引用符 ('col') ではなく、バッククォート (`col`) で囲みます。

一般的なユースケース

詳細なリファレンスに進む前に、最も一般的なパターンを以下に示します。

目的

式パターン

各行にソーステーブル名をタグ付けする

__TB__

各行にソースデータベース名をタグ付けする

__DB__

操作タイプ (挿入、更新、削除) を記録する

__OPERATION__

トランザクションがコミットされた日時を記録する

__COMMIT_TIMESTAMP__

ソースカラムから複合キーを構築する

'prefix:'+col1+':'+col2

挿入操作と他の操作をフラグで区別する

(op_eq(__OPERATION__,'__OP_INSERT__')? 1 : 0)

列内の機密データをマスクする

str_mask(phone, 7, 10, '#')

定数

タイプ

int

123

float

123.4

string

"hello1_world"

boolean

true または false

datetime

DATETIME('2021-01-01 10:10:01')

変数

これらの組み込み変数を使用して、レプリケートされた各行のメタデータを取得します。

変数

説明

データ型

値の例

__TB__

ソーステーブル名

文字列

table

__DB__

ソースデータベース名

文字列

mydb

__OPERATION__

DML 操作のタイプ

文字列

__OP_INSERT____OP_UPDATE____OP_DELETE__

__COMMIT_TIMESTAMP__

トランザクションのコミット時刻

日時

'2021-01-01 10:10:01'

カラム

ソース列の名前。指定すると、現在の行の対応する列の値が返されます。

ソース列のデータ型

id 名前

__SCN__

システム変更番号 (SCN):トランザクションコミットのバージョンと時刻を一意に識別します。

文字列

22509****

__ROW_ID__

データレコードのアドレス ID:行の位置を一意に特定します。 MySQL ソースではサポートされていません。

文字列

AAAgWHAAKAAJgX****

式関数

数値演算

関数

構文

パラメーター

戻り値

加算

op_sum(value1, value2) または value1+value2

value1value2:整数または float

両方の入力が整数の場合は整数、それ以外は float

op_sum(col1, 1.0)

減算

op_sub(value1, value2) または value1-value2

value1value2:整数または float

両方の入力が整数の場合は整数、それ以外は float

op_sub(col1, 1.0)

乗算

op_mul(value1, value2) または value1*value2

value1value2:整数または float

両方の入力が整数の場合は整数、それ以外は float

op_mul(col1, 1.0)

除算

op_div_true(value1, value2) または value1/value2

value1value2:整数または float

float

op_div_true(col1, 2.0)col1=15 の場合、7.5 を返します

剰余

op_mod(value1, value2)

value1value2:整数または float

両方の入力が整数の場合は整数、それ以外は float

op_mod(col1, 10)col1=23 の場合、3 を返します

論理演算

関数

構文

パラメーター

戻り値

等しい

op_eq(value1, value2)

整数、float、または文字列

ブール値

op_eq(col1, 23)

より大きい

op_gt(value1, value2)

整数、float、または文字列

ブール値

op_gt(col1, 1.0)

より小さい

op_lt(value1, value2)

整数、float、または文字列

ブール値

op_lt(col1, 1.0)

以上

op_ge(value1, value2)

整数、float、または文字列

ブール値

op_ge(col1, 1.0)

以下

op_le(value1, value2)

整数、float、または文字列

ブール値

op_le(col1, 1.0)

AND

op_and(value1, value2)

ブール値

ブール値

op_and(is_male, is_student)

OR

op_or(value1, value2)

ブール値

ブール値

op_or(is_male, is_student)

IN

op_in(value, json_array)

value:任意の型、json_array:JSON形式の文字列

ブール値

op_in(id,json_array('["0","1","2","3","4","5","6","7","8"]'))

null である

op_is_null(value)

任意の型

ブール値

op_is_null(name)

null でない

op_is_not_null(value)

任意の型

ブール値

op_is_not_null(name)

文字列関数

関数

構文

パラメーター

戻り値

文字列の連結

op_add(str_1, str_2, ..., str_n)

文字列

連結された文字列

op_add(col,'hangzhou','dts')

フォーマットと連結

str_format(format, value1, value2, ...)

format{} プレースホルダーを含む文字列

フォーマットされた文字列

str_format("part1: {}, part2: {}", col1, col2)col1="ab"col2="12" の場合、"part1: ab, part2: 12" を返します

部分文字列の置換

str_replace(original, oldStr, newStr, count)

count: 最大置換回数。 -1 はすべてを置換します

置換後の文字列

str_replace(name, "a", 'b', -1)name="aba" の場合、"bcb" を返します

すべての文字列フィールドで置換

tail_replace_string_field(search, replace, all)

alltrue のみがサポートされています

置換後の文字列

tail_replace_string_field('\u000f','',true) — すべての varchar、text、char フィールドで \u000f を空の文字列に置換します

文字の除去

str_strip(string_val, charSet)

charSet:削除する文字

先頭/末尾の文字が削除された文字列

str_strip(name, 'ab')name="axbzb" の場合、"xbz" を返します

小文字に変換

str_lower(value)

文字列の列または定数

小文字の文字列

str_lower(str_col)

大文字に変換

str_upper(value)

文字列の列または定数

大文字の文字列

str_upper(str_col)

文字列から整数へ

cast_string_to_long(value)

文字列

整数

cast_string_to_long(col)

整数から文字列へ

cast_long_to_string(value)

整数

文字列

cast_long_to_string(col)

出現回数のカウント

str_count(str, pattern)

str:文字列、pattern:検索する部分文字列

出現回数

str_count(str_col, 'abc')str_col="zabcyabcz" の場合、2 を返します

部分文字列の検索

str_find(str, pattern)

str:文字列、pattern:検索する部分文字列

最初の一致位置。見つからない場合は -1

str_find(str_col, 'abc')str_col="xabcy" の場合、1 を返します

すべてが英字かどうかのチェック

str_isalpha(str)

文字列の列または定数

ブール値

str_isalpha(str_col)

すべてが数字かどうかのチェック

str_isdigit(str)

文字列の列または定数

ブール値

str_isdigit(str_col)

正規表現マッチ

regex_match(str, regex)

str:文字列、regex:正規表現パターン

ブール値

regex_match(__TB__,'user_\\\d+')

文字列の一部のマスク

str_mask(str, start, end, maskStr)

start:開始位置 (最小:0)、end:終了位置 (最大:length−1)、maskStr:単一文字

マスクされた文字列

str_mask(phone, 7, 10, '#')

文字列の後にある部分文字列の取得

substring_after(str, cond)

str:元の文字列、cond:デリミタ

cond の後の部分文字列 (デリミタは含まれません)

substring_after(col, 'abc')

文字列の前にある部分文字列の取得

substring_before(str, cond)

str:元の文字列、cond:デリミタ

cond の前の部分文字列 (デリミタは含まれません)

substring_before(col, 'efg')

2つの文字列の間にある部分文字列の取得

substring_between(str, cond1, cond2)

str:元の文字列、cond1cond2:デリミタ

cond1cond2 の間の部分文字列 (デリミタは含まれません)

substring_between(col, 'abc','efg')

値が文字列かどうかのチェック

is_string_value(value)

文字列または列名

ブール値

is_string_value(col1)

MongoDB ドキュメントからのフィールド取得

bson_value("field1", "field2", ...)

ネストされたフィールドパス

フィールド値

e_set(user_name, bson_value("person","name"))

条件式

構文

パラメーター

戻り値

(cond ? val_1 : val_2)

cond:ブール値、val_1val_2:同じ型

cond が true の場合は val_1、それ以外の場合は val_2

(id>1000? 1 : 0)

日時関数

関数

構文

パラメーター

戻り値

現在時刻 (秒精度)

dt_now()

なし

DATETIME、秒単位の精度

dt_now()

現在時刻 (ミリ秒精度)

dt_now_millis()

なし

DATETIME、ミリ秒単位の精度

dt_now_millis()

UTC タイムスタンプ (秒) から DATETIME へ

dt_fromtimestamp(value, [timezone])

value:整数、timezone:省略可能

DATETIME、秒単位の精度

dt_fromtimestamp(1626837629,'GMT+08')

UTC タイムスタンプ (ミリ秒) から DATETIME へ

dt_fromtimestamp_millis(value, [timezone])

value:整数、timezone:省略可能

DATETIME、ミリ秒単位の精度

dt_fromtimestamp_millis(1626837629123,'GMT+08')

DATETIME から UTC タイムスタンプ (秒) へ

dt_parsetimestamp(value, [timezone])

value:DATETIME、timezone:省略可能

整数

dt_parsetimestamp(datetime_col,'GMT+08')

DATETIME から UTC タイムスタンプ (ミリ秒) へ

dt_parsetimestamp_millis(value, [timezone])

value:DATETIME、timezone:省略可能

整数

dt_parsetimestamp_millis(datetime_col,'GMT+08')

DATETIME から文字列へ

dt_str(value, format)

value:DATETIME、formatyyyy-MM-dd HH:mm:ss

文字列

dt_str(col1, 'yyyy-MM-dd HH:mm:ss')

文字列から DATETIME へ

dt_strptime(value, format)

value:文字列、formatyyyy-MM-dd HH:mm:ss

DATETIME

dt_strptime('2021-07-21 03:20:29', 'yyyy-MM-dd HH:mm:ss')

DATETIME の調整

dt_add(value, [years=intVal], [months=intVal], [days=intVal], [hours=intVal], [minutes=intVal])

value:DATETIME、intVal:整数 (負の値は減算)

DATETIME

dt_add(datetime_col,years=-1)

グローバル機能

  • フロー制御関数

    関数

    構文

    パラメーター

    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 操作タイプ (INSERTUPDATEDELETE) を選択する必要があります。

設定手順:

  1. オブジェクトを設定する際、データベースとテーブルを右側のペインに移動し、宛先 Redis DB の編集ボタンをクリックします。

  2. __DTS_TP_TO_REDIS_KEY____DTS_TP_TO_REDIS_VALUE__ を追加します。

  3. 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))

  4. 同期または移行が完了すると、Redis 内のキーと値のペアは次のようになります:

    データ同期が完了したら、DMS を介してターゲット Redis インスタンスに接続します。DB0 で、stat_create_day:{gcp_code}:{uname} タイプのキーに get コマンドを実行します。返される値は datetime 形式 (例:2025-11-18 23:49:29) となり、dt_fromtimestamp 関数が UNIX タイムスタンプを datetime 値に正しく変換したことを確認できます。