Data Transmission Service (DTS) は、抽出、変換、および読み込み (ETL) 機能を提供し、ストリーミングデータをリアルタイムで処理するのに役立ちます。 DTSの効率的なデータレプリケーション機能と組み合わせて、ETLを使用してストリーミングデータを抽出、変換、処理、およびロードできます。 このトピックでは、DTSタスクでETLを設定する方法について説明します。 ETL機能を使用して、データのフィルタリング、データのマスク、データの変更時間の記録、およびデータの変更の監査を行うことができます。
背景情報
DTSは、データソース間のデータ移行とリアルタイムデータ送信に使用されます。 場合によっては、データをデータベースに書き込む前に、リアルタイムデータを変換またはフィルタリングする必要があります。 このような要件を満たすために、DTSはETL機能を提供し、ドメイン固有言語 (DSL) ステートメントを使用してデータを柔軟に処理できます。 DSLの詳細については、このトピックの「DSLの概要」をご参照ください。
次のいずれかの方法を使用してETLを設定できます。
データ移行タスクとデータ同期タスクの両方でETLを設定できます。 この例では、ETLはデータ同期タスクで設定されます。 手順に従って、データ移行タスクでETLを設定することもできます。
サポートされているデータベースサービス
次の表に、ETL機能でサポートされているソースデータベースとターゲットデータベースを示します。
ソースデータベース | 宛先データベース |
SQL Server |
|
MySQL |
|
自己管理型Oracleデータベース |
|
PolarDB for MySQL |
|
PolarDB for PostgreSQL (Oracleと互換) |
|
PolarDB-X 1.0 |
|
PolarDB-X 2.0 |
|
自己管理Db2 for LUWデータベース | MySQL |
自己管理Db2 for iデータベース | MySQL |
POLARDB for PostgreSQL |
|
PostgreSQL |
|
TiDB |
|
MongoDB | Lindorm |
データ同期タスクの作成時にETLを設定する
使用上の注意
構成するETLスクリプトに列を追加する操作が含まれている場合は、手動で宛先テーブルに列を追加する必要があります。 それ以外の場合、ETLスクリプトは有効になりません。 たとえば、ETLスクリプトscript:e_set('new_column', dt_now())
を設定した場合、new_column
列を手動で宛先テーブルに追加する必要があります。
手順
データ同期タスクを作成します。 詳細については、「データ同期シナリオの概要」をご参照ください。
[オブジェクトの設定と詳細設定] ステップの [詳細設定] セクションで、[ETLの設定] パラメーターを [はい] に設定します。 コードエディターで、DSL構文に基づいてデータ処理ステートメントを入力します。
説明DSLを使用してid列の値が3より大きいエントリを削除する場合は、
script:e_if(op_gt('id', 3), e_drop())
ステートメントを使用できます。 このステートメントでは、op_gt
はエントリが特定の値より大きいかどうかを判断するために使用される式関数であり、id
は変数です。 このようにして、id列の値が3より大きいエントリが除外されます。クリック次条: タスク設定と事前チェックを保存するその後の手順を完了します。
既存のデータ同期タスクのETL設定の変更
次のシナリオでETL設定を変更できます。
既存のデータ同期タスクの [Configure ETL] パラメーターが [いいえ] に設定されている場合、このパラメーターを [はい] に設定し、DSLステートメントを入力できます。
既存のデータ同期タスクでConfigure ETLパラメーターがYesに設定されている場合、既存のDSLステートメントを変更するか、このパラメーターをNoに設定できます。
重要既存のDSLステートメントを変更する前に、同期するオブジェクトを 選択中のオブジェクト セクションから ソースオブジェクト セクションに移動し、これらのオブジェクトを 選択中のオブジェクト セクションに再度追加する必要があります。
使用上の注意
既存のデータ同期タスクの場合、タスクのETL設定を変更して宛先テーブルスキーマを変更することはできません。 ターゲットテーブルスキーマは、データ同期タスクが開始される前にのみ変更できます。
ETL設定を変更すると、データ同期タスクが中断される可能性があります。 作業は慎重に行ってください。
ETL設定の変更は、変更後に生成された増分データに対してのみ有効です。
DSLスクリプトで設定されているフィールドは、フィルタ条件によって除外されるフィールドではありません。 それ以外の場合、タスクは異常になります。
DSLスクリプトは大文字と小文字を区別します。 DSLスクリプトで構成されるデータベース、テーブル、およびフィールドの名前は、ソースデータベースのものと同じである必要があります。
DSLスクリプトに複数行の式を含めることはできません。
e_compose
関数を使用して、複数の式を1つの式に結合できます。
手順
に移動します。 新しいDTSコンソールのデータ同期ページ。
ETL設定を変更するデータ同期を検索し、
[アクション] 列のアイコンをクリックし、ETL設定の変更.
[オブジェクトの設定と詳細設定] ステップの [詳細設定] セクションで、[ETLの設定] パラメーターを [はい] に設定します。 コードエディターで、DSL構文に基づいてデータ処理ステートメントを入力します。
説明DSLを使用してid列の値が3より大きいエントリを削除する場合は、
script:e_if(op_gt('id', 3), e_drop())
ステートメントを使用できます。 このステートメントでは、op_gt
はエントリが特定の値より大きいかどうかを判断するために使用される式関数であり、id
は変数です。 このようにして、id列の値が3より大きいエントリが除外されます。クリック次へ: 事前チェックとスタートタスクその後の手順を完了します。
DSLの概要
DSLは、データ同期シナリオでデータを処理するように設計されたスクリプト言語です。 条件関数を使用して、文字列、日付、および数値型のデータを処理できます。 DSLは、データを柔軟に処理するのに役立つ次の特性を誇っています。
さまざまな機能: DSLはさまざまな機能を提供し、組み合わせた機能をサポートします。
単純な構文: DSLは使いやすいです。 DSLを使用してデータをフィルタリング、変換、およびマスクする方法の詳細については、このトピックの「典型的なシナリオ」をご参照ください。
高効率: DSLはコード生成メカニズムを使用するため、DSLはデータ同期パフォーマンスに最小限の影響を与えます。
DSLステートメントでは、列名は単一引用符 (') ではなくバックティック (') で囲まれています。
DSL for DTSの構文には、DSL for Simple Log Serviceの構文と共通点があります。 DSLはJSON関数をサポートし、イベント分割の関数はサポートしません。 DSL For Simple Log Serviceの構文の詳細については、「構文の概要」をご参照ください。
一般的なシナリオ
フィルターデータ
数値列でデータを除外する: id列の値が10000を超えるエントリの場合は、このエントリを削除して、ターゲットデータベースと同期しないようにします。 例: e_if(op_gt('id', 10000), e_drop) 。
特定の文字列でデータを除外する: name列の値に "hangzhou" が含まれているエントリの場合は、このエントリをドロップして、ターゲットデータベースと同期しないようにします。 例: e_if(str_contains('name', "hangzhou"), e_drop) 。
日付によるデータの除外: 注文列のタイムスタンプが特定の時点より前のエントリの場合は、このエントリを削除して、宛先データベースと同期しないようにします。 例: e_if(op_lt('order_timestamp' 、"2015-02-23 23:54:55") 、e_drop) 。
複数の条件でデータを除外する:
id列の値が1000より大きく、name列の値が "hangzhou" を含むエントリがある場合は、このエントリを削除して、ターゲットデータベースと同期しないようにします。 例: e_if(op_and(str_contains('name', "hangzhou")) 、op_gt('id', 1000)) 、e_drop()) 。
id列の値が1000またはname列の値より大きいエントリに "hangzhou" が含まれている場合は、このエントリを削除して、ターゲットデータベースと同期しないようにします。 例: e_if(op_or(str_contains('name', "hangzhou")) 、op_gt('id', 1000)) 、e_drop()) 。
マスクデータ
携帯電話番号の最後の4桁を4つのアスタリスク (*) でマスクします。 例: e_set('phone', str_mask('phone', 7,10, '*')) 。
データが変更された時刻を記録する
すべてのテーブルに列を追加する:_OPERATION__変数の値がINSERT、UPDATE、またはDELETEの場合、値がlogsの__COMMIT_TIMESTAMP__変数と同じdts_sync_timeという名前の列がソースデータベースのすべてのテーブルに追加されます。
e_if(op_or(op_or(op_or () op_eq(__OPERATION __, __OP_INSERT__) 、 op_eq(__OPERATION __, __OP_UPDATE__)) 、 op_eq(__OPERATION __, __OP_DELETE__)) 、 e_set(dts_sync_time, __COMMIT_TIMESTAMP__)
特定のテーブルに列を追加する:__OPERATION__変数の値がINSERT、UPDATE、またはDELETEの場合、値がlogsの__COMMIT_TIMESTAMP__変数と同じdts_sync_timeという名前の列がソースデータベースのdts_test_tableテーブルに追加されます。
e_if(op_and () op_eq(__TB __, 'dts_test_table ') 、 op_or(op_or () op_eq(__OPERATION __,__ OP_INSERT__) 、 op_eq(__OPERATION __,__ OP_UPDATE__)) 、 op_eq(__OPERATION __,__ OP_DELETE__)) 、 e_set(dts_sync_time,__ COMMIT_TIMESTAMP__)
説明上記の操作を実行するには、データ同期タスクを開始する前に、dts_sync_time列をターゲットデータベースの対応するテーブルに追加する必要があります。
監査データの変更
データ変更のタイプと時間を表に記録する: 1. ターゲットデータベースのoperation_type列にデータ変更タイプを記録します。 2. データが変更された時刻をターゲットデータベースの更新済み列に記録します。
e_compose ( e_switch ( op_eq(__OPERATION __,__ OP_DELETE__) 、e_set(operation_type、'DELETE') 、 op_eq(__OPERATION __,__ OP_UPDATE__) 、e_set(operation_type、'UPDATE') 、 op_eq(__OPERATION __,__ OP_INSERT__) 、e_set(operation_type、'INSERT')) 、 e_set(updated, __COMMIT_TIMESTAMP__), e_set(__OPERATION __,__ OP_INSERT__) )
説明データ同期タスクを開始する前に、ターゲットデータベースのテーブルにoperation_type列と更新済み列を追加する必要があります。
DSL 構文
定数と変数
定数
データ型
例
int
123
float
123.4
String
"hello1_world"
Boolean
true または false
datetime
日付 ('2021-01-01 10:10:01 ')
変数
変数
説明
データ型
例
__TB__
<td class="en-UStry align-left colsep-1 rowsep-1">テーブル名。</td>
String
table
__DB__
データベース名。
文字列
mydb
__操作__
操作タイプです。
文字列
__OP_INSERT __,__ OP_UPDATE __,__ OP_DELETE_
__前__
UPDATE操作の前のイメージ値。UPDATE操作が実行される前の列の値です。
説明DELETE操作は、前の画像値のみを有する。
非該当
v('column_name',__ BEFORE__)
__AFTER__
UPDATE操作の新しいイメージ値。UPDATE操作が実行された後の列の値です。
説明INSERT操作には新しいイメージ値のみがあります。
非該当
v('column_name',__ AFTER__)
__COMMIT_TIMESTAMP__
トランザクションがコミットされた時刻。
datetime
'2021-01-01 10:10:01'
「列」
列の名前。
文字列
'id' または 'name'
式関数
算術演算
API 操作
構文
有効値
戻り値
例
加算
op_sum(value1, value2)
value1: 整数または浮動小数点数。
value2: 整数または浮動小数点数。
value1とvalue2が整数の場合、整数が返されます。 そうでなければ、浮動小数点数が返される。
op_sum('col1', 1.0)
減算
op_sub(value1, value2)
value1: 整数または浮動小数点数。
value2: 整数または浮動小数点数。
value1とvalue2が整数の場合、整数が返されます。 そうでなければ、浮動小数点数が返される。
op_sub('col1' 、1.0)
乗算
op_mul(value1, value2)
value1: 整数または浮動小数点数。
value2: 整数または浮動小数点数。
value1とvalue2が整数の場合、整数が返されます。 そうでなければ、浮動小数点数が返される。
op_mul('col1', 1.0)
除算
op_div_true(value1, value2)
value1: 整数または浮動小数点数。
value2: 整数または浮動小数点数。
value1とvalue2が整数の場合、整数が返されます。 そうでなければ、浮動小数点数が返される。
op_div_true('col1', 2.0) 。 この例では、col1の値が15の場合、7.5が返されます。
Modulo
op_mod(value1, value2)
value1: 整数または浮動小数点数。
value2: 整数または浮動小数点数。
value1とvalue2が整数の場合、整数が返されます。 そうでなければ、浮動小数点数が返される。
op_mod('col1', 10) 。 この例では、col1の値が23の場合、3が返されます。
論理操作
API 操作
構文
有効値
戻り値
例
等しい
op_eq(value1, value2)
value1: 整数、浮動小数点数、または文字列。
value2: 整数、浮動小数点数、または文字列。
true または false
op_eq('col1', 23)
超
op_gt(value1, value2)
value1: 整数、浮動小数点数、または文字列。
value2: 整数、浮動小数点数、または文字列。
true または false
op_gt('col1' 、1.0)
未満
op_lt(value1, value2)
value1: 整数、浮動小数点数、または文字列。
value2: 整数、浮動小数点数、または文字列。
true または false
op_lt('col1', 1.0)
以上
op_ge(value1, value2)
value1: 整数、浮動小数点数、または文字列。
value2: 整数、浮動小数点数、または文字列。
true または false
op_ge('col1' 、1.0)
以下
op_le(value1, value2)
value1: 整数、浮動小数点数、または文字列。
value2: 整数、浮動小数点数、または文字列。
true または false
op_le('col1' 、1.0)
AND
op_and(value1, value2)
value1: ブール値。
value2: ブール値。
true または false
op_and('is_male' 、'is_student ')
OR
op_or(value1, value2)
value1: ブール値。
value2: ブール値。
true または false
op_or('is_male' 、'is_student ')
IN
op_in (値, json_array)
value: 任意の値。
json_array: JSON文字列。
true または false
op_in('id',json_array('["0","1","2","3","4","5","6","7","8"]')))
値が空かどうかを判断する
op_is_null (値)
value: 任意の値。
true または false
op_is_null('name')
値が空でないかどうかを判断する
op_is_not_null (値)
value: 任意の値。
true または false
op_is_not_null('name')
文字列関数
API 操作
構文
有効値
戻り値
例
文字列の追加
op_add(str_1、str_2、... 、str_n)
str_1: 文字列。
str_2: 文字列。
...
str_n: 文字列。
追加操作の後の文字列。
op_add('col' 、'hangzhou' 、'dts)
文字列と追加文字列のフォーマット
str_format(format, value1, value2, value3, ...)
format: 文字列。 ブレース ({}) はプレースホルダーとして使用されます。 例: "part1: {}, part2: {}"
value1: 任意の値。
value2: 任意の値。
フォーマット操作の後の文字列。
str_format("part1: {}, part2: {}", 'col1', 'col2') 。 この例では、col1の値がabで、col2の値が12の場合、"part1: ab, part2: 12" が返されます。
文字列の置き換え
str_replace (オリジナル, oldStr, newStr, count)
original: 元の文字列。
oldStr: 置き換えられる文字列。
newStr: 置き換え後の文字列。
count: 文字列を置き換えることができる最大回数を示す整数。 − 1の値は、すべてのoldStrがnewStrに置き換えられることを示す。
置換操作後の文字列。
例1: str_replace('name', "a", 'b', 1) 。 この例では、名前がabaの場合、bbaが返されます。 例2: str_replace('name', "a", 'b', -1) 。 この例では、名前がabaの場合、bbbが返されます。
VARCHAR、TEXT、CHAR型など、すべての文字列型のフィールドの値の文字列を置き換えます。
tail_replace_string_field(search, replace, all)
search: 置き換えられる文字列。
replace: 置換後の文字列。
all: 一致するすべての文字列を置き換えるかどうかを示します。 trueの値のみがサポートされています。
説明一致するすべての文字列を置き換える必要がない場合は、
str_replace()
関数を使用します。
置換操作後の文字列。
tail_replace_string_field('\u000f','',true) 。 この例では、文字列型のフィールド値のすべての "\u000f" 文字列がスペースに置き換えられます。
文字列の先頭と末尾の特定の文字を削除する
str_strip(string_val, charSet)
string_val: 元の文字列。
char_set: 文字列の最初の文字と最後の文字のセット。
remove操作の後の文字列。
str_strip('name', 'ab') 。 この例では、名前が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: 文字列型または文字列定数の列。
true または false
str_isalpha('str_col')
文字列に数字のみが含まれるかどうかを判断する
str_isdigit(str)
str: 文字列型または文字列定数の列。
true または false
str_isdigit('str_col')
正規表現マッチ
regex_match(str,regex)
str: 文字列型または文字列定数の列。
regex: 正規表現。
true または false
regex_match(__TB __, 'user _\\ d + ')
文字列の一部を特定の文字でマスクします。 この操作は、データマスキングに使用することができる。 たとえば、携帯電話番号の最後の4桁を4つのアスタリスク (*) でマスクします。
str_mask(str, start, end, maskStr)
str: 文字列型または文字列定数の列。
start: マスキングの開始位置を示す整数。 最小値は0です。
end: マスキングの終了位置を示す整数。 最大値は、文字列の長さから1を引いた値です。
maskStr: 文字列。 長さは1である。 例: #.
先頭から末尾までの部分が指定された文字でマスクされている文字列。
str_mask('phone', 7,10, '#')
文字列をcond文字列から最後の文字に切り捨てる
substring_after(str, cond)
str: 元の文字列。
cond: 文字列。
truncate操作の後の文字列。
説明戻り値にはcond文字列が含まれていません。
substring_after('col', 'abc')
最初の文字からcond文字列への文字列の切り捨て
substring_before(str, cond)
str: 元の文字列。
cond: 文字列。
truncate操作の後の文字列。
説明戻り値にはcond文字列が含まれていません。
substring_before('col' 、'efg')
cond1文字列からcond2文字列への文字列の切り捨て
substring_between(str, cond1, cond2)
str: 元の文字列。
cond1: 文字列。
cond2: 文字列。
truncate操作の後の文字列。
説明戻り値にはcond1文字列とcond2文字列は含まれません。
substring_between('col' 、'abc' 、'efg')
値が文字列型であるかどうかを判断する
is_string_value(value)
value: 文字列または列名。
true または false
is_string_value('col1')
文字列型のフィールド値の文字列を置き換えます。 置き換えは、フィールド値の最後から開始されます。
tail_replace_string_field(search, replace, all)
search: 置き換えられる文字列。
replace: 置換後の文字列。
all: 一致するすべての文字列を置き換えるかどうかを示します。 有効な値は、true および false です。
置換操作後の文字列。
次の例では、文字列型のフィールド値のすべての "\u000f" 文字列がスペースに置き換えられています。
tail_replace_string_field('\u000f','',true)
MongoDBドキュメント内のフィールドの値を照会する
bson_value("field1" 、"field2" 、"field3" 、...)
field1: レベル1フィールドの名前。
field2: レベル2フィールドの名前。
ドキュメント内の対応するフィールドの値。
e_set('user_id' 、bson_value("id"))
e_set('user_name', bson_value("person","name"))
時間関数
API 操作
構文
有効値
戻り値
例
現在の時刻を照会する
dt_now()
非該当
DATETIMEデータ型の値で、秒単位の精度があります。
dts_now()
dt_now_millis()
非該当
DATETIMEデータ型の正確なミリ秒単位の値。
dt_now_millis()
秒単位のUTCタイムスタンプをDATETIME値に変換する
dt_fromtimestamp(value,[timezone])
value: 整数。
timezone: タイムゾーン。 このパラメーターはオプションです。
DATETIMEデータ型の値で、秒単位の精度があります。
dt_fromtimestamp(1626837629)
dt_fromtimestamp(1626837629、'GMT + 08 ')
UTCタイムスタンプ (ミリ秒) をDATETIME値に変換する
dt_fromtimestamp_millis(value,[timezone])
value: 整数。
timezone: タイムゾーン。 このパラメーターはオプションです。
DATETIMEデータ型の正確なミリ秒単位の値。
dt_fromtimestamp_millis(1626837629123);
dt_fromtimestamp_millis(1626837629123、'GMT 08 ')
DATETIME値をUTCタイムスタンプに秒単位で変換する
dt_parsetimestamp(value,[timezone])
value: DATETIMEデータ型の値。
timezone: タイムゾーン。 このパラメーターはオプションです。
変換操作後の整数。
dt_parsetimestamp('datetime_col')
dt_parsetimestamp('datetime_col' 、'GMT + 08 ')
DATETIME値をUTCタイムスタンプに変換する (ミリ秒単位)
dt_parsetimestamp_millis(value,[timezone])
value: DATETIMEデータ型の値。
timezone: タイムゾーン。 このパラメーターはオプションです。
変換操作後の整数。
dt_parsetimestamp_millis('datetime_col')
dt_parsetimestamp_millis('datetime_col' 、'GMT 08 ')
DATETIME値を文字列に変換する
dt_str (値、形式)
value: DATETIMEデータ型の値。
format: 時間形式を示す文字列。 例: yyyy-MM-dd HH:mm:ss。
変換操作後の文字列。
dt_str('col1', 'yyyy-MM-dd HH:mm:ss')
文字列をDATETIME値に変換する
dt_strptime (値、形式)
value: 文字列。
format: 時間形式を示す文字列。 例: yyyy-MM-dd HH:mm:ss。
変換操作後のDATETIME値。
dt_strptime('2021-07-21 03:20:29 ', 'yyyy-MM-dd hh:mm:ss')
年、月、日、時間、分、秒などの1つ以上の時間粒度の値を増減することによって時間を変更します。
dt_add(value, [years=intVal],
[months=intVal] 、
[days=intVal] 、
[hours=intVal] 、
[minutes=intVal]
)
value: DATETIMEデータ型の値。
intVal: 整数。
説明マイナス記号 (-) は、指定された時間粒度の値が減少したことを示します。
変更操作後のDATETIME値。
dt_add(datetime_col,years=-1)
dt_add(datetime_col,years=1,months=1)
条件式
API 操作
構文
有効値
戻り値
例
条件の結果に基づいて値を返します。 この式は三元演算子 (
?) :
) をC言語で指定します。(cond?) val_1 : val_2)
cond: 値がブール値であるフィールドまたは式。
val_1: 戻り値1。
val_2: 戻り値2。
説明val_1とval_2の値は同じデータ型である必要があります。
condの値がtrueの場合、val_1が返されます。 それ以外の場合、val_2が返されます。
(id>1000? 1 : 0)
グローバル関数
フロー制御機能
API 操作
構文
説明
例
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より大きいエントリの場合、タグ列は大に設定されます。 それ以外の場合、タグ列は小に設定されます。
複数の条件とデフォルト操作を含むSWITCHステートメント
s_switch(condition1, func1, condition2, func2, ..., default = default_func)
条件1: ブール定数または関数。 ブール定数: trueまたはfalse。 関数: op_gt('id', 10) 。
func_invoke: 関数。 condition1がtrueの場合、この関数を呼び出してステートメントを終了します。 それ以外の場合は、次の条件に進みます。
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列の値は現在の時刻に設定されます。
データ操作関数
API 操作
構文
説明
例
ターゲットデータベースに同期されないようにエントリをドロップする
e_drop()
非該当
e_if(op_gt('id', 10), e_drop()) 。 この例では、id列の値が10より大きいエントリは削除されます。
ターゲットデータベースに同期されるようにエントリを保持する
e_keep (条件)
condition: ブール式。
e_keep(op_gt(id, 1)) 。 この例では、id列の値が1より大きいエントリのみが同期されます。
列の値を指定する
e_set('col' 、val)
col: 列の名前。
val: 定数または関数。 valの値のデータ型はcolのデータ型と一致する必要があります。
e_set('dt_col', dt_now()) 。 この例では、dt_col列の値は現在の時刻に設定されています。
e_set('col1', 'col2' + 1) 。 この例では、col1列の値は、col2列の値に1を加えた値に設定されています。
MongoDBデータベース間のデータ移行または同期中に、フィールドの保持、フィールドのドロップ、およびフィールド名マッピング機能の使用
e_expand_bson_value('*', 'fieldA', {"fieldB":"fieldC"})
*: 保持するフィールドの名前。 * はすべてのフィールドを示します。
fieldA: ドロップするフィールドの名前。
{"fieldB":"fieldC"}: フィールド名のマッピング。 fieldBはソースデータベースのフィールドの名前を示し、fieldCはターゲットデータベースのフィールドの名前を示します。
説明フィールド名のマッピングはオプションの式です。
e_expand_bson_value("*", "_id,name") 。 この例では、_idとname以外のフィールドがターゲットデータベースに書き込まれます。